@vue-skuilder/standalone-ui 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{MarkdownRenderer-DoVbFpA6-DYVMsbBP.js → MarkdownRenderer-kStoDRNE-lsnQ9xYB.js} +2 -2
- package/dist/assets/{MarkdownRenderer-DoVbFpA6-DYVMsbBP.js.map → MarkdownRenderer-kStoDRNE-lsnQ9xYB.js.map} +1 -1
- package/dist/assets/{TagViewer-BJ3oLvzL.js → TagViewer-B8eVlesm.js} +2 -2
- package/dist/assets/{TagViewer-BJ3oLvzL.js.map → TagViewer-B8eVlesm.js.map} +1 -1
- package/dist/assets/common-ui.es-CckNkc_L.js +1 -0
- package/dist/assets/{common-ui.es-_Nay4Hg9.js → common-ui.es-DlYghJUY.js} +5 -5
- package/dist/assets/{common-ui.es-_Nay4Hg9.js.map → common-ui.es-DlYghJUY.js.map} +1 -1
- package/dist/assets/{dist-DHzymw-6.js → dist-BA5iGova.js} +9 -6
- package/dist/assets/dist-BA5iGova.js.map +1 -0
- package/dist/assets/{index-lmLOFur1.js → index-jVsEPQR7.js} +5 -5
- package/dist/assets/{index-lmLOFur1.js.map → index-jVsEPQR7.js.map} +1 -1
- package/dist/index.html +4 -4
- package/dist-lib/questions.cjs.js +14 -11
- package/dist-lib/questions.cjs.js.map +1 -1
- package/dist-lib/questions.mjs +114 -26
- package/dist-lib/questions.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/assets/common-ui.es-759gRfOK.js +0 -1
- package/dist/assets/dist-DHzymw-6.js.map +0 -1
|
@@ -30,9 +30,9 @@ Arguments: `+Array.prototype.slice.call(d).join(``)+`
|
|
|
30
30
|
state: () => new MyClass()
|
|
31
31
|
Found in store "${Pr.$id}".`),Or&&g&&u.hydrate&&u.hydrate(Pr.$state,Or),w=!0,T=!0,Pr}function defineStore(t,c,u){let d,m,g=typeof c==`function`;if(typeof t==`string`)d=t,m=g?u:c;else if(m=t,d=t.id,process.env.NODE_ENV!==`production`&&typeof d!=`string`)throw Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`);function useStore(t,u){let b=hasInjectionContext();if(t=(process.env.NODE_ENV===`test`&&activePinia&&activePinia._testing?null:t)||(b?inject(piniaSymbol,null):null),t&&setActivePinia(t),process.env.NODE_ENV!==`production`&&!activePinia)throw Error(`[🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"?
|
|
32
32
|
See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.
|
|
33
|
-
This will fail in production.`);t=activePinia,t._s.has(d)||(g?createSetupStore(d,c,m,t):createOptionsStore(d,m,t),process.env.NODE_ENV!==`production`&&(useStore._pinia=t));let S=t._s.get(d);if(process.env.NODE_ENV!==`production`&&u){let b=`__hot:`+d,S=g?createSetupStore(b,c,m,t,!0):createOptionsStore(b,assign({},m),t,!0);u._hotUpdate(S),delete t.state.value[b],t._s.delete(b)}if(process.env.NODE_ENV!==`production`&&IS_CLIENT){let t=getCurrentInstance();if(t&&t.proxy&&!u){let c=t.proxy,u=`_pStores`in c?c._pStores:c._pStores={};u[d]=S}}return S}return useStore.$id=d,useStore}var activePinia,setActivePinia,piniaSymbol,MutationType,IS_CLIENT,_global,_navigator,isMacOSWebView,saveAs,assign$1,noop,fallbackRunWithContext,ACTION_MARKER,ACTION_NAME,skipHydrateSymbol,assign,init_pinia=__esmMin((()=>{init_lib(),setActivePinia=t=>activePinia=t,piniaSymbol=process.env.NODE_ENV===`production`?Symbol():Symbol(`pinia`),__name$2(isPlainObject$2,`isPlainObject`),(function(t){t.direct=`direct`,t.patchObject=`patch object`,t.patchFunction=`patch function`})(MutationType||(MutationType={})),IS_CLIENT=typeof window<`u`,_global=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof window==`object`&&window.global===window?window:typeof globalThis==`object`?globalThis:{HTMLElement:null},_navigator=typeof navigator==`object`?navigator:{userAgent:``},isMacOSWebView=/Macintosh/.test(_navigator.userAgent)&&/AppleWebKit/.test(_navigator.userAgent)&&!/Safari/.test(_navigator.userAgent),saveAs=IS_CLIENT?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!isMacOSWebView?downloadSaveAs:`msSaveOrOpenBlob`in _navigator?msSaveAs:fileSaverSaveAs:()=>{},{assign:assign$1}=Object,noop=()=>{},fallbackRunWithContext=t=>t(),ACTION_MARKER=Symbol(),ACTION_NAME=Symbol(),skipHydrateSymbol=process.env.NODE_ENV===`production`?Symbol():Symbol(`pinia:skipHydration`),{assign}=Object})),
|
|
33
|
+
This will fail in production.`);t=activePinia,t._s.has(d)||(g?createSetupStore(d,c,m,t):createOptionsStore(d,m,t),process.env.NODE_ENV!==`production`&&(useStore._pinia=t));let S=t._s.get(d);if(process.env.NODE_ENV!==`production`&&u){let b=`__hot:`+d,S=g?createSetupStore(b,c,m,t,!0):createOptionsStore(b,assign({},m),t,!0);u._hotUpdate(S),delete t.state.value[b],t._s.delete(b)}if(process.env.NODE_ENV!==`production`&&IS_CLIENT){let t=getCurrentInstance();if(t&&t.proxy&&!u){let c=t.proxy,u=`_pStores`in c?c._pStores:c._pStores={};u[d]=S}}return S}return useStore.$id=d,useStore}var activePinia,setActivePinia,piniaSymbol,MutationType,IS_CLIENT,_global,_navigator,isMacOSWebView,saveAs,assign$1,noop,fallbackRunWithContext,ACTION_MARKER,ACTION_NAME,skipHydrateSymbol,assign,init_pinia=__esmMin((()=>{init_lib(),setActivePinia=t=>activePinia=t,piniaSymbol=process.env.NODE_ENV===`production`?Symbol():Symbol(`pinia`),__name$2(isPlainObject$2,`isPlainObject`),(function(t){t.direct=`direct`,t.patchObject=`patch object`,t.patchFunction=`patch function`})(MutationType||(MutationType={})),IS_CLIENT=typeof window<`u`,_global=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof window==`object`&&window.global===window?window:typeof globalThis==`object`?globalThis:{HTMLElement:null},_navigator=typeof navigator==`object`?navigator:{userAgent:``},isMacOSWebView=/Macintosh/.test(_navigator.userAgent)&&/AppleWebKit/.test(_navigator.userAgent)&&!/Safari/.test(_navigator.userAgent),saveAs=IS_CLIENT?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!isMacOSWebView?downloadSaveAs:`msSaveOrOpenBlob`in _navigator?msSaveAs:fileSaverSaveAs:()=>{},{assign:assign$1}=Object,noop=()=>{},fallbackRunWithContext=t=>t(),ACTION_MARKER=Symbol(),ACTION_NAME=Symbol(),skipHydrateSymbol=process.env.NODE_ENV===`production`?Symbol():Symbol(`pinia:skipHydration`),{assign}=Object})),MarkdownRenderer_kStoDRNE_exports=__exportAll$1({C:()=>I$2,E:()=>__name,S:()=>useViewable,T:()=>F$3,_:()=>useCardPreviewModeStore,a:()=>ut$2,b:()=>isQuestionView,c:()=>isInlineComponent,d:()=>splitByDelimiters,f:()=>splitParagraphToken,g:()=>se$3,h:()=>de$2,i:()=>Lt$1,l:()=>parseComponentSyntax,m:()=>me$2,n:()=>vn$1,o:()=>containsComponent,p:()=>splitTextToken,r:()=>gn$1,s:()=>isComponent$2,t:()=>yn$1,u:()=>parseComponentToken,v:()=>getPinia,w:()=>_defineProperty$1,x:()=>useQuestionView,y:()=>oe$3});function _typeof$1(t){"@babel/helpers - typeof";return _typeof$1=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(t){return typeof t}:function(t){return t&&typeof Symbol==`function`&&t.constructor===Symbol&&t!==Symbol.prototype?`symbol`:typeof t},_typeof$1(t)}function toPrimitive(t,c){if(_typeof$1(t)!=`object`||!t)return t;var u=t[Symbol.toPrimitive];if(u!==void 0){var d=u.call(t,c||`default`);if(_typeof$1(d)!=`object`)return d;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(c===`string`?String:Number)(t)}function toPropertyKey(t){var c=toPrimitive(t,`string`);return _typeof$1(c)==`symbol`?c:c+``}function _defineProperty$1(t,c,u){return(c=toPropertyKey(c))in t?Object.defineProperty(t,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):t[c]=u,t}function inputElementIsFocused(){let t=document.activeElement;return t instanceof HTMLInputElement&&(t.type===`checkbox`||t.type===`radio`)?!1:t instanceof HTMLElement&&(t.tagName===`INPUT`||t.tagName===`TEXTAREA`||t.tagName===`SELECT`||t.isContentEditable)}function useViewable(t,c,u){let d=ref(hooks.utc()),m=ref([]),g={log:(t,...c)=>console.log(`[${u}]: `,t,...c),error:(t,...c)=>console.error(`[${u}]: `,t,...c),warn:(t,...c)=>console.warn(`[${u}]: `,t,...c)},b=computed(()=>Math.abs(hooks.utc().diff(d.value,`milliseconds`))),getURL=(c,u=0)=>{try{if(t.data[u]?.[c])return URL.createObjectURL(t.data[u][c])}catch(t){g.error(`Error creating URL for item:`,c,t)}return``},emitResponse=t=>{c(`emitResponse`,t)};return{startTime:d,hotKeys:m,timeSpent:b,logger:g,getURL,emitResponse}}function useQuestionView(t){let c=ref(0),u=ref(0),d=ref([]),m=ref(3),g=ref(2),b=ref(),submitAnswer=(c,m,g)=>{if(t.logger.log(`submitAnswer called...`),!b.value)throw Error(`Question not initialized`);d.value.push([c,m??``]);let S=b.value.evaluate(c,t.timeSpent.value);t.logger.log(`evaluation of answer ${c}:`,S);let C={...S,priorAttemps:u.value,courseID:``,cardID:``,timeSpent:t.timeSpent.value,timeStamp:t.startTime.value,userAnswer:c};return g?.deferAdvance!==void 0&&(C.deferAdvance=g.deferAdvance),S.isCorrect||u.value++,t.emitResponse(C),C};return{priorSessionViews:c,priorAttempts:u,priorAnswers:d,maxAttemptsPerView:m,maxSessionViews:g,question:b,submitAnswer}}function isQuestionView(t){return typeof t==`object`&&!!t&&`submitAnswer`in t&&`priorAttempts`in t}function _sfc_render$2$5(t,c,u,d,m,g){return openBlock(),createElementBlock(`span`,le$3,[withDirectives(createBaseVNode(`input`,{"onUpdate:modelValue":c[0]||(c[0]=c=>t.answer=c),autofocus:t.autofocus,type:`text`,class:`user-input-string`,ref:`input`,onKeyup:c[1]||(c[1]=withKeys(c=>t.submitAnswer(t.answer),[`enter`]))},null,40,ue$2),[[vModelText,t.answer]])])}function _sfc_render$1$28(t,c,u,d,m,g){let b=resolveComponent(`user-input-string`);return t.radioType?(openBlock(),createElementBlock(`span`,pe$3,`\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0`)):(openBlock(),createBlock(b,{key:1,id:`input`,icon:!1,type:`text`,value:t.processedText},null,8,[`value`]))}function _getDefaults(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function changeDefaults(t){L$2=t}function edit(t,c=``){let u=typeof t==`string`?t:t.source,d={replace:(t,c)=>{let m=typeof c==`string`?c:c.source;return m=m.replace(z$2.caret,`$1`),u=u.replace(t,m),d},getRegex:()=>new RegExp(u,c)};return d}function escape(t,c){if(c){if(z$2.escapeTest.test(t))return t.replace(z$2.escapeReplace,getEscapeReplacement)}else if(z$2.escapeTestNoEncode.test(t))return t.replace(z$2.escapeReplaceNoEncode,getEscapeReplacement);return t}function cleanUrl(t){try{t=encodeURI(t).replace(z$2.percentDecode,`%`)}catch{return null}return t}function splitCells(t,c){let u=t.replace(z$2.findPipe,(t,c,u)=>{let d=!1,m=c;for(;--m>=0&&u[m]===`\\`;)d=!d;return d?`|`:` |`}).split(z$2.splitPipe),d=0;if(u[0].trim()||u.shift(),u.length>0&&!u.at(-1)?.trim()&&u.pop(),c)if(u.length>c)u.splice(c);else for(;u.length<c;)u.push(``);for(;d<u.length;d++)u[d]=u[d].trim().replace(z$2.slashPipe,`|`);return u}function rtrim(t,c,u){let d=t.length;if(d===0)return``;let m=0;for(;m<d&&t.charAt(d-m-1)===c;)m++;return t.slice(0,d-m)}function findClosingBracket(t,c){if(t.indexOf(c[1])===-1)return-1;let u=0;for(let d=0;d<t.length;d++)if(t[d]===`\\`)d++;else if(t[d]===c[0])u++;else if(t[d]===c[1]&&(u--,u<0))return d;return-1}function outputLink(t,c,u,d,m){let g=c.href,b=c.title||null,S=t[1].replace(m.other.outputLinkReplace,`$1`);if(t[0].charAt(0)!==`!`){d.state.inLink=!0;let t={type:`link`,raw:u,href:g,title:b,text:S,tokens:d.inlineTokens(S)};return d.state.inLink=!1,t}return{type:`image`,raw:u,href:g,title:b,text:S}}function indentCodeCompensation(t,c,u){let d=t.match(u.other.indentCodeCompensation);if(d===null)return c;let m=d[1];return c.split(`
|
|
34
34
|
`).map(t=>{let c=t.match(u.other.beginningSpace);if(c===null)return t;let[d]=c;return d.length>=m.length?t.slice(m.length):t}).join(`
|
|
35
|
-
`)}function marked(t,c){return Z$4.parse(t,c)}function splitByDelimiters(t,c,u){if(t.length===0)return[];let d=[],m=t.indexOf(c),g=t.indexOf(u,m);if(m>=0&&g>m)d.push(t.substring(0,m)),d.push(t.substring(m,g+u.length)),d=d.concat(splitByDelimiters(t.substring(g+u.length),c,u));else return[t];return d}function splitTextToken(t){if(containsComponent(t)){let c=splitByDelimiters(t.text,`{{`,`}}`),u=splitByDelimiters(t.raw,`{{`,`}}`);if(c.length===u.length)return c.map((t,d)=>({type:`text`,text:c[d],raw:u[d]}));throw Error(`Error parsing markdown`)}else return[t]}function splitParagraphToken(t){let c=[];if(containsComponent(t)){let u=splitByDelimiters(t.text,`{{`,`}}`),d=splitByDelimiters(t.raw,`{{`,`}}`);if(u.length===d.length){for(let t=0;t<u.length;t++){let m={type:`text`,text:u[t],raw:d[t]};isComponent$2(m)?c.push(m):ct$2(d[t]).forEach(t=>{t.type===`paragraph`?c=c.concat(t.tokens):c.push(t)})}return c}else throw Error(`Error parsing Markdown`)}else c.push(t);return c}function containsComponent(t){if(t.type===`text`||t.type===`paragraph`){let c=t.raw.indexOf(`{{`),u=t.raw.indexOf(`}}`);return c!==-1&&u!==-1&&u>c}else return!1}function isComponent$2(t){return t.type===`text`&&t.text.startsWith(`{{`)&&t.text.endsWith(`}}`)}function parseComponentSyntax(t){if(t.length>1e4)return null;let c=t.match(/^\{\{\s*<([\w-]+)((?:\s+[\w-]+="[^"]*")*)\s*\/>\s*\}\}$/);if(!c)return null;let u=c[1],d=c[2],m={};if(d){let t=/\s+([\w-]+)="([^"]*)"/g,c;for(;(c=t.exec(d))!==null;)m[c[1]]=c[2]}return{componentName:u,props:m}}function isInlineComponent(t){if(t.length>1e4)return!1;let c=t.trim();return/^<[\w-]+(?:\s+[\w-]+="[^"]*")*\s*\/?>$/.test(c)}function parseComponentToken(t){return parseComponentSyntax(`text`in t?t.text:`raw`in t?t.raw:``)}function javascript$1(t){let c=t.regex,hasClosingTag=(t,{after:c})=>{let u=`</`+t[0].slice(1);return t.input.indexOf(u,c)!==-1},u=pt$2,d={begin:`<>`,end:`</>`},m=/<[A-Za-z0-9\\._:-]+\s*\/>/,g={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(t,c)=>{let u=t[0].length+t.index,d=t.input[u];if(d===`<`||d===`,`){c.ignoreMatch();return}d===`>`&&(hasClosingTag(t,{after:u})||c.ignoreMatch());let m,g=t.input.substring(u);if(m=g.match(/^\s*=/)){c.ignoreMatch();return}if((m=g.match(/^\s+extends\s+/))&&m.index===0){c.ignoreMatch();return}}},b={$pattern:pt$2,keyword:mt$2,literal:ht$2,built_in:bt$1,"variable.language":yt$1},S=`[0-9](_?[0-9])*`,C=`\\.(${S})`,w=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,T={className:`number`,variants:[{begin:`(\\b(${w})((${C})|\\.)?|(${C}))[eE][+-]?(${S})\\b`},{begin:`\\b(${w})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},E={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:b,contains:[]},D={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`xml`}},O={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`css`}},Or={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`graphql`}},kr={className:`string`,begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]},Ar={className:`comment`,variants:[t.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:u+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},jr=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,{match:/\$\d+/},T];E.contains=jr.concat({begin:/\{/,end:/\}/,keywords:b,contains:[`self`].concat(jr)});let Mr=[].concat(Ar,E.contains),Nr=Mr.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:[`self`].concat(Mr)}]),Pr={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr},Fr={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,`(`,c.concat(/\./,u),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,u],scope:{1:`keyword`,3:`title.class`}}]},Ir={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...gt$2,..._t$1]}},Lr={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Rr={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[Pr],illegal:/%/},zr={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function noneOf(t){return c.concat(`(?!`,t.join(`|`),`)`)}let Br={match:c.concat(/\b/,noneOf([...vt$2,`super`,`import`].map(t=>`${t}\\s*\\(`)),u,c.lookahead(/\s*\(/)),className:`title.function`,relevance:0},Vr={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},Hr={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},Pr]},Ur=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+t.UNDERSCORE_IDENT_RE+`)\\s*=>`,Wr={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Ur)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[Pr]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:b,exports:{PARAMS_CONTAINS:Nr,CLASS_REFERENCE:Ir},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),Lr,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,Ar,{match:/\$\d+/},T,Ir,{scope:`attr`,match:u+c.lookahead(`:`),relevance:0},Wr,{begin:`(`+t.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[Ar,t.REGEXP_MODE,{className:`function`,begin:Ur,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:m},{begin:g.begin,"on:begin":g.isTrulyOpeningTag,end:g.end}],subLanguage:`xml`,contains:[{begin:g.begin,end:g.end,skip:!0,contains:[`self`]}]}]},Rr,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+t.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[Pr,t.inherit(t.TITLE_MODE,{begin:u,className:`title.function`})]},{match:/\.\.\./,relevance:0},Vr,{match:`\\$`+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[Pr]},Br,zr,Fr,Hr,{match:/\$[(.]/}]}}function javascript(t){let c=t.regex,hasClosingTag=(t,{after:c})=>{let u=`</`+t[0].slice(1);return t.input.indexOf(u,c)!==-1},u=$$4,d={begin:`<>`,end:`</>`},m=/<[A-Za-z0-9\\._:-]+\s*\/>/,g={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(t,c)=>{let u=t[0].length+t.index,d=t.input[u];if(d===`<`||d===`,`){c.ignoreMatch();return}d===`>`&&(hasClosingTag(t,{after:u})||c.ignoreMatch());let m,g=t.input.substring(u);if(m=g.match(/^\s*=/)){c.ignoreMatch();return}if((m=g.match(/^\s+extends\s+/))&&m.index===0){c.ignoreMatch();return}}},b={$pattern:$$4,keyword:xt$1,literal:St$1,built_in:Dt$1,"variable.language":Et$1},S=`[0-9](_?[0-9])*`,C=`\\.(${S})`,w=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,T={className:`number`,variants:[{begin:`(\\b(${w})((${C})|\\.)?|(${C}))[eE][+-]?(${S})\\b`},{begin:`\\b(${w})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},E={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:b,contains:[]},D={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`xml`}},O={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`css`}},Or={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`graphql`}},kr={className:`string`,begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]},Ar={className:`comment`,variants:[t.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:u+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},jr=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,{match:/\$\d+/},T];E.contains=jr.concat({begin:/\{/,end:/\}/,keywords:b,contains:[`self`].concat(jr)});let Mr=[].concat(Ar,E.contains),Nr=Mr.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:[`self`].concat(Mr)}]),Pr={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr},Fr={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,`(`,c.concat(/\./,u),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,u],scope:{1:`keyword`,3:`title.class`}}]},Ir={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...Ct$1,...wt$1]}},Lr={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Rr={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[Pr],illegal:/%/},zr={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function noneOf(t){return c.concat(`(?!`,t.join(`|`),`)`)}let Br={match:c.concat(/\b/,noneOf([...Tt$1,`super`,`import`].map(t=>`${t}\\s*\\(`)),u,c.lookahead(/\s*\(/)),className:`title.function`,relevance:0},Vr={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},Hr={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},Pr]},Ur=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+t.UNDERSCORE_IDENT_RE+`)\\s*=>`,Wr={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Ur)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[Pr]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:b,exports:{PARAMS_CONTAINS:Nr,CLASS_REFERENCE:Ir},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),Lr,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,Ar,{match:/\$\d+/},T,Ir,{scope:`attr`,match:u+c.lookahead(`:`),relevance:0},Wr,{begin:`(`+t.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[Ar,t.REGEXP_MODE,{className:`function`,begin:Ur,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:m},{begin:g.begin,"on:begin":g.isTrulyOpeningTag,end:g.end}],subLanguage:`xml`,contains:[{begin:g.begin,end:g.end,skip:!0,contains:[`self`]}]}]},Rr,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+t.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[Pr,t.inherit(t.TITLE_MODE,{begin:u,className:`title.function`})]},{match:/\.\.\./,relevance:0},Vr,{match:`\\$`+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[Pr]},Br,zr,Fr,Hr,{match:/\$[(.]/}]}}function typescript(t){let c=t.regex,u=javascript(t),d=$$4,m=[`any`,`void`,`number`,`boolean`,`string`,`object`,`never`,`symbol`,`bigint`,`unknown`],g={begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:`keyword`,3:`title.class`}},b={beginKeywords:`interface`,end:/\{/,excludeEnd:!0,keywords:{keyword:`interface extends`,built_in:m},contains:[u.exports.CLASS_REFERENCE]},S={className:`meta`,relevance:10,begin:/^\s*['"]use strict['"]/},C={$pattern:$$4,keyword:xt$1.concat([`type`,`interface`,`public`,`private`,`protected`,`implements`,`declare`,`abstract`,`readonly`,`enum`,`override`,`satisfies`]),literal:St$1,built_in:Dt$1.concat(m),"variable.language":Et$1},w={className:`meta`,begin:`@`+d},swapMode=(t,c,u)=>{let d=t.contains.findIndex(t=>t.label===c);if(d===-1)throw Error(`can not find mode to replace`);t.contains.splice(d,1,u)};Object.assign(u.keywords,C),u.exports.PARAMS_CONTAINS.push(w);let T=u.contains.find(t=>t.scope===`attr`),E=Object.assign({},T,{match:c.concat(d,c.lookahead(/\s*\?:/))});u.exports.PARAMS_CONTAINS.push([u.exports.CLASS_REFERENCE,T,E]),u.contains=u.contains.concat([w,g,b,E]),swapMode(u,`shebang`,t.SHEBANG()),swapMode(u,`use_strict`,S);let D=u.contains.find(t=>t.label===`func.def`);return D.relevance=0,Object.assign(u,{name:`TypeScript`,aliases:[`ts`,`tsx`,`mts`,`cts`]}),u}function css$1(t){let c=t.regex,u=MODES(t),d={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},m=/@-?\w[\w]*(-\w+)*/,g=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:`CSS`,case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:`from to`},classNameAliases:{keyframePosition:`selector-tag`},contains:[u.BLOCK_COMMENT,d,u.CSS_NUMBER_MODE,{className:`selector-id`,begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:`selector-class`,begin:`\\.[a-zA-Z-][a-zA-Z0-9_-]*`,relevance:0},u.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,variants:[{begin:`:(`+Mt$1.join(`|`)+`)`},{begin:`:(:)?(`+Nt$1.join(`|`)+`)`}]},u.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+Pt$1.join(`|`)+`)\\b`},{begin:/:/,end:/[;}{]/,contains:[u.BLOCK_COMMENT,u.HEXCOLOR,u.IMPORTANT,u.CSS_NUMBER_MODE,...g,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:`url data-uri`},contains:[...g,{className:`string`,begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},u.FUNCTION_DISPATCH]},{begin:c.lookahead(/@/),end:`[{;]`,relevance:0,illegal:/:/,contains:[{className:`keyword`,begin:m},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:jt$1.join(` `)},contains:[{begin:/[a-z-]+(?=:)/,className:`attribute`},...g,u.CSS_NUMBER_MODE]}]},{className:`selector-tag`,begin:`\\b(`+At$1.join(`|`)+`)\\b`}]}}function xml(t){let c=t.regex,u=c.concat(/[\p{L}_]/u,c.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),d=/[\p{L}0-9._:-]+/u,m={className:`symbol`,begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},g={begin:/\s/,contains:[{className:`keyword`,begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},b=t.inherit(g,{begin:/\(/,end:/\)/}),S=t.inherit(t.APOS_STRING_MODE,{className:`string`}),C=t.inherit(t.QUOTE_STRING_MODE,{className:`string`}),w={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:`attr`,begin:d,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:`string`,endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[m]},{begin:/'/,end:/'/,contains:[m]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:`HTML, XML`,aliases:[`html`,`xhtml`,`rss`,`atom`,`xjb`,`xsd`,`xsl`,`plist`,`wsf`,`svg`],case_insensitive:!0,unicodeRegex:!0,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,relevance:10,contains:[g,C,S,b,{begin:/\[/,end:/\]/,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,contains:[g,b,C,S]}]}]},t.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},m,{className:`meta`,end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[C]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:`tag`,begin:/<style(?=\s|>)/,end:/>/,keywords:{name:`style`},contains:[w],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:[`css`,`xml`]}},{className:`tag`,begin:/<script(?=\s|>)/,end:/>/,keywords:{name:`script`},contains:[w],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:[`javascript`,`handlebars`,`xml`]}},{className:`tag`,begin:/<>|<\/>/},{className:`tag`,begin:c.concat(/</,c.lookahead(c.concat(u,c.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:`name`,begin:u,relevance:0,starts:w}]},{className:`tag`,begin:c.concat(/<\//,c.lookahead(c.concat(u,/>/))),contains:[{className:`name`,begin:u,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function bash(t){let c=t.regex,u={},d={begin:/\$\{/,end:/\}/,contains:[`self`,{begin:/:-/,contains:[u]}]};Object.assign(u,{className:`variable`,variants:[{begin:c.concat(/\$[\w\d#@][\w\d_]*/,`(?![\\w\\d])(?![$])`)},d]});let m={className:`subst`,begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},g=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:`comment`}}),b={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:`string`})]}},S={className:`string`,begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,u,m]};m.contains.push(S);let C={match:/\\"/},w={className:`string`,begin:/'/,end:/'/},T={match:/\\'/},E={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:`number`},t.NUMBER_MODE,u]},D=t.SHEBANG({binary:`(${[`fish`,`bash`,`zsh`,`sh`,`csh`,`ksh`,`tcsh`,`dash`,`scsh`].join(`|`)})`,relevance:10}),O={className:`function`,begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},Or=[`if`,`then`,`else`,`elif`,`fi`,`time`,`for`,`while`,`until`,`in`,`do`,`done`,`case`,`esac`,`coproc`,`function`,`select`],kr=[`true`,`false`],Ar={match:/(\/[a-z._-]+)+/},jr=[`break`,`cd`,`continue`,`eval`,`exec`,`exit`,`export`,`getopts`,`hash`,`pwd`,`readonly`,`return`,`shift`,`test`,`times`,`trap`,`umask`,`unset`],Mr=[`alias`,`bind`,`builtin`,`caller`,`command`,`declare`,`echo`,`enable`,`help`,`let`,`local`,`logout`,`mapfile`,`printf`,`read`,`readarray`,`source`,`sudo`,`type`,`typeset`,`ulimit`,`unalias`],Nr=`autoload.bg.bindkey.bye.cap.chdir.clone.comparguments.compcall.compctl.compdescribe.compfiles.compgroups.compquote.comptags.comptry.compvalues.dirs.disable.disown.echotc.echoti.emulate.fc.fg.float.functions.getcap.getln.history.integer.jobs.kill.limit.log.noglob.popd.print.pushd.pushln.rehash.sched.setcap.setopt.stat.suspend.ttyctl.unfunction.unhash.unlimit.unsetopt.vared.wait.whence.where.which.zcompile.zformat.zftp.zle.zmodload.zparseopts.zprof.zpty.zregexparse.zsocket.zstyle.ztcp`.split(`.`),Pr=`chcon.chgrp.chown.chmod.cp.dd.df.dir.dircolors.ln.ls.mkdir.mkfifo.mknod.mktemp.mv.realpath.rm.rmdir.shred.sync.touch.truncate.vdir.b2sum.base32.base64.cat.cksum.comm.csplit.cut.expand.fmt.fold.head.join.md5sum.nl.numfmt.od.paste.ptx.pr.sha1sum.sha224sum.sha256sum.sha384sum.sha512sum.shuf.sort.split.sum.tac.tail.tr.tsort.unexpand.uniq.wc.arch.basename.chroot.date.dirname.du.echo.env.expr.factor.groups.hostid.id.link.logname.nice.nohup.nproc.pathchk.pinky.printenv.printf.pwd.readlink.runcon.seq.sleep.stat.stdbuf.stty.tee.test.timeout.tty.uname.unlink.uptime.users.who.whoami.yes`.split(`.`);return{name:`Bash`,aliases:[`sh`,`zsh`],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:Or,literal:kr,built_in:[...jr,...Mr,`set`,`shopt`,...Nr,...Pr]},contains:[D,t.SHEBANG(),O,E,g,b,Ar,S,C,w,T,u]}}function json(t){let c={className:`attr`,begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},u={match:/[{}[\],:]/,className:`punctuation`,relevance:0},d=[`true`,`false`,`null`],m={scope:`literal`,beginKeywords:d.join(` `)};return{name:`JSON`,aliases:[`jsonc`],keywords:{literal:d},contains:[c,u,t.QUOTE_STRING_MODE,m,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:`\\S`}}function go(t){let c={keyword:[`break`,`case`,`chan`,`const`,`continue`,`default`,`defer`,`else`,`fallthrough`,`for`,`func`,`go`,`goto`,`if`,`import`,`interface`,`map`,`package`,`range`,`return`,`select`,`struct`,`switch`,`type`,`var`],type:[`bool`,`byte`,`complex64`,`complex128`,`error`,`float32`,`float64`,`int8`,`int16`,`int32`,`int64`,`string`,`uint8`,`uint16`,`uint32`,`uint64`,`int`,`uint`,`uintptr`,`rune`],literal:[`true`,`false`,`iota`,`nil`],built_in:[`append`,`cap`,`close`,`complex`,`copy`,`imag`,`len`,`make`,`new`,`panic`,`print`,`println`,`real`,`recover`,`delete`]};return{name:`Go`,aliases:[`golang`],keywords:c,illegal:`</`,contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:`string`,variants:[t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:`number`,variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:`function`,beginKeywords:`func`,end:`\\s*(\\{|$)`,excludeEnd:!0,contains:[t.TITLE_MODE,{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:c,illegal:/["']/}]}]}}function python(t){let c=t.regex,u=/[\p{XID_Start}_]\p{XID_Continue}*/u,d=`and.as.assert.async.await.break.case.class.continue.def.del.elif.else.except.finally.for.from.global.if.import.in.is.lambda.match.nonlocal|10.not.or.pass.raise.return.try.while.with.yield`.split(`.`),m={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:d,built_in:`__import__.abs.all.any.ascii.bin.bool.breakpoint.bytearray.bytes.callable.chr.classmethod.compile.complex.delattr.dict.dir.divmod.enumerate.eval.exec.filter.float.format.frozenset.getattr.globals.hasattr.hash.help.hex.id.input.int.isinstance.issubclass.iter.len.list.locals.map.max.memoryview.min.next.object.oct.open.ord.pow.print.property.range.repr.reversed.round.set.setattr.slice.sorted.staticmethod.str.sum.super.tuple.type.vars.zip`.split(`.`),literal:[`__debug__`,`Ellipsis`,`False`,`None`,`NotImplemented`,`True`],type:[`Any`,`Callable`,`Coroutine`,`Dict`,`List`,`Literal`,`Generic`,`Optional`,`Sequence`,`Set`,`Tuple`,`Type`,`Union`]},g={className:`meta`,begin:/^(>>>|\.\.\.) /},b={className:`subst`,begin:/\{/,end:/\}/,keywords:m,illegal:/#/},S={begin:/\{\{/,relevance:0},C={className:`string`,contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,g],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,g],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,g,S,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,g,S,b]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,S,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,S,b]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},w=`[0-9](_?[0-9])*`,T=`(\\b(${w}))?\\.(${w})|\\b(${w})\\.`,E=`\\b|${d.join(`|`)}`,D={className:`number`,relevance:0,variants:[{begin:`(\\b(${w})|(${T}))[eE][+-]?(${w})[jJ]?(?=${E})`},{begin:`(${T})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${E})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${E})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${E})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${E})`},{begin:`\\b(${w})[jJ](?=${E})`}]},O={className:`comment`,begin:c.lookahead(/# type:/),end:/$/,keywords:m,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},Or={className:`params`,variants:[{className:``,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:m,contains:[`self`,g,D,C,t.HASH_COMMENT_MODE]}]};return b.contains=[C,D,g],{name:`Python`,aliases:[`py`,`gyp`,`ipython`],unicodeRegex:!0,keywords:m,illegal:/(<\/|\?)|=>/,contains:[g,D,{scope:`variable.language`,match:/\bself\b/},{beginKeywords:`if`,relevance:0},{match:/\bor\b/,scope:`keyword`},C,O,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,u],scope:{1:`keyword`,3:`title.function`},contains:[Or]},{variants:[{match:[/\bclass/,/\s+/,u,/\s*/,/\(\s*/,u,/\s*\)/]},{match:[/\bclass/,/\s+/,u]}],scope:{1:`keyword`,3:`title.class`,6:`title.class.inherited`}},{className:`meta`,begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[D,Or,C]}]}}function _sfc_render$29(t,c,u,d,m,g){let b=resolveComponent(`md-token-renderer`),S=resolveComponent(`audio-auto-player`);return openBlock(),createElementBlock(`div`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tokens,(c,u)=>(openBlock(),createElementBlock(`span`,{key:u},[c.type?(openBlock(),createBlock(b,{key:0,token:c,last:u===t.tokens.length-1},null,8,[`token`,`last`])):c.audio?(openBlock(),createBlock(S,{key:1,src:c.audio},null,8,[`src`])):createCommentVNode(``,!0)]))),128))])}var j$3,M$3,__name,N$3,te$2,P$2,ne$3,__commonJSMin,__exportAll,__copyProps,__toESM,F$3,re$3,ie$3,I$2,ae$3,setPinia,getPinia,oe$3,useCardPreviewModeStore,se$3,ce$3,le$3,ue$2,de$2,fe$2,pe$3,me$2,L$2,R$2,z$2,he$2,ge$2,_e$1,B$2,ve$2,V$2,ye$2,be$1,xe$1,H$2,Se$1,U$2,Ce$1,we$1,W$3,Te$2,Ee$2,De$2,Oe$2,ke$3,Ae$2,je$2,Me$2,Ne$2,Pe$2,Fe$2,G$3,Ie$2,Le$2,Re$2,ze$2,Be$2,Ve$2,He$2,Ue$2,We$2,Ge$2,Ke$2,qe$2,Je$2,Ye$2,Xe$2,Ze$2,Qe$2,$e$2,K$3,et$2,tt$2,nt$2,rt$2,it$2,at$2,ot$2,q$3,J$3,st$2,getEscapeReplacement,_Tokenizer,Y$3,_Renderer,_TextRenderer,X$3,_Hooks,Marked,Z$4,ct$2,lt$2,ut$2,Q$3,dt$2,ft$2,pt$2,mt$2,ht$2,gt$2,_t$1,vt$2,yt$1,bt$1,$$4,xt$1,St$1,Ct$1,wt$1,Tt$1,Et$1,Dt$1,MODES,Ot$1,kt$1,At$1,jt$1,Mt$1,Nt$1,Pt$1,Ft$1,It$1,Lt$1,Rt$1,zt$1,Bt$1,Vt$1,Ht$1,Ut$1,Wt$1,Gt$1,Kt$1,qt$1,Jt$1,Yt$1,Xt$1,Zt$1,Qt$1,$t$1,en$1,tn$1,nn$1,rn$1,an$1,on$2,sn$1,cn$1,ln$1,un$1,dn$1,fn$1,pn$1,mn$1,hn$1,gn$1,_n$1,vn$1,yn$1,init_MarkdownRenderer_DoVbFpA6=__esmMin((()=>{init_vue_runtime_esm_bundler(),init_moment(),init_dist$1(),init_pinia(),j$3=Object.create,M$3=Object.defineProperty,__name=(t,c)=>M$3(t,`name`,{value:c,configurable:!0}),N$3=Object.getOwnPropertyDescriptor,te$2=Object.getOwnPropertyNames,P$2=Object.getPrototypeOf,ne$3=Object.prototype.hasOwnProperty,__commonJSMin=(t,c)=>()=>(c||t((c={exports:{}}).exports,c),c.exports),__exportAll=(t,c)=>{let u={};for(var d in t)M$3(u,d,{get:t[d],enumerable:!0});return c||M$3(u,Symbol.toStringTag,{value:`Module`}),u},__copyProps=(t,c,u,d)=>{if(c&&typeof c==`object`||typeof c==`function`)for(var m=te$2(c),g=0,b=m.length,S;g<b;g++)S=m[g],!ne$3.call(t,S)&&S!==u&&M$3(t,S,{get:(t=>c[t]).bind(null,S),enumerable:!(d=N$3(c,S))||d.enumerable});return t},__toESM=(t,c,u)=>(u=t==null?{}:j$3(P$2(t)),__copyProps(c||!t||!t.__esModule?M$3(u,`default`,{value:t,enumerable:!0}):u,t)),F$3=__name((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`default`),re$3=__commonJSMin(((t,c)=>{(function(t,u,d){if(!t)return;for(var m={8:`backspace`,9:`tab`,13:`enter`,16:`shift`,17:`ctrl`,18:`alt`,20:`capslock`,27:`esc`,32:`space`,33:`pageup`,34:`pagedown`,35:`end`,36:`home`,37:`left`,38:`up`,39:`right`,40:`down`,45:`ins`,46:`del`,91:`meta`,93:`meta`,224:`meta`},g={106:`*`,107:`+`,109:`-`,110:`.`,111:`/`,186:`;`,187:`=`,188:`,`,189:`-`,190:`.`,191:`/`,192:"`",219:`[`,220:`\\`,221:`]`,222:`'`},b={"~":"`","!":`1`,"@":`2`,"#":`3`,$:`4`,"%":`5`,"^":`6`,"&":`7`,"*":`8`,"(":`9`,")":`0`,_:`-`,"+":`=`,":":`;`,'"':`'`,"<":`,`,">":`.`,"?":`/`,"|":`\\`},S={option:`alt`,command:`meta`,return:`enter`,escape:`esc`,plus:`+`,mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?`meta`:`ctrl`},C,w=1;w<20;++w)m[111+w]=`f`+w;for(w=0;w<=9;++w)m[w+96]=w.toString();function _addEvent(t,c,u){if(t.addEventListener){t.addEventListener(c,u,!1);return}t.attachEvent(`on`+c,u)}function _characterFromEvent(t){if(t.type==`keypress`){var c=String.fromCharCode(t.which);return t.shiftKey||(c=c.toLowerCase()),c}return m[t.which]?m[t.which]:g[t.which]?g[t.which]:String.fromCharCode(t.which).toLowerCase()}function _modifiersMatch(t,c){return t.sort().join(`,`)===c.sort().join(`,`)}function _eventModifiers(t){var c=[];return t.shiftKey&&c.push(`shift`),t.altKey&&c.push(`alt`),t.ctrlKey&&c.push(`ctrl`),t.metaKey&&c.push(`meta`),c}function _preventDefault(t){if(t.preventDefault){t.preventDefault();return}t.returnValue=!1}function _stopPropagation(t){if(t.stopPropagation){t.stopPropagation();return}t.cancelBubble=!0}function _isModifier(t){return t==`shift`||t==`ctrl`||t==`alt`||t==`meta`}function _getReverseMap(){if(!C)for(var t in C={},m)t>95&&t<112||m.hasOwnProperty(t)&&(C[m[t]]=t);return C}function _pickBestAction(t,c,u){return u||(u=_getReverseMap()[t]?`keydown`:`keypress`),u==`keypress`&&c.length&&(u=`keydown`),u}function _keysFromString(t){return t===`+`?[`+`]:(t=t.replace(/\+{2}/g,`+plus`),t.split(`+`))}function _getKeyInfo(t,c){var u,d,m,g=[];for(u=_keysFromString(t),m=0;m<u.length;++m)d=u[m],S[d]&&(d=S[d]),c&&c!=`keypress`&&b[d]&&(d=b[d],g.push(`shift`)),_isModifier(d)&&g.push(d);return c=_pickBestAction(d,g,c),{key:d,modifiers:g,action:c}}function _belongsTo(t,c){return t===null||t===u?!1:t===c?!0:_belongsTo(t.parentNode,c)}function Mousetrap(t){var c=this;if(t=t||u,!(c instanceof Mousetrap))return new Mousetrap(t);c.target=t,c._callbacks={},c._directMap={};var d={},m,g=!1,b=!1,S=!1;function _resetSequences(t){t=t||{};var c=!1,u;for(u in d){if(t[u]){c=!0;continue}d[u]=0}c||(S=!1)}function _getMatches(t,u,m,g,b,S){var C,w,T=[],E=m.type;if(!c._callbacks[t])return[];for(E==`keyup`&&_isModifier(t)&&(u=[t]),C=0;C<c._callbacks[t].length;++C)if(w=c._callbacks[t][C],!(!g&&w.seq&&d[w.seq]!=w.level)&&E==w.action&&(E==`keypress`&&!m.metaKey&&!m.ctrlKey||_modifiersMatch(u,w.modifiers))){var D=!g&&w.combo==b,O=g&&w.seq==g&&w.level==S;(D||O)&&c._callbacks[t].splice(C,1),T.push(w)}return T}function _fireCallback(t,u,d,m){c.stopCallback(u,u.target||u.srcElement,d,m)||t(u,d)===!1&&(_preventDefault(u),_stopPropagation(u))}c._handleKey=function(t,c,u){var d=_getMatches(t,c,u),m,g={},C=0,w=!1;for(m=0;m<d.length;++m)d[m].seq&&(C=Math.max(C,d[m].level));for(m=0;m<d.length;++m){if(d[m].seq){if(d[m].level!=C)continue;w=!0,g[d[m].seq]=1,_fireCallback(d[m].callback,u,d[m].combo,d[m].seq);continue}w||_fireCallback(d[m].callback,u,d[m].combo)}var T=u.type==`keypress`&&b;u.type==S&&!_isModifier(t)&&!T&&_resetSequences(g),b=w&&u.type==`keydown`};function _handleKeyEvent(t){typeof t.which!=`number`&&(t.which=t.keyCode);var u=_characterFromEvent(t);if(u){if(t.type==`keyup`&&g===u){g=!1;return}c.handleKey(u,_eventModifiers(t),t)}}function _resetSequenceTimer(){clearTimeout(m),m=setTimeout(_resetSequences,1e3)}function _bindSequence(t,c,u,m){d[t]=0;function _increaseSequence(c){return function(){S=c,++d[t],_resetSequenceTimer()}}function _callbackAndReset(c){_fireCallback(u,c,t),m!==`keyup`&&(g=_characterFromEvent(c)),setTimeout(_resetSequences,10)}for(var b=0;b<c.length;++b){var C=b+1===c.length?_callbackAndReset:_increaseSequence(m||_getKeyInfo(c[b+1]).action);_bindSingle(c[b],C,m,t,b)}}function _bindSingle(t,u,d,m,g){c._directMap[t+`:`+d]=u,t=t.replace(/\s+/g,` `);var b=t.split(` `),S;if(b.length>1){_bindSequence(t,b,u,d);return}S=_getKeyInfo(t,d),c._callbacks[S.key]=c._callbacks[S.key]||[],_getMatches(S.key,S.modifiers,{type:S.action},m,t,g),c._callbacks[S.key][m?`unshift`:`push`]({callback:u,modifiers:S.modifiers,action:S.action,seq:m,level:g,combo:t})}c._bindMultiple=function(t,c,u){for(var d=0;d<t.length;++d)_bindSingle(t[d],c,u)},_addEvent(t,`keypress`,_handleKeyEvent),_addEvent(t,`keydown`,_handleKeyEvent),_addEvent(t,`keyup`,_handleKeyEvent)}Mousetrap.prototype.bind=function(t,c,u){var d=this;return t=t instanceof Array?t:[t],d._bindMultiple.call(d,t,c,u),d},Mousetrap.prototype.unbind=function(t,c){var u=this;return u.bind.call(u,t,function(){},c)},Mousetrap.prototype.trigger=function(t,c){var u=this;return u._directMap[t+`:`+c]&&u._directMap[t+`:`+c]({},t),u},Mousetrap.prototype.reset=function(){var t=this;return t._callbacks={},t._directMap={},t},Mousetrap.prototype.stopCallback=function(t,c){var u=this;if((` `+c.className+` `).indexOf(` mousetrap `)>-1||_belongsTo(c,u.target))return!1;if(`composedPath`in t&&typeof t.composedPath==`function`){var d=t.composedPath()[0];d!==t.target&&(c=d)}return c.tagName==`INPUT`||c.tagName==`SELECT`||c.tagName==`TEXTAREA`||c.isContentEditable},Mousetrap.prototype.handleKey=function(){var t=this;return t._handleKey.apply(t,arguments)},Mousetrap.addKeycodes=function(t){for(var c in t)t.hasOwnProperty(c)&&(m[c]=t[c]);C=null},Mousetrap.init=function(){var t=Mousetrap(u);for(var c in t)c.charAt(0)!==`_`&&(Mousetrap[c]=function(c){return function(){return t[c].apply(t,arguments)}}(c))},Mousetrap.init(),t.Mousetrap=Mousetrap,c!==void 0&&c.exports&&(c.exports=Mousetrap),typeof define==`function`&&define.amd&&define(function(){return Mousetrap})})(typeof window<`u`?window:null,typeof window<`u`?document:null)})),__name$2(_typeof$1,`_typeof`),__name$2(_defineProperty$1,`_defineProperty`),ie$3=__toESM(re$3()),I$2=class SkldrMouseTrap{constructor(){_defineProperty$1(this,`mouseTrap`,void 0),_defineProperty$1(this,`hotkeys`,void 0),this.mouseTrap=new ie$3.default,this.mouseTrap.stopCallback=()=>!1,this.hotkeys=[]}static get commands(){return SkldrMouseTrap.instance().hotkeys.map(t=>({command:t.command,hotkey:t.hotkey}))}static addBinding(t){let c=Array.isArray(t)?t:[t],u=SkldrMouseTrap.instance();u.hotkeys=[...u.hotkeys,...c],c.forEach(t=>{u.mouseTrap.bind(t.hotkey,(c,u)=>{if(inputElementIsFocused()){console.log(`Ignoring hotkey ${t.hotkey} while input element is focused`);return}t.callback(c,u)})})}static removeBinding(t){let c=SkldrMouseTrap.instance(),u=[...c.hotkeys];Array.isArray(t)&&!t.every(t=>typeof t==`string`||typeof t==`number`)?t.forEach(t=>{c.hotkeys=c.hotkeys.filter(c=>JSON.stringify(c.hotkey)!==JSON.stringify(t)),c.mouseTrap.unbind(t)}):(c.hotkeys=u.filter(c=>JSON.stringify(c.hotkey)!==JSON.stringify(t)),c.mouseTrap.unbind(t))}static reset(){console.warn(`SkldrMouseTrap.reset() may affect hotkeys registered by other components. Consider using removeBinding() with specific hotkeys for better component isolation.`),SkldrMouseTrap.instance().mouseTrap.reset(),SkldrMouseTrap.instance().hotkeys=[]}static instance(){return SkldrMouseTrap._instance||(SkldrMouseTrap._instance=new SkldrMouseTrap),SkldrMouseTrap._instance}},_defineProperty$1(I$2,`_instance`,void 0),ae$3=null,setPinia=t=>{ae$3=t},getPinia=()=>ae$3,oe$3={install(t,c){let u=c?.pinia;u&&setPinia(u)}},useCardPreviewModeStore=()=>{let t=getPinia();return t&&setActivePinia(t),defineStore(`previewMode`,{state:()=>({previewMode:!1}),actions:{setPreviewMode(t){this.previewMode=t}},getters:{isPreviewMode(){return this.previewMode}}})()},se$3=defineComponent({name:`UserInput`,data(){return{answer:``,previewModeStore:null}},mounted(){this.previewModeStore=useCardPreviewModeStore()},computed:{autofocus(){return!this.previewModeStore?.previewMode},autoFocus(){return this.autofocus}},methods:{submitAnswer(t){return this.submit(t)},submit(t){return this.getQuestionViewAncestor().submitAnswer(t,this.$options.name??`UserInput`)},getQuestionViewAncestor(){let t=this.$parent,c=0;for(;t&&!isQuestionView(t);){let u=t.$parent;if(!u){let t=`
|
|
35
|
+
`)}function marked(t,c){return Z$4.parse(t,c)}function splitByDelimiters(t,c,u){if(t.length===0)return[];let d=[],m=t.indexOf(c),g=t.indexOf(u,m);if(m>=0&&g>m)d.push(t.substring(0,m)),d.push(t.substring(m,g+u.length)),d=d.concat(splitByDelimiters(t.substring(g+u.length),c,u));else return[t];return d}function stripTrailingNewlines(t){return t.replace(/[\r\n]+$/,``)}function splitTextToken(t){if(containsComponent(t)){let c=splitByDelimiters(stripTrailingNewlines(t.text),`{{`,`}}`),u=splitByDelimiters(stripTrailingNewlines(t.raw),`{{`,`}}`);if(c.length===u.length)return c.map((t,d)=>({type:`text`,text:c[d],raw:u[d]}));throw Error(`Error parsing markdown`)}else return[t]}function splitParagraphToken(t){let c=[];if(containsComponent(t)){let u=splitByDelimiters(stripTrailingNewlines(t.text),`{{`,`}}`),d=splitByDelimiters(stripTrailingNewlines(t.raw),`{{`,`}}`);if(u.length===d.length){for(let t=0;t<u.length;t++){let m={type:`text`,text:u[t],raw:d[t]};isComponent$2(m)?c.push(m):ct$2(d[t]).forEach(t=>{t.type===`paragraph`?c=c.concat(t.tokens):c.push(t)})}return c}else throw Error(`Error parsing Markdown`)}else c.push(t);return c}function containsComponent(t){if(t.type===`text`||t.type===`paragraph`){let c=t.raw.indexOf(`{{`),u=t.raw.indexOf(`}}`);return c!==-1&&u!==-1&&u>c}else return!1}function isComponent$2(t){return t.type===`text`&&t.text.startsWith(`{{`)&&t.text.endsWith(`}}`)}function parseComponentSyntax(t){if(t.length>1e4)return null;let c=t.match(/^\{\{\s*<([\w-]+)((?:\s+[\w-]+="[^"]*")*)\s*\/>\s*\}\}$/);if(!c)return null;let u=c[1],d=c[2],m={};if(d){let t=/\s+([\w-]+)="([^"]*)"/g,c;for(;(c=t.exec(d))!==null;)m[c[1]]=c[2]}return{componentName:u,props:m}}function isInlineComponent(t){if(t.length>1e4)return!1;let c=t.trim();return/^<[\w-]+(?:\s+[\w-]+="[^"]*")*\s*\/?>$/.test(c)}function parseComponentToken(t){return parseComponentSyntax(`text`in t?t.text:`raw`in t?t.raw:``)}function javascript$1(t){let c=t.regex,hasClosingTag=(t,{after:c})=>{let u=`</`+t[0].slice(1);return t.input.indexOf(u,c)!==-1},u=pt$2,d={begin:`<>`,end:`</>`},m=/<[A-Za-z0-9\\._:-]+\s*\/>/,g={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(t,c)=>{let u=t[0].length+t.index,d=t.input[u];if(d===`<`||d===`,`){c.ignoreMatch();return}d===`>`&&(hasClosingTag(t,{after:u})||c.ignoreMatch());let m,g=t.input.substring(u);if(m=g.match(/^\s*=/)){c.ignoreMatch();return}if((m=g.match(/^\s+extends\s+/))&&m.index===0){c.ignoreMatch();return}}},b={$pattern:pt$2,keyword:mt$2,literal:ht$2,built_in:bt$1,"variable.language":yt$1},S=`[0-9](_?[0-9])*`,C=`\\.(${S})`,w=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,T={className:`number`,variants:[{begin:`(\\b(${w})((${C})|\\.)?|(${C}))[eE][+-]?(${S})\\b`},{begin:`\\b(${w})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},E={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:b,contains:[]},D={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`xml`}},O={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`css`}},Or={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`graphql`}},kr={className:`string`,begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]},Ar={className:`comment`,variants:[t.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:u+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},jr=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,{match:/\$\d+/},T];E.contains=jr.concat({begin:/\{/,end:/\}/,keywords:b,contains:[`self`].concat(jr)});let Mr=[].concat(Ar,E.contains),Nr=Mr.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:[`self`].concat(Mr)}]),Pr={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr},Fr={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,`(`,c.concat(/\./,u),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,u],scope:{1:`keyword`,3:`title.class`}}]},Ir={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...gt$2,..._t$1]}},Lr={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Rr={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[Pr],illegal:/%/},zr={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function noneOf(t){return c.concat(`(?!`,t.join(`|`),`)`)}let Br={match:c.concat(/\b/,noneOf([...vt$2,`super`,`import`].map(t=>`${t}\\s*\\(`)),u,c.lookahead(/\s*\(/)),className:`title.function`,relevance:0},Vr={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},Hr={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},Pr]},Ur=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+t.UNDERSCORE_IDENT_RE+`)\\s*=>`,Wr={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Ur)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[Pr]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:b,exports:{PARAMS_CONTAINS:Nr,CLASS_REFERENCE:Ir},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),Lr,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,Ar,{match:/\$\d+/},T,Ir,{scope:`attr`,match:u+c.lookahead(`:`),relevance:0},Wr,{begin:`(`+t.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[Ar,t.REGEXP_MODE,{className:`function`,begin:Ur,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:m},{begin:g.begin,"on:begin":g.isTrulyOpeningTag,end:g.end}],subLanguage:`xml`,contains:[{begin:g.begin,end:g.end,skip:!0,contains:[`self`]}]}]},Rr,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+t.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[Pr,t.inherit(t.TITLE_MODE,{begin:u,className:`title.function`})]},{match:/\.\.\./,relevance:0},Vr,{match:`\\$`+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[Pr]},Br,zr,Fr,Hr,{match:/\$[(.]/}]}}function javascript(t){let c=t.regex,hasClosingTag=(t,{after:c})=>{let u=`</`+t[0].slice(1);return t.input.indexOf(u,c)!==-1},u=$$4,d={begin:`<>`,end:`</>`},m=/<[A-Za-z0-9\\._:-]+\s*\/>/,g={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(t,c)=>{let u=t[0].length+t.index,d=t.input[u];if(d===`<`||d===`,`){c.ignoreMatch();return}d===`>`&&(hasClosingTag(t,{after:u})||c.ignoreMatch());let m,g=t.input.substring(u);if(m=g.match(/^\s*=/)){c.ignoreMatch();return}if((m=g.match(/^\s+extends\s+/))&&m.index===0){c.ignoreMatch();return}}},b={$pattern:$$4,keyword:xt$1,literal:St$1,built_in:Dt$1,"variable.language":Et$1},S=`[0-9](_?[0-9])*`,C=`\\.(${S})`,w=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,T={className:`number`,variants:[{begin:`(\\b(${w})((${C})|\\.)?|(${C}))[eE][+-]?(${S})\\b`},{begin:`\\b(${w})\\b((${C})\\b|\\.)?|(${C})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},E={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:b,contains:[]},D={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`xml`}},O={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`css`}},Or={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:`graphql`}},kr={className:`string`,begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]},Ar={className:`comment`,variants:[t.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:u+`(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},jr=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,{match:/\$\d+/},T];E.contains=jr.concat({begin:/\{/,end:/\}/,keywords:b,contains:[`self`].concat(jr)});let Mr=[].concat(Ar,E.contains),Nr=Mr.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:[`self`].concat(Mr)}]),Pr={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr},Fr={variants:[{match:[/class/,/\s+/,u,/\s+/,/extends/,/\s+/,c.concat(u,`(`,c.concat(/\./,u),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,u],scope:{1:`keyword`,3:`title.class`}}]},Ir={relevance:0,match:c.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...Ct$1,...wt$1]}},Lr={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},Rr={variants:[{match:[/function/,/\s+/,u,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[Pr],illegal:/%/},zr={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function noneOf(t){return c.concat(`(?!`,t.join(`|`),`)`)}let Br={match:c.concat(/\b/,noneOf([...Tt$1,`super`,`import`].map(t=>`${t}\\s*\\(`)),u,c.lookahead(/\s*\(/)),className:`title.function`,relevance:0},Vr={begin:c.concat(/\./,c.lookahead(c.concat(u,/(?![0-9A-Za-z$_(])/))),end:u,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},Hr={match:[/get|set/,/\s+/,u,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},Pr]},Ur=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+t.UNDERSCORE_IDENT_RE+`)\\s*=>`,Wr={match:[/const|var|let/,/\s+/,u,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(Ur)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[Pr]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:b,exports:{PARAMS_CONTAINS:Nr,CLASS_REFERENCE:Ir},illegal:/#(?![$_A-z])/,contains:[t.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),Lr,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,D,O,Or,kr,Ar,{match:/\$\d+/},T,Ir,{scope:`attr`,match:u+c.lookahead(`:`),relevance:0},Wr,{begin:`(`+t.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[Ar,t.REGEXP_MODE,{className:`function`,begin:Ur,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:Nr}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:m},{begin:g.begin,"on:begin":g.isTrulyOpeningTag,end:g.end}],subLanguage:`xml`,contains:[{begin:g.begin,end:g.end,skip:!0,contains:[`self`]}]}]},Rr,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+t.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[Pr,t.inherit(t.TITLE_MODE,{begin:u,className:`title.function`})]},{match:/\.\.\./,relevance:0},Vr,{match:`\\$`+u,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[Pr]},Br,zr,Fr,Hr,{match:/\$[(.]/}]}}function typescript(t){let c=t.regex,u=javascript(t),d=$$4,m=[`any`,`void`,`number`,`boolean`,`string`,`object`,`never`,`symbol`,`bigint`,`unknown`],g={begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:`keyword`,3:`title.class`}},b={beginKeywords:`interface`,end:/\{/,excludeEnd:!0,keywords:{keyword:`interface extends`,built_in:m},contains:[u.exports.CLASS_REFERENCE]},S={className:`meta`,relevance:10,begin:/^\s*['"]use strict['"]/},C={$pattern:$$4,keyword:xt$1.concat([`type`,`interface`,`public`,`private`,`protected`,`implements`,`declare`,`abstract`,`readonly`,`enum`,`override`,`satisfies`]),literal:St$1,built_in:Dt$1.concat(m),"variable.language":Et$1},w={className:`meta`,begin:`@`+d},swapMode=(t,c,u)=>{let d=t.contains.findIndex(t=>t.label===c);if(d===-1)throw Error(`can not find mode to replace`);t.contains.splice(d,1,u)};Object.assign(u.keywords,C),u.exports.PARAMS_CONTAINS.push(w);let T=u.contains.find(t=>t.scope===`attr`),E=Object.assign({},T,{match:c.concat(d,c.lookahead(/\s*\?:/))});u.exports.PARAMS_CONTAINS.push([u.exports.CLASS_REFERENCE,T,E]),u.contains=u.contains.concat([w,g,b,E]),swapMode(u,`shebang`,t.SHEBANG()),swapMode(u,`use_strict`,S);let D=u.contains.find(t=>t.label===`func.def`);return D.relevance=0,Object.assign(u,{name:`TypeScript`,aliases:[`ts`,`tsx`,`mts`,`cts`]}),u}function css$1(t){let c=t.regex,u=MODES(t),d={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},m=/@-?\w[\w]*(-\w+)*/,g=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:`CSS`,case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:`from to`},classNameAliases:{keyframePosition:`selector-tag`},contains:[u.BLOCK_COMMENT,d,u.CSS_NUMBER_MODE,{className:`selector-id`,begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:`selector-class`,begin:`\\.[a-zA-Z-][a-zA-Z0-9_-]*`,relevance:0},u.ATTRIBUTE_SELECTOR_MODE,{className:`selector-pseudo`,variants:[{begin:`:(`+Mt$1.join(`|`)+`)`},{begin:`:(:)?(`+Nt$1.join(`|`)+`)`}]},u.CSS_VARIABLE,{className:`attribute`,begin:`\\b(`+Pt$1.join(`|`)+`)\\b`},{begin:/:/,end:/[;}{]/,contains:[u.BLOCK_COMMENT,u.HEXCOLOR,u.IMPORTANT,u.CSS_NUMBER_MODE,...g,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:`url data-uri`},contains:[...g,{className:`string`,begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},u.FUNCTION_DISPATCH]},{begin:c.lookahead(/@/),end:`[{;]`,relevance:0,illegal:/:/,contains:[{className:`keyword`,begin:m},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:`and or not only`,attribute:jt$1.join(` `)},contains:[{begin:/[a-z-]+(?=:)/,className:`attribute`},...g,u.CSS_NUMBER_MODE]}]},{className:`selector-tag`,begin:`\\b(`+At$1.join(`|`)+`)\\b`}]}}function xml(t){let c=t.regex,u=c.concat(/[\p{L}_]/u,c.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),d=/[\p{L}0-9._:-]+/u,m={className:`symbol`,begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},g={begin:/\s/,contains:[{className:`keyword`,begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},b=t.inherit(g,{begin:/\(/,end:/\)/}),S=t.inherit(t.APOS_STRING_MODE,{className:`string`}),C=t.inherit(t.QUOTE_STRING_MODE,{className:`string`}),w={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:`attr`,begin:d,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:`string`,endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[m]},{begin:/'/,end:/'/,contains:[m]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:`HTML, XML`,aliases:[`html`,`xhtml`,`rss`,`atom`,`xjb`,`xsd`,`xsl`,`plist`,`wsf`,`svg`],case_insensitive:!0,unicodeRegex:!0,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,relevance:10,contains:[g,C,S,b,{begin:/\[/,end:/\]/,contains:[{className:`meta`,begin:/<![a-z]/,end:/>/,contains:[g,b,C,S]}]}]},t.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},m,{className:`meta`,end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[C]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:`tag`,begin:/<style(?=\s|>)/,end:/>/,keywords:{name:`style`},contains:[w],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:[`css`,`xml`]}},{className:`tag`,begin:/<script(?=\s|>)/,end:/>/,keywords:{name:`script`},contains:[w],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:[`javascript`,`handlebars`,`xml`]}},{className:`tag`,begin:/<>|<\/>/},{className:`tag`,begin:c.concat(/</,c.lookahead(c.concat(u,c.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:`name`,begin:u,relevance:0,starts:w}]},{className:`tag`,begin:c.concat(/<\//,c.lookahead(c.concat(u,/>/))),contains:[{className:`name`,begin:u,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function bash(t){let c=t.regex,u={},d={begin:/\$\{/,end:/\}/,contains:[`self`,{begin:/:-/,contains:[u]}]};Object.assign(u,{className:`variable`,variants:[{begin:c.concat(/\$[\w\d#@][\w\d_]*/,`(?![\\w\\d])(?![$])`)},d]});let m={className:`subst`,begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},g=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:`comment`}}),b={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:`string`})]}},S={className:`string`,begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,u,m]};m.contains.push(S);let C={match:/\\"/},w={className:`string`,begin:/'/,end:/'/},T={match:/\\'/},E={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:`number`},t.NUMBER_MODE,u]},D=t.SHEBANG({binary:`(${[`fish`,`bash`,`zsh`,`sh`,`csh`,`ksh`,`tcsh`,`dash`,`scsh`].join(`|`)})`,relevance:10}),O={className:`function`,begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},Or=[`if`,`then`,`else`,`elif`,`fi`,`time`,`for`,`while`,`until`,`in`,`do`,`done`,`case`,`esac`,`coproc`,`function`,`select`],kr=[`true`,`false`],Ar={match:/(\/[a-z._-]+)+/},jr=[`break`,`cd`,`continue`,`eval`,`exec`,`exit`,`export`,`getopts`,`hash`,`pwd`,`readonly`,`return`,`shift`,`test`,`times`,`trap`,`umask`,`unset`],Mr=[`alias`,`bind`,`builtin`,`caller`,`command`,`declare`,`echo`,`enable`,`help`,`let`,`local`,`logout`,`mapfile`,`printf`,`read`,`readarray`,`source`,`sudo`,`type`,`typeset`,`ulimit`,`unalias`],Nr=`autoload.bg.bindkey.bye.cap.chdir.clone.comparguments.compcall.compctl.compdescribe.compfiles.compgroups.compquote.comptags.comptry.compvalues.dirs.disable.disown.echotc.echoti.emulate.fc.fg.float.functions.getcap.getln.history.integer.jobs.kill.limit.log.noglob.popd.print.pushd.pushln.rehash.sched.setcap.setopt.stat.suspend.ttyctl.unfunction.unhash.unlimit.unsetopt.vared.wait.whence.where.which.zcompile.zformat.zftp.zle.zmodload.zparseopts.zprof.zpty.zregexparse.zsocket.zstyle.ztcp`.split(`.`),Pr=`chcon.chgrp.chown.chmod.cp.dd.df.dir.dircolors.ln.ls.mkdir.mkfifo.mknod.mktemp.mv.realpath.rm.rmdir.shred.sync.touch.truncate.vdir.b2sum.base32.base64.cat.cksum.comm.csplit.cut.expand.fmt.fold.head.join.md5sum.nl.numfmt.od.paste.ptx.pr.sha1sum.sha224sum.sha256sum.sha384sum.sha512sum.shuf.sort.split.sum.tac.tail.tr.tsort.unexpand.uniq.wc.arch.basename.chroot.date.dirname.du.echo.env.expr.factor.groups.hostid.id.link.logname.nice.nohup.nproc.pathchk.pinky.printenv.printf.pwd.readlink.runcon.seq.sleep.stat.stdbuf.stty.tee.test.timeout.tty.uname.unlink.uptime.users.who.whoami.yes`.split(`.`);return{name:`Bash`,aliases:[`sh`,`zsh`],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:Or,literal:kr,built_in:[...jr,...Mr,`set`,`shopt`,...Nr,...Pr]},contains:[D,t.SHEBANG(),O,E,g,b,Ar,S,C,w,T,u]}}function json(t){let c={className:`attr`,begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},u={match:/[{}[\],:]/,className:`punctuation`,relevance:0},d=[`true`,`false`,`null`],m={scope:`literal`,beginKeywords:d.join(` `)};return{name:`JSON`,aliases:[`jsonc`],keywords:{literal:d},contains:[c,u,t.QUOTE_STRING_MODE,m,t.C_NUMBER_MODE,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:`\\S`}}function go(t){let c={keyword:[`break`,`case`,`chan`,`const`,`continue`,`default`,`defer`,`else`,`fallthrough`,`for`,`func`,`go`,`goto`,`if`,`import`,`interface`,`map`,`package`,`range`,`return`,`select`,`struct`,`switch`,`type`,`var`],type:[`bool`,`byte`,`complex64`,`complex128`,`error`,`float32`,`float64`,`int8`,`int16`,`int32`,`int64`,`string`,`uint8`,`uint16`,`uint32`,`uint64`,`int`,`uint`,`uintptr`,`rune`],literal:[`true`,`false`,`iota`,`nil`],built_in:[`append`,`cap`,`close`,`complex`,`copy`,`imag`,`len`,`make`,`new`,`panic`,`print`,`println`,`real`,`recover`,`delete`]};return{name:`Go`,aliases:[`golang`],keywords:c,illegal:`</`,contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:`string`,variants:[t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:`number`,variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:`function`,beginKeywords:`func`,end:`\\s*(\\{|$)`,excludeEnd:!0,contains:[t.TITLE_MODE,{className:`params`,begin:/\(/,end:/\)/,endsParent:!0,keywords:c,illegal:/["']/}]}]}}function python(t){let c=t.regex,u=/[\p{XID_Start}_]\p{XID_Continue}*/u,d=`and.as.assert.async.await.break.case.class.continue.def.del.elif.else.except.finally.for.from.global.if.import.in.is.lambda.match.nonlocal|10.not.or.pass.raise.return.try.while.with.yield`.split(`.`),m={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:d,built_in:`__import__.abs.all.any.ascii.bin.bool.breakpoint.bytearray.bytes.callable.chr.classmethod.compile.complex.delattr.dict.dir.divmod.enumerate.eval.exec.filter.float.format.frozenset.getattr.globals.hasattr.hash.help.hex.id.input.int.isinstance.issubclass.iter.len.list.locals.map.max.memoryview.min.next.object.oct.open.ord.pow.print.property.range.repr.reversed.round.set.setattr.slice.sorted.staticmethod.str.sum.super.tuple.type.vars.zip`.split(`.`),literal:[`__debug__`,`Ellipsis`,`False`,`None`,`NotImplemented`,`True`],type:[`Any`,`Callable`,`Coroutine`,`Dict`,`List`,`Literal`,`Generic`,`Optional`,`Sequence`,`Set`,`Tuple`,`Type`,`Union`]},g={className:`meta`,begin:/^(>>>|\.\.\.) /},b={className:`subst`,begin:/\{/,end:/\}/,keywords:m,illegal:/#/},S={begin:/\{\{/,relevance:0},C={className:`string`,contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,g],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,g],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,g,S,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,g,S,b]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,S,b]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,S,b]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},w=`[0-9](_?[0-9])*`,T=`(\\b(${w}))?\\.(${w})|\\b(${w})\\.`,E=`\\b|${d.join(`|`)}`,D={className:`number`,relevance:0,variants:[{begin:`(\\b(${w})|(${T}))[eE][+-]?(${w})[jJ]?(?=${E})`},{begin:`(${T})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${E})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${E})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${E})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${E})`},{begin:`\\b(${w})[jJ](?=${E})`}]},O={className:`comment`,begin:c.lookahead(/# type:/),end:/$/,keywords:m,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},Or={className:`params`,variants:[{className:``,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:m,contains:[`self`,g,D,C,t.HASH_COMMENT_MODE]}]};return b.contains=[C,D,g],{name:`Python`,aliases:[`py`,`gyp`,`ipython`],unicodeRegex:!0,keywords:m,illegal:/(<\/|\?)|=>/,contains:[g,D,{scope:`variable.language`,match:/\bself\b/},{beginKeywords:`if`,relevance:0},{match:/\bor\b/,scope:`keyword`},C,O,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,u],scope:{1:`keyword`,3:`title.function`},contains:[Or]},{variants:[{match:[/\bclass/,/\s+/,u,/\s*/,/\(\s*/,u,/\s*\)/]},{match:[/\bclass/,/\s+/,u]}],scope:{1:`keyword`,3:`title.class`,6:`title.class.inherited`}},{className:`meta`,begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[D,Or,C]}]}}function _sfc_render$29(t,c,u,d,m,g){let b=resolveComponent(`md-token-renderer`),S=resolveComponent(`audio-auto-player`);return openBlock(),createElementBlock(`div`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tokens,(c,u)=>(openBlock(),createElementBlock(`span`,{key:u},[c.type?(openBlock(),createBlock(b,{key:0,token:c,last:u===t.tokens.length-1},null,8,[`token`,`last`])):c.audio?(openBlock(),createBlock(S,{key:1,src:c.audio},null,8,[`src`])):createCommentVNode(``,!0)]))),128))])}var j$3,M$3,__name,N$3,te$2,P$2,ne$3,__commonJSMin,__exportAll,__copyProps,__toESM,F$3,re$3,ie$3,I$2,ae$3,setPinia,getPinia,oe$3,useCardPreviewModeStore,se$3,ce$3,le$3,ue$2,de$2,fe$2,pe$3,me$2,L$2,R$2,z$2,he$2,ge$2,_e$1,B$2,ve$2,V$2,ye$2,be$1,xe$1,H$2,Se$1,U$2,Ce$1,we$1,W$3,Te$2,Ee$2,De$2,Oe$2,ke$3,Ae$2,je$2,Me$2,Ne$2,Pe$2,Fe$2,G$3,Ie$2,Le$2,Re$2,ze$2,Be$2,Ve$2,He$2,Ue$2,We$2,Ge$2,Ke$2,qe$2,Je$2,Ye$2,Xe$2,Ze$2,Qe$2,$e$2,K$3,et$2,tt$2,nt$2,rt$2,it$2,at$2,ot$2,q$3,J$3,st$2,getEscapeReplacement,_Tokenizer,Y$3,_Renderer,_TextRenderer,X$3,_Hooks,Marked,Z$4,ct$2,lt$2,ut$2,Q$3,dt$2,ft$2,pt$2,mt$2,ht$2,gt$2,_t$1,vt$2,yt$1,bt$1,$$4,xt$1,St$1,Ct$1,wt$1,Tt$1,Et$1,Dt$1,MODES,Ot$1,kt$1,At$1,jt$1,Mt$1,Nt$1,Pt$1,Ft$1,It$1,Lt$1,Rt$1,zt$1,Bt$1,Vt$1,Ht$1,Ut$1,Wt$1,Gt$1,Kt$1,qt$1,Jt$1,Yt$1,Xt$1,Zt$1,Qt$1,$t$1,en$1,tn$1,nn$1,rn$1,an$1,on$2,sn$1,cn$1,ln$1,un$1,dn$1,fn$1,pn$1,mn$1,hn$1,gn$1,_n$1,vn$1,yn$1,init_MarkdownRenderer_kStoDRNE=__esmMin((()=>{init_vue_runtime_esm_bundler(),init_moment(),init_dist$1(),init_pinia(),j$3=Object.create,M$3=Object.defineProperty,__name=(t,c)=>M$3(t,`name`,{value:c,configurable:!0}),N$3=Object.getOwnPropertyDescriptor,te$2=Object.getOwnPropertyNames,P$2=Object.getPrototypeOf,ne$3=Object.prototype.hasOwnProperty,__commonJSMin=(t,c)=>()=>(c||t((c={exports:{}}).exports,c),c.exports),__exportAll=(t,c)=>{let u={};for(var d in t)M$3(u,d,{get:t[d],enumerable:!0});return c||M$3(u,Symbol.toStringTag,{value:`Module`}),u},__copyProps=(t,c,u,d)=>{if(c&&typeof c==`object`||typeof c==`function`)for(var m=te$2(c),g=0,b=m.length,S;g<b;g++)S=m[g],!ne$3.call(t,S)&&S!==u&&M$3(t,S,{get:(t=>c[t]).bind(null,S),enumerable:!(d=N$3(c,S))||d.enumerable});return t},__toESM=(t,c,u)=>(u=t==null?{}:j$3(P$2(t)),__copyProps(c||!t||!t.__esModule?M$3(u,`default`,{value:t,enumerable:!0}):u,t)),F$3=__name((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`default`),re$3=__commonJSMin(((t,c)=>{(function(t,u,d){if(!t)return;for(var m={8:`backspace`,9:`tab`,13:`enter`,16:`shift`,17:`ctrl`,18:`alt`,20:`capslock`,27:`esc`,32:`space`,33:`pageup`,34:`pagedown`,35:`end`,36:`home`,37:`left`,38:`up`,39:`right`,40:`down`,45:`ins`,46:`del`,91:`meta`,93:`meta`,224:`meta`},g={106:`*`,107:`+`,109:`-`,110:`.`,111:`/`,186:`;`,187:`=`,188:`,`,189:`-`,190:`.`,191:`/`,192:"`",219:`[`,220:`\\`,221:`]`,222:`'`},b={"~":"`","!":`1`,"@":`2`,"#":`3`,$:`4`,"%":`5`,"^":`6`,"&":`7`,"*":`8`,"(":`9`,")":`0`,_:`-`,"+":`=`,":":`;`,'"':`'`,"<":`,`,">":`.`,"?":`/`,"|":`\\`},S={option:`alt`,command:`meta`,return:`enter`,escape:`esc`,plus:`+`,mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?`meta`:`ctrl`},C,w=1;w<20;++w)m[111+w]=`f`+w;for(w=0;w<=9;++w)m[w+96]=w.toString();function _addEvent(t,c,u){if(t.addEventListener){t.addEventListener(c,u,!1);return}t.attachEvent(`on`+c,u)}function _characterFromEvent(t){if(t.type==`keypress`){var c=String.fromCharCode(t.which);return t.shiftKey||(c=c.toLowerCase()),c}return m[t.which]?m[t.which]:g[t.which]?g[t.which]:String.fromCharCode(t.which).toLowerCase()}function _modifiersMatch(t,c){return t.sort().join(`,`)===c.sort().join(`,`)}function _eventModifiers(t){var c=[];return t.shiftKey&&c.push(`shift`),t.altKey&&c.push(`alt`),t.ctrlKey&&c.push(`ctrl`),t.metaKey&&c.push(`meta`),c}function _preventDefault(t){if(t.preventDefault){t.preventDefault();return}t.returnValue=!1}function _stopPropagation(t){if(t.stopPropagation){t.stopPropagation();return}t.cancelBubble=!0}function _isModifier(t){return t==`shift`||t==`ctrl`||t==`alt`||t==`meta`}function _getReverseMap(){if(!C)for(var t in C={},m)t>95&&t<112||m.hasOwnProperty(t)&&(C[m[t]]=t);return C}function _pickBestAction(t,c,u){return u||(u=_getReverseMap()[t]?`keydown`:`keypress`),u==`keypress`&&c.length&&(u=`keydown`),u}function _keysFromString(t){return t===`+`?[`+`]:(t=t.replace(/\+{2}/g,`+plus`),t.split(`+`))}function _getKeyInfo(t,c){var u,d,m,g=[];for(u=_keysFromString(t),m=0;m<u.length;++m)d=u[m],S[d]&&(d=S[d]),c&&c!=`keypress`&&b[d]&&(d=b[d],g.push(`shift`)),_isModifier(d)&&g.push(d);return c=_pickBestAction(d,g,c),{key:d,modifiers:g,action:c}}function _belongsTo(t,c){return t===null||t===u?!1:t===c?!0:_belongsTo(t.parentNode,c)}function Mousetrap(t){var c=this;if(t=t||u,!(c instanceof Mousetrap))return new Mousetrap(t);c.target=t,c._callbacks={},c._directMap={};var d={},m,g=!1,b=!1,S=!1;function _resetSequences(t){t=t||{};var c=!1,u;for(u in d){if(t[u]){c=!0;continue}d[u]=0}c||(S=!1)}function _getMatches(t,u,m,g,b,S){var C,w,T=[],E=m.type;if(!c._callbacks[t])return[];for(E==`keyup`&&_isModifier(t)&&(u=[t]),C=0;C<c._callbacks[t].length;++C)if(w=c._callbacks[t][C],!(!g&&w.seq&&d[w.seq]!=w.level)&&E==w.action&&(E==`keypress`&&!m.metaKey&&!m.ctrlKey||_modifiersMatch(u,w.modifiers))){var D=!g&&w.combo==b,O=g&&w.seq==g&&w.level==S;(D||O)&&c._callbacks[t].splice(C,1),T.push(w)}return T}function _fireCallback(t,u,d,m){c.stopCallback(u,u.target||u.srcElement,d,m)||t(u,d)===!1&&(_preventDefault(u),_stopPropagation(u))}c._handleKey=function(t,c,u){var d=_getMatches(t,c,u),m,g={},C=0,w=!1;for(m=0;m<d.length;++m)d[m].seq&&(C=Math.max(C,d[m].level));for(m=0;m<d.length;++m){if(d[m].seq){if(d[m].level!=C)continue;w=!0,g[d[m].seq]=1,_fireCallback(d[m].callback,u,d[m].combo,d[m].seq);continue}w||_fireCallback(d[m].callback,u,d[m].combo)}var T=u.type==`keypress`&&b;u.type==S&&!_isModifier(t)&&!T&&_resetSequences(g),b=w&&u.type==`keydown`};function _handleKeyEvent(t){typeof t.which!=`number`&&(t.which=t.keyCode);var u=_characterFromEvent(t);if(u){if(t.type==`keyup`&&g===u){g=!1;return}c.handleKey(u,_eventModifiers(t),t)}}function _resetSequenceTimer(){clearTimeout(m),m=setTimeout(_resetSequences,1e3)}function _bindSequence(t,c,u,m){d[t]=0;function _increaseSequence(c){return function(){S=c,++d[t],_resetSequenceTimer()}}function _callbackAndReset(c){_fireCallback(u,c,t),m!==`keyup`&&(g=_characterFromEvent(c)),setTimeout(_resetSequences,10)}for(var b=0;b<c.length;++b){var C=b+1===c.length?_callbackAndReset:_increaseSequence(m||_getKeyInfo(c[b+1]).action);_bindSingle(c[b],C,m,t,b)}}function _bindSingle(t,u,d,m,g){c._directMap[t+`:`+d]=u,t=t.replace(/\s+/g,` `);var b=t.split(` `),S;if(b.length>1){_bindSequence(t,b,u,d);return}S=_getKeyInfo(t,d),c._callbacks[S.key]=c._callbacks[S.key]||[],_getMatches(S.key,S.modifiers,{type:S.action},m,t,g),c._callbacks[S.key][m?`unshift`:`push`]({callback:u,modifiers:S.modifiers,action:S.action,seq:m,level:g,combo:t})}c._bindMultiple=function(t,c,u){for(var d=0;d<t.length;++d)_bindSingle(t[d],c,u)},_addEvent(t,`keypress`,_handleKeyEvent),_addEvent(t,`keydown`,_handleKeyEvent),_addEvent(t,`keyup`,_handleKeyEvent)}Mousetrap.prototype.bind=function(t,c,u){var d=this;return t=t instanceof Array?t:[t],d._bindMultiple.call(d,t,c,u),d},Mousetrap.prototype.unbind=function(t,c){var u=this;return u.bind.call(u,t,function(){},c)},Mousetrap.prototype.trigger=function(t,c){var u=this;return u._directMap[t+`:`+c]&&u._directMap[t+`:`+c]({},t),u},Mousetrap.prototype.reset=function(){var t=this;return t._callbacks={},t._directMap={},t},Mousetrap.prototype.stopCallback=function(t,c){var u=this;if((` `+c.className+` `).indexOf(` mousetrap `)>-1||_belongsTo(c,u.target))return!1;if(`composedPath`in t&&typeof t.composedPath==`function`){var d=t.composedPath()[0];d!==t.target&&(c=d)}return c.tagName==`INPUT`||c.tagName==`SELECT`||c.tagName==`TEXTAREA`||c.isContentEditable},Mousetrap.prototype.handleKey=function(){var t=this;return t._handleKey.apply(t,arguments)},Mousetrap.addKeycodes=function(t){for(var c in t)t.hasOwnProperty(c)&&(m[c]=t[c]);C=null},Mousetrap.init=function(){var t=Mousetrap(u);for(var c in t)c.charAt(0)!==`_`&&(Mousetrap[c]=function(c){return function(){return t[c].apply(t,arguments)}}(c))},Mousetrap.init(),t.Mousetrap=Mousetrap,c!==void 0&&c.exports&&(c.exports=Mousetrap),typeof define==`function`&&define.amd&&define(function(){return Mousetrap})})(typeof window<`u`?window:null,typeof window<`u`?document:null)})),__name$2(_typeof$1,`_typeof`),__name$2(_defineProperty$1,`_defineProperty`),ie$3=__toESM(re$3()),I$2=class SkldrMouseTrap{constructor(){_defineProperty$1(this,`mouseTrap`,void 0),_defineProperty$1(this,`hotkeys`,void 0),this.mouseTrap=new ie$3.default,this.mouseTrap.stopCallback=()=>!1,this.hotkeys=[]}static get commands(){return SkldrMouseTrap.instance().hotkeys.map(t=>({command:t.command,hotkey:t.hotkey}))}static addBinding(t){let c=Array.isArray(t)?t:[t],u=SkldrMouseTrap.instance();u.hotkeys=[...u.hotkeys,...c],c.forEach(t=>{u.mouseTrap.bind(t.hotkey,(c,u)=>{if(inputElementIsFocused()){console.log(`Ignoring hotkey ${t.hotkey} while input element is focused`);return}t.callback(c,u)})})}static removeBinding(t){let c=SkldrMouseTrap.instance(),u=[...c.hotkeys];Array.isArray(t)&&!t.every(t=>typeof t==`string`||typeof t==`number`)?t.forEach(t=>{c.hotkeys=c.hotkeys.filter(c=>JSON.stringify(c.hotkey)!==JSON.stringify(t)),c.mouseTrap.unbind(t)}):(c.hotkeys=u.filter(c=>JSON.stringify(c.hotkey)!==JSON.stringify(t)),c.mouseTrap.unbind(t))}static reset(){console.warn(`SkldrMouseTrap.reset() may affect hotkeys registered by other components. Consider using removeBinding() with specific hotkeys for better component isolation.`),SkldrMouseTrap.instance().mouseTrap.reset(),SkldrMouseTrap.instance().hotkeys=[]}static instance(){return SkldrMouseTrap._instance||(SkldrMouseTrap._instance=new SkldrMouseTrap),SkldrMouseTrap._instance}},_defineProperty$1(I$2,`_instance`,void 0),ae$3=null,setPinia=t=>{ae$3=t},getPinia=()=>ae$3,oe$3={install(t,c){let u=c?.pinia;u&&setPinia(u)}},useCardPreviewModeStore=()=>{let t=getPinia();return t&&setActivePinia(t),defineStore(`previewMode`,{state:()=>({previewMode:!1}),actions:{setPreviewMode(t){this.previewMode=t}},getters:{isPreviewMode(){return this.previewMode}}})()},se$3=defineComponent({name:`UserInput`,data(){return{answer:``,previewModeStore:null}},mounted(){this.previewModeStore=useCardPreviewModeStore()},computed:{autofocus(){return!this.previewModeStore?.previewMode},autoFocus(){return this.autofocus}},methods:{submitAnswer(t){return this.submit(t)},submit(t){return this.getQuestionViewAncestor().submitAnswer(t,this.$options.name??`UserInput`)},getQuestionViewAncestor(){let t=this.$parent,c=0;for(;t&&!isQuestionView(t);){let u=t.$parent;if(!u){let t=`
|
|
36
36
|
UserInput.submit() has failed.
|
|
37
37
|
The input element has no QuestionView ancestor element.`;throw log$2(t),Error(t)}if(t=u,c++,c>100){let t=`
|
|
38
38
|
UserInput.submit() has failed.
|
|
@@ -318,10 +318,13 @@ tags: ${m.tags.join(`, `)}`),m.elo!==void 0&&(c+=`
|
|
|
318
318
|
elo: ${m.elo}`),d.push({originalText:c,status:`error`,message:`Error processing card: ${t instanceof Error?t.message:`Unknown error`}`})}return d}async function processCard(t,c,u){let{markdown:d,tags:m,elo:g}=t,b=d;m.length>0&&(b+=`
|
|
319
319
|
tags: ${m.join(`, `)}`),g!==void 0&&(b+=`
|
|
320
320
|
elo: ${g}`);let S={Input:d,Uploads:[]},C={};for(let t of m)C[t]={score:g||0,count:1};try{let t=await c.addNote(u.courseCode,u.dataShape,S,u.userName,m,void 0,g?{global:{score:g,count:1},tags:C,misc:{}}:void 0);return t.status===Status.ok?{originalText:b,status:`success`,message:`Card added successfully.`,cardId:t.id?t.id:`(unknown)`}:{originalText:b,status:`error`,message:t.message||`Failed to add card to database. Unknown error.`}}catch(t){return logger.error(`Error adding note:`,t),{originalText:b,status:`error`,message:`Error adding card: ${t instanceof Error?t.message:`Unknown error`}`}}}function validateProcessorConfig(t){return t.dataShape?t.courseCode?t.userName?{isValid:!0}:{isValid:!1,errorMessage:`No user name provided for card processing`}:{isValid:!1,errorMessage:`No course code provided for card processing`}:{isValid:!1,errorMessage:`No data shape provided for card processing`}}function getUserDB(){try{return getDataLayer().getUserDB()}catch{return logger.info(`[UserDB Debug] Data layer not initialized yet.`),null}}function getRawDB(){let t=getUserDB();return t?t.localDB||(logger.info(`[UserDB Debug] Unable to access raw database instance.`),null):null}function formatTimestamp(t){return new Date(t).toLocaleString()}function mountUserDBDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.userdb=userDBDebugAPI}function isDataShapeRegistered(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course});return c.dataShapes.find(t=>t.name===u)!==void 0}function isDataShapeSchemaAvailable(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course}),d=c.dataShapes.find(t=>t.name===u);return d!==void 0&&d.serializedZodSchema!==void 0}function isQuestionTypeRegistered(t,c){let u=NameSpacer.getQuestionString({course:t.course,questionType:t.name});return c.questionTypes.some(t=>t.name===u)}function processCustomQuestionsData(t){let c=[],u=[],d=t.courses.map(t=>t.name);return t.questionClasses.forEach(m=>{let g=d.length>0?d[0]:t.meta.packageName;m.dataShapes&&Array.isArray(m.dataShapes)&&m.dataShapes.forEach(t=>{c.push({name:t.name,course:g,dataShape:t})}),u.push({name:m.name,course:g,questionClass:m,dataShapes:m.dataShapes||[],views:m.views||[]})}),{dataShapes:c,questions:u}}function registerDataShape(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course}),d;try{d=toZodJSON(t.dataShape)}catch(t){logger.warn(`Failed to generate schema for ${u}:`,t),d=void 0}let m=c.dataShapes.findIndex(t=>t.name===u);if(m!==-1){let g=c.dataShapes[m];return g.serializedZodSchema===d?(logger.info(`DataShape '${t.name}' from '${t.course}' already registered with identical schema`),!1):(g.serializedZodSchema?logger.info(`DataShape '${t.name}' from '${t.course}' schema has changed, updating...`):logger.info(`DataShape '${t.name}' from '${t.course}' already registered, but with no schema. Adding schema to existing entry`),c.dataShapes[m]={name:u,questionTypes:g.questionTypes,serializedZodSchema:d},logger.info(`Updated DataShape: ${u}`),!0)}return c.dataShapes.push({name:u,questionTypes:[],serializedZodSchema:d}),logger.info(`Registered DataShape: ${u}`),!0}function registerQuestionType(t,c){if(isQuestionTypeRegistered(t,c))return logger.info(`QuestionType '${t.name}' from '${t.course}' already registered`),!1;let u=NameSpacer.getQuestionString({course:t.course,questionType:t.name}),d=t.views.map(t=>t.name?t.name:`unnamedComponent`),m=t.dataShapes.map(c=>NameSpacer.getDataShapeString({course:t.course,dataShape:c.name}));return c.questionTypes.push({name:u,viewList:d,dataShapeList:m}),t.dataShapes.forEach(d=>{let m=NameSpacer.getDataShapeString({course:t.course,dataShape:d.name});for(let t of c.dataShapes)t.name===m&&t.questionTypes.push(u)}),logger.info(`Registered QuestionType: ${u}`),!0}function removeDataShape(t,c){let u=c.dataShapes.findIndex(c=>c.name===t);return u===-1?(logger.info(`DataShape '${t}' not found in course config`),!1):(c.dataShapes.splice(u,1),c.questionTypes.forEach(c=>{let u=c.dataShapeList.indexOf(t);u!==-1&&c.dataShapeList.splice(u,1)}),logger.info(`Removed DataShape: ${t}`),!0)}function removeQuestionType(t,c){let u=c.questionTypes.findIndex(c=>c.name===t);return u===-1?(logger.info(`QuestionType '${t}' not found in course config`),!1):(c.questionTypes.splice(u,1),c.dataShapes.forEach(c=>{let u=c.questionTypes.indexOf(t);u!==-1&&c.questionTypes.splice(u,1)}),logger.info(`Removed QuestionType: ${t}`),!0)}async function removeCustomQuestionTypes(t,c,u,d){try{logger.info(`Beginning custom question removal`),logger.info(`Removing ${t.length} data shapes and ${c.length} question types`);let m=0;for(let t of c)removeQuestionType(t,u)&&m++;for(let c of t)removeDataShape(c,u)&&m++;logger.info(`Updating course configuration...`);let g=await d.updateCourseConfig(u);if(!g.ok)throw Error(`Failed to update course config: ${JSON.stringify(g)}`);return logger.info(`Custom question removal complete: ${m} items removed`),{success:!0,removedCount:m}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`Custom question removal failed: ${c}`),{success:!1,removedCount:0,errorMessage:c}}}async function registerSeedData(t,c,u){if(t.questionClass.seedData&&Array.isArray(t.questionClass.seedData)){logger.info(`Registering seed data for question: ${t.name}`);try{let d=t.questionClass.seedData.filter(()=>t.dataShapes.length>0).map(d=>c.addNote(t.course,t.dataShapes[0],d,u,[]));await Promise.all(d),logger.info(`Seed data registered for question: ${t.name}`)}catch(c){logger.warn(`Failed to register seed data for question '${t.name}': ${c instanceof Error?c.message:String(c)}`)}}}async function registerBlanksCard(t,c,u,d,m){try{logger.info(`Registering BlanksCard data shapes and question type...`);let g=0,b=`default`;for(let t of c)registerDataShape({name:t.name,course:b,dataShape:t},u)&&g++;let S={name:t.name,course:b,questionClass:{name:t.name,dataShapes:c,views:t.views||[]},dataShapes:c,views:t.views||[]};registerQuestionType(S,u)&&g++,logger.info(`Updating course configuration with BlanksCard...`);let C=await d.updateCourseConfig(u);if(!C.ok)throw Error(`Failed to update course config: ${JSON.stringify(C)}`);return m&&await registerSeedData(S,d,m),logger.info(`BlanksCard registration complete: ${g} items registered`),{success:!0}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`BlanksCard registration failed: ${c}`),{success:!1,errorMessage:c}}}async function registerCustomQuestionTypes(t,c,u,d){try{logger.info(`Beginning custom question registration`),logger.info(`Processing ${t.questionClasses.length} question classes`);let{dataShapes:m,questions:g}=processCustomQuestionsData(t);logger.info(`Found ${m.length} data shapes and ${g.length} questions`);let b=0;logger.info(`Registering data shapes...`);for(let t of m)registerDataShape(t,c)&&b++;logger.info(`Registering question types...`);for(let t of g)registerQuestionType(t,c)&&b++;logger.info(`Updating course configuration...`);let S=await u.updateCourseConfig(c);if(!S.ok)throw Error(`Failed to update course config: ${JSON.stringify(S)}`);if(d){logger.info(`Registering seed data...`);for(let t of g)await registerSeedData(t,u,d)}return logger.info(`Custom question registration complete: ${b} items registered`),{success:!0,registeredCount:b}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`Custom question registration failed: ${c}`),{success:!1,registeredCount:0,errorMessage:c}}}function newInterval(t,c){return areQuestionRecords(c)?newQuestionInterval(t,c):1e5}function newQuestionInterval(t,c){let u=c.records,d=u[u.length-1],m=lastSuccessfulInterval(u);if(m>c.bestInterval&&(c.bestInterval=m,t.update(c._id,{bestInterval:m}).catch(t=>{logger.warn(`[SpacedRepetition] Failed to update bestInterval for ${c._id}: ${t?.message??t}`)})),d.isCorrect){let t=d.performance,u=isTaggedPerformance(t)?t._global:t,g=Math.min(1,Math.max(0,u));logger.debug(`Demontrated skill: ${g}`);let b=m*(.75+g);if(c.lapses=getLapses(c.records),c.streak=getStreak(c.records),c.lapses&&c.streak&&c.bestInterval&&(c.lapses>=0||c.streak>=0)){let t=(c.lapses*b+c.streak*c.bestInterval)/(c.lapses+c.streak);return logger.debug(`Weighted average interval calculation:
|
|
321
|
-
(${c.lapses} * ${b} + ${c.streak} * ${c.bestInterval}) / (${c.lapses} + ${c.streak}) = ${t}`),t}else return b}else return 0}function lastSuccessfulInterval(t){for(let c=t.length-1;c>=1;c--)if(t[c].priorAttemps===0&&t[c].isCorrect){let u=secondsBetween(t[c-1].timeStamp,t[c].timeStamp),d=Math.max(u,1200*60);return logger.debug(`Last interval w/ this card was: ${u}s, returning ${d}s`),d}return getInitialInterval(t)}function getStreak(t){let c=0,u=t.length-1;for(;u>=0&&t[u].isCorrect;)u--,c++;return c}function getLapses(t){return t.filter(t=>t.isCorrect===!1).length}function getInitialInterval(t){return logger.warn(`history of length: ${t.length} ignored!`),3600*24*3}function secondsBetween(t,c){return t=hooks(t),c=hooks(c),duration(c.diff(t)).asSeconds()}function parseAudioURIs(t){return typeof t==`string`?t.match(/https?:\/\/[^\s"'<>]+\.(wav|mp3|ogg|m4a|aac|webm)/gi)??[]:[]}function prefetchAudio(t){return new Promise(c=>{let u=new Audio;u.preload=`auto`;let cleanup=()=>{u.oncanplaythrough=null,u.onerror=null};u.oncanplaythrough=()=>{cleanup(),c()},u.onerror=()=>{cleanup(),logger.warn(`[CardHydrationService] Failed to prefetch audio: ${t}`),c()},u.src=t})}async function validateStaticCourse(t,c){let u={valid:!0,manifestExists:!1,chunksExist:!1,attachmentsExist:!1,errors:[],warnings:[]};try{if(c){if(!(await c.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u}else if(!nodeFS2)return u.errors.push(`File system access not available - validation skipped`),u.valid=!1,u;else if(!(await nodeFS2.promises.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u;let d=`${t}/manifest.json`;try{if(c)if(d=c.joinPath(t,`manifest.json`),await c.exists(d)){u.manifestExists=!0;let t=await c.readFile(d),m=JSON.parse(t);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}else u.errors.push(`Manifest not found: ${d}`),u.valid=!1;else{d=`${t}/manifest.json`,await nodeFS2.promises.access(d),u.manifestExists=!0;let c=await nodeFS2.promises.readFile(d,`utf8`),m=JSON.parse(c);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}}catch(t){let c=t instanceof FileSystemError?t.message:`Manifest not found or invalid: ${d}`;u.errors.push(c),u.valid=!1}let m=`${t}/chunks`;try{c?(m=c.joinPath(t,`chunks`),await c.exists(m)?(await c.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1):(u.errors.push(`Chunks directory not found: ${m}`),u.valid=!1)):(m=`${t}/chunks`,(await nodeFS2.promises.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1))}catch(t){let c=t instanceof FileSystemError?t.message:`Chunks directory not found: ${m}`;u.errors.push(c),u.valid=!1}let g;try{c?(g=c.joinPath(t,`attachments`),await c.exists(g)?(await c.stat(g)).isDirectory()&&(u.attachmentsExist=!0):u.warnings.push(`Attachments directory not found: ${g} (this is OK if course has no attachments)`)):(g=`${t}/attachments`,(await nodeFS2.promises.stat(g)).isDirectory()&&(u.attachmentsExist=!0))}catch(c){g=g||`${t}/attachments`;let d=c instanceof FileSystemError?c.message:`Attachments directory not found: ${g} (this is OK if course has no attachments)`;u.warnings.push(d)}}catch(t){u.errors.push(`Failed to validate static course: ${t instanceof Error?t.message:String(t)}`),u.valid=!1}return u}async function validateMigration(t,c,u){let d={valid:!0,documentCountMatch:!1,attachmentIntegrity:!1,viewFunctionality:!1,issues:[]};try{logger.info(`Starting migration validation...`),d.documentCountMatch=compareDocumentCounts(c,await getActualDocumentCounts(t),d.issues),await validateCourseConfig(t,u,d.issues),d.viewFunctionality=await validateViews(t,u,d.issues),d.attachmentIntegrity=await validateAttachmentIntegrity(t,d.issues),d.valid=d.documentCountMatch&&d.viewFunctionality&&d.attachmentIntegrity,logger.info(`Migration validation completed. Valid: ${d.valid}`),d.issues.length>0&&(logger.info(`Validation issues: ${d.issues.length}`),d.issues.forEach(t=>{t.type===`error`?logger.error(`${t.category}: ${t.message}`):logger.warn(`${t.category}: ${t.message}`)}))}catch(t){d.valid=!1,d.issues.push({type:`error`,category:`metadata`,message:`Validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function getActualDocumentCounts(t){let c={};try{let u=await t.allDocs({include_docs:!0});for(let t of u.rows){if(t.id.startsWith(`_design/`)){c._design=(c._design||0)+1;continue}let u=t.doc;u&&u.docType?c[u.docType]=(c[u.docType]||0)+1:c.unknown=(c.unknown||0)+1}}catch(t){logger.error(`Failed to get actual document counts:`,t)}return c}function compareDocumentCounts(t,c,u){let d=!0;for(let[m,g]of Object.entries(t)){let t=c[m]||0;t!==g&&(d=!1,u.push({type:`error`,category:`documents`,message:`Document count mismatch for ${m}: expected ${g}, got ${t}`}))}for(let[d,m]of Object.entries(c))!t[d]&&d!==`_design`&&u.push({type:`warning`,category:`documents`,message:`Unexpected document type found: ${d} (${m} documents)`});return d}async function validateCourseConfig(t,c,u){try{let d=await t.get(`CourseConfig`);if(!d){u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found after migration`});return}d.courseID||u.push({type:`warning`,category:`course_config`,message:`CourseConfig document missing courseID field`}),d.courseID!==c.courseId&&u.push({type:`warning`,category:`course_config`,message:`CourseConfig courseID mismatch: expected ${c.courseId}, got ${d.courseID}`}),logger.debug(`CourseConfig document validation passed`)}catch(t){t.status===404?u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found in database`}):u.push({type:`error`,category:`course_config`,message:`Failed to validate CourseConfig document: ${t instanceof Error?t.message:String(t)}`})}}async function validateViews(t,c,u){let d=!0;try{for(let m of c.designDocs)try{if(!await t.get(m._id)){d=!1,u.push({type:`error`,category:`views`,message:`Design document not found: ${m._id}`});continue}for(let c of Object.keys(m.views))try{let u=`${m._id}/${c}`;await t.query(u,{limit:1})}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View not accessible: ${m._id}/${c} - ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`Failed to validate design document ${m._id}: ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function validateAttachmentIntegrity(t,c){let u=!0;try{let d=await t.allDocs({include_docs:!0,limit:10}),m=0,g=0;for(let b of d.rows){let d=b.doc;if(d&&d._attachments)for(let[b,S]of Object.entries(d._attachments)){m++;try{await t.getAttachment(d._id,b)&&g++}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment not accessible: ${d._id}/${b} - ${t}`})}}}m===0?c.push({type:`warning`,category:`attachments`,message:`No attachments found in sampled documents`}):logger.info(`Validated ${g}/${m} sampled attachments`)}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment validation failed: ${t instanceof Error?t.message:String(t)}`})}return u}function buildSourceSummary(t,c,u){let d=t.weighted.map(t=>t.score),m=t.weighted.filter(t=>getCardOrigin(t)===`review`).length,g=t.weighted.filter(t=>getCardOrigin(t)===`new`).length;return{sourceIndex:t.sourceIndex,sourceId:c,sourceName:u,totalCards:t.weighted.length,reviewCount:m,newCount:g,topScore:d.length>0?Math.max(...d):0,bottomScore:d.length>0?Math.min(...d):0,scoreRange:d.length>0?[Math.min(...d),Math.max(...d)]:[0,0],avgScore:d.length>0?d.reduce((t,c)=>t+c,0)/d.length:0}}function buildSourceBreakdown(t,c,u){let d=u.filter(c=>c.courseId===t),m=d.filter(t=>t.selected);return{sourceId:t,sourceName:c,reviewsProvided:d.filter(t=>t.origin===`review`).length,newProvided:d.filter(t=>t.origin===`new`).length,reviewsSelected:m.filter(t=>t.origin===`review`).length,newSelected:m.filter(t=>t.origin===`new`).length,totalSelected:m.length,selectionRate:d.length>0?m.length/d.length*100:0}}function captureMixerRun(t,c,u,d,m,g,b){let S=c.map((t,c)=>buildSourceSummary(t,u[c]||`source-${c}`,d[c])),C=new Set(b.map(t=>t.cardId)),w=new Map;c.forEach(t=>{let c=[...t.weighted].sort((t,c)=>c.score-t.score),d=new Map;c.forEach((t,c)=>{d.set(t.cardId,c+1)}),w.set(u[t.sourceIndex]||`source-${t.sourceIndex}`,d)});let T=new Map;b.forEach((t,c)=>{T.set(t.cardId,c+1)});let E=new Map;c.forEach(t=>{t.weighted.forEach(t=>{E.set(t.cardId,t)})});let D=Array.from(E.values()).map(t=>({cardId:t.cardId,courseId:t.courseId,origin:getCardOrigin(t),score:t.score,sourceIndex:c.findIndex(c=>c.weighted.some(c=>c.cardId===t.cardId)),selected:C.has(t.cardId),rankInSource:w.get(t.courseId)?.get(t.cardId),rankInMix:T.get(t.cardId)})),O=Array.from(new Set(u.filter(t=>t))).map((t,c)=>buildSourceBreakdown(t,d[c],D)),Or={runId:`mix-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date,mixerType:t,requestedLimit:m,quotaPerSource:g,sourceSummaries:S,cards:D,finalCount:b.length,reviewsSelected:b.filter(t=>getCardOrigin(t)===`review`).length,newSelected:b.filter(t=>getCardOrigin(t)===`new`).length,sourceBreakdowns:O};runHistory2.unshift(Or),runHistory2.length>MAX_RUNS2&&runHistory2.pop()}function printMixerSummary(t){console.group(`\u{1F3A8} Mixer Run: ${t.mixerType}`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`Config: limit=${t.requestedLimit}${t.quotaPerSource?`, quota/source=${t.quotaPerSource}`:``}`),console.group(`\u{1F4E5} Input: ${t.sourceSummaries.length} sources`);for(let c of t.sourceSummaries)logger.info(` ${c.sourceName||c.sourceId}: ${c.totalCards} cards (${c.reviewCount} reviews, ${c.newCount} new)`),logger.info(` Score range: [${c.scoreRange[0].toFixed(2)}, ${c.scoreRange[1].toFixed(2)}], avg: ${c.avgScore.toFixed(2)}`);console.groupEnd(),console.group(`\u{1F4E4} Output: ${t.finalCount} cards selected (${t.reviewsSelected} reviews, ${t.newSelected} new)`);for(let c of t.sourceBreakdowns){let t=c.sourceName||c.sourceId;logger.info(` ${t}: ${c.totalSelected} selected (${c.reviewsSelected} reviews, ${c.newSelected} new) - ${c.selectionRate.toFixed(1)}% selection rate`)}console.groupEnd(),console.groupEnd()}function mountMixerDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.mixer=mixerDebugAPI}function registerActiveController(t){activeController=t}function getActiveController(){return activeController}function toggleSessionOverlay(){if(typeof document>`u`){logger.info(`[Session Overlay] No DOM available (non-browser host); overlay unavailable.`);return}overlayEl?(teardown(),logger.info(`[Session Overlay] Hidden.`)):(mount(),logger.info(`[Session Overlay] Shown. Toggle off with window.skuilder.session.dbgOverlay().`))}function mount(){overlayEl=document.createElement(`div`),overlayEl.id=OVERLAY_ID,Object.assign(overlayEl.style,{position:`fixed`,top:`8px`,left:`8px`,zIndex:`2147483647`,maxWidth:`320px`,maxHeight:`90vh`,overflowY:`auto`,padding:`8px 10px`,background:`rgba(17, 24, 39, 0.92)`,color:`#e5e7eb`,font:`11px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace`,borderRadius:`6px`,boxShadow:`0 4px 16px rgba(0,0,0,0.4)`,pointerEvents:`auto`,userSelect:`none`}),document.body.appendChild(overlayEl),render(),pollHandle=setInterval(render,POLL_MS)}function teardown(){pollHandle!==null&&(clearInterval(pollHandle),pollHandle=null),overlayEl?.parentNode&&overlayEl.parentNode.removeChild(overlayEl),overlayEl=null}function render(){if(!overlayEl)return;spinnerFrame++;let t=getActiveController();if(!t){overlayEl.innerHTML=headerHtml()+`<div style="opacity:.65">No active session.</div>`;return}let c=t.getDebugSnapshot();overlayEl.innerHTML=headerHtml()+replanHtml(c)+metaHtml(c)+hintsHtml(c.sessionHints)+queueHtml(`reviewQ`,`reviewQ`,c.reviewQ)+queueHtml(`newQ`,`newQ`,c.newQ)+queueHtml(`failedQ`,`failedQ`,c.failedQ),overlayEl.querySelectorAll(`[data-q]`).forEach(t=>{t.onclick=()=>{let c=t.dataset.q;c&&(expanded[c]=!expanded[c],render())}})}function headerHtml(){return`<div style="font-weight:600;color:#93c5fd;margin-bottom:4px">⚙ SessionController</div>`}function replanHtml(t){return t.replanActive?`<div style="margin-bottom:6px;color:#fde047">${SPINNER_FRAMES[spinnerFrame%SPINNER_FRAMES.length]} replanning <span style="opacity:.85">[${esc(t.replanLabel??`(auto)`)}]</span></div>`:`<div style="margin-bottom:6px;opacity:.45">○ idle</div>`}function metaHtml(t){return`<div style="margin-bottom:6px">${[`time ${formatTime(t.secondsRemaining)}${t.hasCardGuarantee?` \xB7 <span style="color:#fbbf24">guarantee ${t.minCardsGuarantee}</span>`:``}`,`well-indicated left: ${t.wellIndicatedRemaining}`,`current: ${t.currentCard?esc(t.currentCard):`<span style="opacity:.6">—</span>`}`].map(t=>`<div>${t}</div>`).join(``)}</div>`}function hintsHtml(t){let c=[];return t&&(t.boostTags&&Object.keys(t.boostTags).length&&c.push(`boost: `+Object.entries(t.boostTags).map(([t,c])=>`${esc(t)}<span style="opacity:.6">\xD7${c}</span>`).join(`, `)),t.boostCards&&Object.keys(t.boostCards).length&&c.push(`boostCards: `+Object.entries(t.boostCards).map(([t,c])=>`${esc(t)}<span style="opacity:.6">\xD7${c}</span>`).join(`, `)),t.requireCards?.length&&c.push(`require: ${t.requireCards.map(esc).join(`, `)}`),t.requireTags?.length&&c.push(`requireTags: ${t.requireTags.map(esc).join(`, `)}`),t.excludeTags?.length&&c.push(`exclude: ${t.excludeTags.map(esc).join(`, `)}`),t.excludeCards?.length&&c.push(`excludeCards: ${t.excludeCards.map(esc).join(`, `)}`)),`<div style="margin-bottom:6px"><div style="color:#86efac">sessionHints</div>${c.length?c.map(t=>`<div style="margin-left:6px">${t}</div>`).join(``):`<div style="margin-left:6px;opacity:.6">none</div>`}</div>`}function queueHtml(t,c,u){let d=u.length>INLINE_THRESHOLD,m=!d||expanded[t],g=d?expanded[t]?`▾ `:`▸ `:``,b=u.dequeueCount?` <span style="opacity:.5">drawn ${u.dequeueCount}</span>`:``,S=d?`cursor:pointer;color:#f9a8d4`:`color:#f9a8d4`,C=`<div${d?` data-q="${t}"`:``} style="${S}">${g}${c}: ${u.length}${b}</div>`,w=``;return w=m&&u.cards.length?`<ol style="margin:2px 0 6px 0;padding-left:20px">`+u.cards.map(t=>`<li style="white-space:nowrap">${esc(t)}</li>`).join(``)+`</ol>`:u.cards.length?`<div style="margin:1px 0 6px 6px;opacity:.55">(${u.length} cards \u2014 click to expand)</div>`:`<div style="margin:1px 0 6px 6px;opacity:.5">empty</div>`,C+w}function formatTime(t){let c=Math.max(0,Math.round(t));return`${Math.floor(c/60)}:${(c%60).toString().padStart(2,`0`)}`}function esc(t){return t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}function startSessionTracking(t,c,u){clearRunHistory();let d=`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;activeSession={sessionId:d,startTime:new Date,initialQueues:{timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u},presentations:[],queueSnapshots:[]},logger.debug(`[SessionDebugger] Started tracking session: ${d}`)}function recordCardPresentation(t,c,u,d,m,g){if(!activeSession){logger.warn(`[SessionDebugger] No active session to record presentation`);return}activeSession.presentations.push({timestamp:new Date,sequenceNumber:activeSession.presentations.length+1,cardId:t,courseId:c,courseName:u,origin:d,queueSource:m,score:g})}function snapshotQueues(t,c,u,d,m){activeSession&&activeSession.queueSnapshots.push({timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u,reviewQNext3:d,newQNext3:m})}function endSessionTracking(){activeSession&&(activeSession.endTime=new Date,sessionHistory.unshift(activeSession),sessionHistory.length>MAX_HISTORY&&sessionHistory.pop(),logger.debug(`[SessionDebugger] Ended session: ${activeSession.sessionId}`),activeSession=null)}function showCurrentQueue(){if(!activeSession){logger.info(`[Session Debug] No active session.`);return}let t=activeSession.queueSnapshots[activeSession.queueSnapshots.length-1]||activeSession.initialQueues;console.group(`📊 Current Queue State`),logger.info(`Review Queue: ${t.reviewQLength} cards`),t.reviewQNext3&&t.reviewQNext3.length>0&&logger.info(` Next: ${t.reviewQNext3.join(`, `)}`),logger.info(`New Queue: ${t.newQLength} cards`),t.newQNext3&&t.newQNext3.length>0&&logger.info(` Next: ${t.newQNext3.join(`, `)}`),logger.info(`Failed Queue: ${t.failedQLength} cards`),console.groupEnd()}function showPresentationHistory(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`\u{1F4DC} Session History: ${c.sessionId}`),logger.info(`Started: ${c.startTime.toLocaleTimeString()}`),c.endTime&&logger.info(`Ended: ${c.endTime.toLocaleTimeString()}`),logger.info(`Cards presented: ${c.presentations.length}`),c.presentations.length>0&&console.table(c.presentations.map(t=>({"#":t.sequenceNumber,course:t.courseName||t.courseId.slice(0,8),origin:t.origin,queue:t.queueSource,score:t.score?.toFixed(3)||`-`,time:t.timestamp.toLocaleTimeString()}))),console.groupEnd()}function showInterleaving(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`🔀 Interleaving Analysis`);let u=new Map,d=new Map;if(c.presentations.forEach(t=>{let c=t.courseName||t.courseId;u.set(c,(u.get(c)||0)+1),d.has(c)||d.set(c,{review:0,new:0,failed:0});let m=d.get(c);m[t.origin]++}),logger.info(`Course distribution:`),console.table(Array.from(u.entries()).map(([t,u])=>{let m=d.get(t);return{course:t,total:u,reviews:m.review,new:m.new,failed:m.failed,percentage:(u/c.presentations.length*100).toFixed(1)+`%`}})),c.presentations.length>0){logger.info(`
|
|
321
|
+
(${c.lapses} * ${b} + ${c.streak} * ${c.bestInterval}) / (${c.lapses} + ${c.streak}) = ${t}`),t}else return b}else return 0}function lastSuccessfulInterval(t){for(let c=t.length-1;c>=1;c--)if(t[c].priorAttemps===0&&t[c].isCorrect){let u=secondsBetween(t[c-1].timeStamp,t[c].timeStamp),d=Math.max(u,1200*60);return logger.debug(`Last interval w/ this card was: ${u}s, returning ${d}s`),d}return getInitialInterval(t)}function getStreak(t){let c=0,u=t.length-1;for(;u>=0&&t[u].isCorrect;)u--,c++;return c}function getLapses(t){return t.filter(t=>t.isCorrect===!1).length}function getInitialInterval(t){return logger.warn(`history of length: ${t.length} ignored!`),3600*24*3}function secondsBetween(t,c){return t=hooks(t),c=hooks(c),duration(c.diff(t)).asSeconds()}function parseAudioURIs(t){return typeof t==`string`?t.match(/https?:\/\/[^\s"'<>]+\.(wav|mp3|ogg|m4a|aac|webm)/gi)??[]:[]}function prefetchAudio(t){return new Promise(c=>{let u=new Audio;u.preload=`auto`;let cleanup=()=>{u.oncanplaythrough=null,u.onerror=null};u.oncanplaythrough=()=>{cleanup(),c()},u.onerror=()=>{cleanup(),logger.warn(`[CardHydrationService] Failed to prefetch audio: ${t}`),c()},u.src=t})}async function validateStaticCourse(t,c){let u={valid:!0,manifestExists:!1,chunksExist:!1,attachmentsExist:!1,errors:[],warnings:[]};try{if(c){if(!(await c.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u}else if(!nodeFS2)return u.errors.push(`File system access not available - validation skipped`),u.valid=!1,u;else if(!(await nodeFS2.promises.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u;let d=`${t}/manifest.json`;try{if(c)if(d=c.joinPath(t,`manifest.json`),await c.exists(d)){u.manifestExists=!0;let t=await c.readFile(d),m=JSON.parse(t);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}else u.errors.push(`Manifest not found: ${d}`),u.valid=!1;else{d=`${t}/manifest.json`,await nodeFS2.promises.access(d),u.manifestExists=!0;let c=await nodeFS2.promises.readFile(d,`utf8`),m=JSON.parse(c);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}}catch(t){let c=t instanceof FileSystemError?t.message:`Manifest not found or invalid: ${d}`;u.errors.push(c),u.valid=!1}let m=`${t}/chunks`;try{c?(m=c.joinPath(t,`chunks`),await c.exists(m)?(await c.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1):(u.errors.push(`Chunks directory not found: ${m}`),u.valid=!1)):(m=`${t}/chunks`,(await nodeFS2.promises.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1))}catch(t){let c=t instanceof FileSystemError?t.message:`Chunks directory not found: ${m}`;u.errors.push(c),u.valid=!1}let g;try{c?(g=c.joinPath(t,`attachments`),await c.exists(g)?(await c.stat(g)).isDirectory()&&(u.attachmentsExist=!0):u.warnings.push(`Attachments directory not found: ${g} (this is OK if course has no attachments)`)):(g=`${t}/attachments`,(await nodeFS2.promises.stat(g)).isDirectory()&&(u.attachmentsExist=!0))}catch(c){g=g||`${t}/attachments`;let d=c instanceof FileSystemError?c.message:`Attachments directory not found: ${g} (this is OK if course has no attachments)`;u.warnings.push(d)}}catch(t){u.errors.push(`Failed to validate static course: ${t instanceof Error?t.message:String(t)}`),u.valid=!1}return u}async function validateMigration(t,c,u){let d={valid:!0,documentCountMatch:!1,attachmentIntegrity:!1,viewFunctionality:!1,issues:[]};try{logger.info(`Starting migration validation...`),d.documentCountMatch=compareDocumentCounts(c,await getActualDocumentCounts(t),d.issues),await validateCourseConfig(t,u,d.issues),d.viewFunctionality=await validateViews(t,u,d.issues),d.attachmentIntegrity=await validateAttachmentIntegrity(t,d.issues),d.valid=d.documentCountMatch&&d.viewFunctionality&&d.attachmentIntegrity,logger.info(`Migration validation completed. Valid: ${d.valid}`),d.issues.length>0&&(logger.info(`Validation issues: ${d.issues.length}`),d.issues.forEach(t=>{t.type===`error`?logger.error(`${t.category}: ${t.message}`):logger.warn(`${t.category}: ${t.message}`)}))}catch(t){d.valid=!1,d.issues.push({type:`error`,category:`metadata`,message:`Validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function getActualDocumentCounts(t){let c={};try{let u=await t.allDocs({include_docs:!0});for(let t of u.rows){if(t.id.startsWith(`_design/`)){c._design=(c._design||0)+1;continue}let u=t.doc;u&&u.docType?c[u.docType]=(c[u.docType]||0)+1:c.unknown=(c.unknown||0)+1}}catch(t){logger.error(`Failed to get actual document counts:`,t)}return c}function compareDocumentCounts(t,c,u){let d=!0;for(let[m,g]of Object.entries(t)){let t=c[m]||0;t!==g&&(d=!1,u.push({type:`error`,category:`documents`,message:`Document count mismatch for ${m}: expected ${g}, got ${t}`}))}for(let[d,m]of Object.entries(c))!t[d]&&d!==`_design`&&u.push({type:`warning`,category:`documents`,message:`Unexpected document type found: ${d} (${m} documents)`});return d}async function validateCourseConfig(t,c,u){try{let d=await t.get(`CourseConfig`);if(!d){u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found after migration`});return}d.courseID||u.push({type:`warning`,category:`course_config`,message:`CourseConfig document missing courseID field`}),d.courseID!==c.courseId&&u.push({type:`warning`,category:`course_config`,message:`CourseConfig courseID mismatch: expected ${c.courseId}, got ${d.courseID}`}),logger.debug(`CourseConfig document validation passed`)}catch(t){t.status===404?u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found in database`}):u.push({type:`error`,category:`course_config`,message:`Failed to validate CourseConfig document: ${t instanceof Error?t.message:String(t)}`})}}async function validateViews(t,c,u){let d=!0;try{for(let m of c.designDocs)try{if(!await t.get(m._id)){d=!1,u.push({type:`error`,category:`views`,message:`Design document not found: ${m._id}`});continue}for(let c of Object.keys(m.views))try{let u=`${m._id}/${c}`;await t.query(u,{limit:1})}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View not accessible: ${m._id}/${c} - ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`Failed to validate design document ${m._id}: ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function validateAttachmentIntegrity(t,c){let u=!0;try{let d=await t.allDocs({include_docs:!0,limit:10}),m=0,g=0;for(let b of d.rows){let d=b.doc;if(d&&d._attachments)for(let[b,S]of Object.entries(d._attachments)){m++;try{await t.getAttachment(d._id,b)&&g++}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment not accessible: ${d._id}/${b} - ${t}`})}}}m===0?c.push({type:`warning`,category:`attachments`,message:`No attachments found in sampled documents`}):logger.info(`Validated ${g}/${m} sampled attachments`)}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment validation failed: ${t instanceof Error?t.message:String(t)}`})}return u}function buildSourceSummary(t,c,u){let d=t.weighted.map(t=>t.score),m=t.weighted.filter(t=>getCardOrigin(t)===`review`).length,g=t.weighted.filter(t=>getCardOrigin(t)===`new`).length;return{sourceIndex:t.sourceIndex,sourceId:c,sourceName:u,totalCards:t.weighted.length,reviewCount:m,newCount:g,topScore:d.length>0?Math.max(...d):0,bottomScore:d.length>0?Math.min(...d):0,scoreRange:d.length>0?[Math.min(...d),Math.max(...d)]:[0,0],avgScore:d.length>0?d.reduce((t,c)=>t+c,0)/d.length:0}}function buildSourceBreakdown(t,c,u){let d=u.filter(c=>c.courseId===t),m=d.filter(t=>t.selected);return{sourceId:t,sourceName:c,reviewsProvided:d.filter(t=>t.origin===`review`).length,newProvided:d.filter(t=>t.origin===`new`).length,reviewsSelected:m.filter(t=>t.origin===`review`).length,newSelected:m.filter(t=>t.origin===`new`).length,totalSelected:m.length,selectionRate:d.length>0?m.length/d.length*100:0}}function captureMixerRun(t,c,u,d,m,g,b){let S=c.map((t,c)=>buildSourceSummary(t,u[c]||`source-${c}`,d[c])),C=new Set(b.map(t=>t.cardId)),w=new Map;c.forEach(t=>{let c=[...t.weighted].sort((t,c)=>c.score-t.score),d=new Map;c.forEach((t,c)=>{d.set(t.cardId,c+1)}),w.set(u[t.sourceIndex]||`source-${t.sourceIndex}`,d)});let T=new Map;b.forEach((t,c)=>{T.set(t.cardId,c+1)});let E=new Map;c.forEach(t=>{t.weighted.forEach(t=>{E.set(t.cardId,t)})});let D=Array.from(E.values()).map(t=>({cardId:t.cardId,courseId:t.courseId,origin:getCardOrigin(t),score:t.score,sourceIndex:c.findIndex(c=>c.weighted.some(c=>c.cardId===t.cardId)),selected:C.has(t.cardId),rankInSource:w.get(t.courseId)?.get(t.cardId),rankInMix:T.get(t.cardId)})),O=Array.from(new Set(u.filter(t=>t))).map((t,c)=>buildSourceBreakdown(t,d[c],D)),Or={runId:`mix-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date,mixerType:t,requestedLimit:m,quotaPerSource:g,sourceSummaries:S,cards:D,finalCount:b.length,reviewsSelected:b.filter(t=>getCardOrigin(t)===`review`).length,newSelected:b.filter(t=>getCardOrigin(t)===`new`).length,sourceBreakdowns:O};runHistory2.unshift(Or),runHistory2.length>MAX_RUNS2&&runHistory2.pop()}function printMixerSummary(t){console.group(`\u{1F3A8} Mixer Run: ${t.mixerType}`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`Config: limit=${t.requestedLimit}${t.quotaPerSource?`, quota/source=${t.quotaPerSource}`:``}`),console.group(`\u{1F4E5} Input: ${t.sourceSummaries.length} sources`);for(let c of t.sourceSummaries)logger.info(` ${c.sourceName||c.sourceId}: ${c.totalCards} cards (${c.reviewCount} reviews, ${c.newCount} new)`),logger.info(` Score range: [${c.scoreRange[0].toFixed(2)}, ${c.scoreRange[1].toFixed(2)}], avg: ${c.avgScore.toFixed(2)}`);console.groupEnd(),console.group(`\u{1F4E4} Output: ${t.finalCount} cards selected (${t.reviewsSelected} reviews, ${t.newSelected} new)`);for(let c of t.sourceBreakdowns){let t=c.sourceName||c.sourceId;logger.info(` ${t}: ${c.totalSelected} selected (${c.reviewsSelected} reviews, ${c.newSelected} new) - ${c.selectionRate.toFixed(1)}% selection rate`)}console.groupEnd(),console.groupEnd()}function mountMixerDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.mixer=mixerDebugAPI}function registerActiveController(t){activeController=t}function getActiveController(){return activeController}function toggleSessionOverlay(){if(typeof document>`u`){logger.info(`[Session Overlay] No DOM available (non-browser host); overlay unavailable.`);return}overlayEl?(teardown(),logger.info(`[Session Overlay] Hidden.`)):(mount(),logger.info(`[Session Overlay] Shown. Toggle off with window.skuilder.session.dbgOverlay().`))}function mount(){minified=!1,overlayEl=document.createElement(`div`),overlayEl.id=OVERLAY_ID,Object.assign(overlayEl.style,{position:`fixed`,top:`8px`,left:`8px`,zIndex:`2147483647`,maxWidth:`320px`,maxHeight:`90vh`,overflowY:`auto`,padding:`8px 10px`,background:`rgba(17, 24, 39, 0.92)`,color:`#e5e7eb`,font:`11px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace`,borderRadius:`6px`,boxShadow:`0 4px 16px rgba(0,0,0,0.4)`,pointerEvents:`auto`,userSelect:`none`}),document.body.appendChild(overlayEl),render(),pollHandle=setInterval(render,POLL_MS)}function teardown(){pollHandle!==null&&(clearInterval(pollHandle),pollHandle=null),overlayEl?.parentNode&&overlayEl.parentNode.removeChild(overlayEl),overlayEl=null}function render(){if(!overlayEl)return;spinnerFrame++;let t=getActiveController();if(!t){lastSnapshot=null,overlayEl.innerHTML=headerHtml()+(minified?``:`<div style="opacity:.65">No active session.</div>`),attachHandlers();return}let c=t.getDebugSnapshot();if(lastSnapshot=c,minified){overlayEl.innerHTML=headerHtml(),attachHandlers();return}overlayEl.innerHTML=headerHtml()+replanHtml(c)+metaHtml(c)+hintsHtml(c.sessionHints)+queueHtml(`reviewQ`,`reviewQ`,c.reviewQ)+queueHtml(`newQ`,`newQ`,c.newQ)+queueHtml(`failedQ`,`failedQ`,c.failedQ)+drawnHtml(`drawn`,c.drawnCards),attachHandlers()}function attachHandlers(){if(!overlayEl)return;overlayEl.querySelectorAll(`[data-q]`).forEach(t=>{t.onclick=()=>{let c=t.dataset.q;c&&(expanded[c]=!expanded[c],render())}});let t=overlayEl.querySelector(`[data-copy]`);t&&(t.onclick=t=>{t.stopPropagation(),copySnapshot()});let c=overlayEl.querySelector(`[data-min]`);c&&(c.onclick=t=>{t.stopPropagation(),minified=!minified,render()})}function copySnapshot(){let t=snapshotToText(lastSnapshot),flash=()=>{copyFlashUntil=Date.now()+1200,render()},c=typeof navigator<`u`?navigator.clipboard:void 0;c?.writeText?c.writeText(t).then(flash,t=>{logger.warn(`[Session Overlay] Clipboard write failed: ${String(t)}`)}):logger.info(`[Session Overlay] Clipboard unavailable; snapshot follows:
|
|
322
|
+
${t}`)}function headerHtml(){let t=Date.now()<copyFlashUntil;return`<div style="font-weight:600;color:#93c5fd;margin-bottom:${minified?0:4}px">${`<span data-copy style="cursor:pointer;float:right;font-weight:400;color:${t?`#86efac`:`#93c5fd`};border:1px solid currentColor;border-radius:4px;padding:0 4px;line-height:1.3">${t?`✓ copied`:`⎘ copy`}</span>`}${`<span data-min title="${minified?`Restore`:`Minify`}" style="cursor:pointer;float:right;font-weight:400;color:#93c5fd;border:1px solid currentColor;border-radius:4px;padding:0 5px;margin-right:4px;line-height:1.3">${minified?`▢`:`—`}</span>`}\u2699 SessionController</div>`}function replanHtml(t){return t.replanActive?`<div style="margin-bottom:6px;color:#fde047">${SPINNER_FRAMES[spinnerFrame%SPINNER_FRAMES.length]} replanning <span style="opacity:.85">[${esc(t.replanLabel??`(auto)`)}]</span></div>`:`<div style="margin-bottom:6px;opacity:.45">○ idle</div>`}function metaHtml(t){return`<div style="margin-bottom:6px">${[`time ${formatTime(t.secondsRemaining)}${t.hasCardGuarantee?` \xB7 <span style="color:#fbbf24">guarantee ${t.minCardsGuarantee}</span>`:``}`,`well-indicated left: ${t.wellIndicatedRemaining}`,`current: ${t.currentCard?esc(t.currentCard):`<span style="opacity:.6">—</span>`}`].map(t=>`<div>${t}</div>`).join(``)}</div>`}function hintsHtml(t){let c=[];return t&&(t.boostTags&&Object.keys(t.boostTags).length&&c.push(`boost: `+Object.entries(t.boostTags).map(([t,c])=>`${esc(t)}<span style="opacity:.6">\xD7${c}</span>`).join(`, `)),t.boostCards&&Object.keys(t.boostCards).length&&c.push(`boostCards: `+Object.entries(t.boostCards).map(([t,c])=>`${esc(t)}<span style="opacity:.6">\xD7${c}</span>`).join(`, `)),t.requireCards?.length&&c.push(`require: ${t.requireCards.map(esc).join(`, `)}`),t.requireTags?.length&&c.push(`requireTags: ${t.requireTags.map(esc).join(`, `)}`),t.excludeTags?.length&&c.push(`exclude: ${t.excludeTags.map(esc).join(`, `)}`),t.excludeCards?.length&&c.push(`excludeCards: ${t.excludeCards.map(esc).join(`, `)}`)),`<div style="margin-bottom:6px"><div style="color:#86efac">sessionHints</div>${c.length?c.map(t=>`<div style="margin-left:6px">${t}</div>`).join(``):`<div style="margin-left:6px;opacity:.6">none</div>`}</div>`}function queueHtml(t,c,u){let d=u.length>INLINE_THRESHOLD,m=d&&expanded[t],g=d?expanded[t]?`▾ `:`▸ `:``,b=u.dequeueCount?` <span style="opacity:.5">drawn ${u.dequeueCount}</span>`:``,S=d?`cursor:pointer;color:#f9a8d4`:`color:#f9a8d4`,C=`<div${d?` data-q="${t}"`:``} style="${S}">${g}${c}: ${u.length}${b}</div>`;if(!u.cards.length)return C+`<div style="margin:1px 0 6px 6px;opacity:.5">empty</div>`;let w=m?u.cards:u.cards.slice(0,INLINE_THRESHOLD),T=u.length-w.length,E=`<ol style="margin:2px 0 ${d?2:6}px 0;padding-left:20px">`+w.map(t=>`<li style="white-space:nowrap">${esc(t)}</li>`).join(``)+`</ol>`;if(d){let c=m?`▾ show less`:`\u2026 +${T} more`;E+=`<div data-q="${t}" style="cursor:pointer;margin:0 0 6px 20px;opacity:.6">${c}</div>`}return C+E}function outcomeGlyph(t){return t===!0?`<span style="color:#86efac">✓</span>`:t===!1?`<span style="color:#fca5a5">✗</span>`:`<span style="opacity:.5">·</span>`}function drawnHtml(t,c){let u=c.length>INLINE_THRESHOLD,d=u&&expanded[t],m=u?expanded[t]?`▾ `:`▸ `:``,g=u?`cursor:pointer;color:#c4b5fd`:`color:#c4b5fd`,b=`<div${u?` data-q="${t}"`:``} style="${g}">${m}drawn: ${c.length}</div>`;if(!c.length)return b+`<div style="margin:1px 0 6px 6px;opacity:.5">none yet</div>`;let S=d?c:c.slice(0,INLINE_THRESHOLD),C=c.length-S.length,w=`<ol style="margin:2px 0 ${u?2:6}px 0;padding-left:20px">${S.map(t=>{let c=t.attempts>1?`<span style="opacity:.5"> \xD7${t.attempts}</span>`:``,u=`<span style="opacity:.45"> ${Math.round(t.timeSpentMs/100)/10}s</span>`;return`<li style="white-space:nowrap">${outcomeGlyph(t.correct)} ${esc(t.cardID)}<span style="opacity:.5"> [${esc(t.status)}]</span>${c}${u}</li>`}).join(``)}</ol>`;if(u){let c=d?`▾ show less`:`\u2026 +${C} more`;w+=`<div data-q="${t}" style="cursor:pointer;margin:0 0 6px 20px;opacity:.6">${c}</div>`}return b+w}function snapshotToText(t){if(!t)return`SessionController — no active session.`;let c=[];c.push(`=== SessionController ===`),c.push(`time ${formatTime(t.secondsRemaining)}`),t.hasCardGuarantee&&c.push(`guarantee: ${t.minCardsGuarantee}`),c.push(`well-indicated left: ${t.wellIndicatedRemaining}`),c.push(`current: ${t.currentCard??`—`}`),c.push(t.replanActive?`replan: ACTIVE [${t.replanLabel??`(auto)`}]`:`replan: idle`),c.push(``),c.push(`sessionHints:`);let u=t.sessionHints,d=[];u&&(u.boostTags&&Object.keys(u.boostTags).length&&d.push(` boost: ${Object.entries(u.boostTags).map(([t,c])=>`${t}\xD7${c}`).join(`, `)}`),u.boostCards&&Object.keys(u.boostCards).length&&d.push(` boostCards: ${Object.entries(u.boostCards).map(([t,c])=>`${t}\xD7${c}`).join(`, `)}`),u.requireCards?.length&&d.push(` require: ${u.requireCards.join(`, `)}`),u.requireTags?.length&&d.push(` requireTags: ${u.requireTags.join(`, `)}`),u.excludeTags?.length&&d.push(` exclude: ${u.excludeTags.join(`, `)}`),u.excludeCards?.length&&d.push(` excludeCards: ${u.excludeCards.join(`, `)}`)),c.push(d.length?d.join(`
|
|
323
|
+
`):` none`);let queueText=(t,u)=>{c.push(``),c.push(`${t}: ${u.length} (drawn ${u.dequeueCount})`),u.cards.forEach((t,u)=>c.push(` ${u+1}. ${t}`))};return queueText(`reviewQ`,t.reviewQ),queueText(`newQ`,t.newQ),queueText(`failedQ`,t.failedQ),c.push(``),c.push(`drawn: ${t.drawnCards.length}`),t.drawnCards.forEach((t,u)=>{let d=t.correct===!0?`✓`:t.correct===!1?`✗`:`·`,m=`${Math.round(t.timeSpentMs/100)/10}s`;c.push(` ${u+1}. ${d} ${t.cardID} [${t.status}] \xD7${t.attempts} ${m}`)}),c.join(`
|
|
324
|
+
`)}function formatTime(t){let c=Math.max(0,Math.round(t));return`${Math.floor(c/60)}:${(c%60).toString().padStart(2,`0`)}`}function esc(t){return t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}function startSessionTracking(t,c,u){clearRunHistory();let d=`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;activeSession={sessionId:d,startTime:new Date,initialQueues:{timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u},presentations:[],queueSnapshots:[]},logger.debug(`[SessionDebugger] Started tracking session: ${d}`)}function recordCardPresentation(t,c,u,d,m,g){if(!activeSession){logger.warn(`[SessionDebugger] No active session to record presentation`);return}activeSession.presentations.push({timestamp:new Date,sequenceNumber:activeSession.presentations.length+1,cardId:t,courseId:c,courseName:u,origin:d,queueSource:m,score:g})}function snapshotQueues(t,c,u,d,m){activeSession&&activeSession.queueSnapshots.push({timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u,reviewQNext3:d,newQNext3:m})}function endSessionTracking(){activeSession&&(activeSession.endTime=new Date,sessionHistory.unshift(activeSession),sessionHistory.length>MAX_HISTORY&&sessionHistory.pop(),logger.debug(`[SessionDebugger] Ended session: ${activeSession.sessionId}`),activeSession=null)}function showCurrentQueue(){if(!activeSession){logger.info(`[Session Debug] No active session.`);return}let t=activeSession.queueSnapshots[activeSession.queueSnapshots.length-1]||activeSession.initialQueues;console.group(`📊 Current Queue State`),logger.info(`Review Queue: ${t.reviewQLength} cards`),t.reviewQNext3&&t.reviewQNext3.length>0&&logger.info(` Next: ${t.reviewQNext3.join(`, `)}`),logger.info(`New Queue: ${t.newQLength} cards`),t.newQNext3&&t.newQNext3.length>0&&logger.info(` Next: ${t.newQNext3.join(`, `)}`),logger.info(`Failed Queue: ${t.failedQLength} cards`),console.groupEnd()}function showPresentationHistory(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`\u{1F4DC} Session History: ${c.sessionId}`),logger.info(`Started: ${c.startTime.toLocaleTimeString()}`),c.endTime&&logger.info(`Ended: ${c.endTime.toLocaleTimeString()}`),logger.info(`Cards presented: ${c.presentations.length}`),c.presentations.length>0&&console.table(c.presentations.map(t=>({"#":t.sequenceNumber,course:t.courseName||t.courseId.slice(0,8),origin:t.origin,queue:t.queueSource,score:t.score?.toFixed(3)||`-`,time:t.timestamp.toLocaleTimeString()}))),console.groupEnd()}function showInterleaving(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`🔀 Interleaving Analysis`);let u=new Map,d=new Map;if(c.presentations.forEach(t=>{let c=t.courseName||t.courseId;u.set(c,(u.get(c)||0)+1),d.has(c)||d.set(c,{review:0,new:0,failed:0});let m=d.get(c);m[t.origin]++}),logger.info(`Course distribution:`),console.table(Array.from(u.entries()).map(([t,u])=>{let m=d.get(t);return{course:t,total:u,reviews:m.review,new:m.new,failed:m.failed,percentage:(u/c.presentations.length*100).toFixed(1)+`%`}})),c.presentations.length>0){logger.info(`
|
|
322
325
|
Presentation sequence (first 20):`);let t=c.presentations.slice(0,20).map((t,c)=>`${c+1}. ${t.courseName||t.courseId.slice(0,8)} (${t.origin})`).join(`
|
|
323
326
|
`);logger.info(t)}let m=0,g=1,b=c.presentations[0]?.courseId;for(let t=1;t<c.presentations.length;t++)c.presentations[t].courseId===b?(g++,m=Math.max(m,g)):(b=c.presentations[t].courseId,g=1);m>3&&(logger.info(`
|
|
324
|
-
\u26A0\uFE0F Detected clustering: max ${m} cards from same course in a row`),logger.info(`This suggests cards are sorted by score rather than round-robin by course.`)),console.groupEnd()}function mountSessionDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.session=sessionDebugAPI}var import___vite_browser_external,import___vite_browser_external$1,import___vite_browser_external$2,import_browser_ponyfill,import_browser_ponyfill$1,import_browser,_SessionController2,__defProp,__getOwnPropNames,__glob,__esm,__export,init_adminDB,init_classroomDB,init_SyncStrategy,isDevelopment,logger,init_logger,GuestUsername,log,DocType,DocTypePrefixes,init_types_legacy,init_util,pouchdb_setup_default,init_pouchdb_setup,init_dataDirectory,REVIEW_TIME_FORMAT,log2,init_userDBHelpers,Loggable,init_Loggable,UpdateQueue,init_updateQueue,UsrCrsData,init_user_course_relDB,CLIENT_CACHE,init_clientCache,AlreadyTaggedErr,init_courseAPI,courseLookupDBTitle,CourseLookup,init_courseLookupDB,PipelineDebugger_exports,_activePipeline,MAX_RUNS,runHistory,DISCARDED_KEEP_TOP,_uiContainer,_selectedRunIndex,_cardSearchQuery,pipelineDebugAPI,init_PipelineDebugger,CompositeGenerator_exports,AggregationMode,DEFAULT_AGGREGATION_MODE,FREQUENCY_BOOST_FACTOR,CompositeGenerator,init_CompositeGenerator,elo_exports,ELONavigator,init_elo,generators_exports,init_generators,prescribed_exports,DEFAULT_FRESHNESS_WINDOW,DEFAULT_MAX_DIRECT_PER_RUN,DEFAULT_MAX_SUPPORT_PER_RUN,DEFAULT_HIERARCHY_DEPTH,DEFAULT_MIN_COUNT,BASE_TARGET_SCORE,BASE_SUPPORT_SCORE,DISCOVERED_SUPPORT_SCORE,MAX_TARGET_MULTIPLIER,MAX_SUPPORT_MULTIPLIER,PRESCRIBED_DEBUG_VERSION,PrescribedCardsGenerator,init_prescribed,srs_exports,DEFAULT_HEALTHY_BACKLOG,MAX_BACKLOG_PRESSURE,SRSNavigator,init_srs,types_exports,init_types,globImport_generators,init_,DEFAULT_LEARNABLE_WEIGHT,init_contentNavigationStrategy,WeightedFilter_exports,WeightedFilter,init_WeightedFilter,eloDistance_exports,DEFAULT_HALF_LIFE,DEFAULT_MIN_MULTIPLIER,DEFAULT_MAX_MULTIPLIER,init_eloDistance,hierarchyDefinition_exports,DEFAULT_MIN_COUNT2,HierarchyDefinitionNavigator,init_hierarchyDefinition,userTagPreference_exports,UserTagPreferenceFilter,init_userTagPreference,filters_exports,init_filters,inferredPreferenceStub_exports,INFERRED_PREFERENCE_NAVIGATOR_STUB,init_inferredPreferenceStub,interferenceMitigator_exports,DEFAULT_MIN_COUNT3,DEFAULT_MIN_ELAPSED_DAYS,DEFAULT_INTERFERENCE_DECAY,InterferenceMitigatorNavigator,init_interferenceMitigator,relativePriority_exports,DEFAULT_PRIORITY,DEFAULT_PRIORITY_INFLUENCE,DEFAULT_COMBINE_MODE,RelativePriorityNavigator,init_relativePriority,types_exports2,init_types2,userGoalStub_exports,USER_GOAL_NAVIGATOR_STUB,init_userGoalStub,globImport_filters,init_2,init_gradient,MIN_OBSERVATIONS_FOR_UPDATE,LEARNING_RATE,MAX_WEIGHT_DELTA,MIN_R_SQUARED_FOR_GRADIENT,FLAT_GRADIENT_THRESHOLD,MAX_HISTORY_LENGTH,init_learning,init_signal,init_recording,MIN_SPREAD,MAX_SPREAD,MIN_WEIGHT,MAX_WEIGHT,init_orchestration,Pipeline_exports,VERBOSE_RESULTS,Pipeline,init_Pipeline,defaults_exports,init_defaults,PipelineAssembler_exports,PipelineAssembler,init_PipelineAssembler,globImport,init_3,navigators_exports,navigatorRegistry,Navigators,NavigatorRole,NavigatorRoles,ContentNavigator,init_navigators,CoursesDB,CourseDB,init_courseDB,classroomLookupDBTitle,CLASSROOM_CONFIG,ClassroomDBBase,StudentClassroomDB,TeacherClassroomDB,ClassroomLookupDB,init_classroomDB2,AdminDB,init_adminDB2,CourseSyncService_exports,DEFAULT_REPLICATION,CourseSyncService,init_CourseSyncService,init_auth,CouchDBSyncStrategy_exports,log3,CouchDBSyncStrategy,init_CouchDBSyncStrategy,isBrowser,GUEST_LOCAL_DB,localUserDB,pouchDBincludeCredentialsConfig,REVIEW_TIME_FORMAT2,init_couch,log4,BaseUser,userCoursesDoc,userClassroomsDoc,init_BaseUserDB,init_common,PouchDataLayerProvider_exports,CouchDataLayerProvider,init_PouchDataLayerProvider,pathUtils,nodeFS,StaticDataUnpacker,init_StaticDataUnpacker,StaticCourseDB,init_courseDB2,StaticCoursesDB,init_coursesDB,NoOpSyncStrategy,init_NoOpSyncStrategy,StaticDataLayerProvider_exports,StaticDataLayerProvider,init_StaticDataLayerProvider,NOT_SET,ENV,dataLayerInstance,init_factory,TagFilteredContentSource,init_TagFilteredContentSource,init_contentSource,init_courseDB3,init_dataLayerProvider,init_userDB,init_interfaces,init_user,init_strategyState,init_userOutcome,init_cardProcessor,init_types3,init_bulkImport,userDBDebugAPI,init_UserDBDebugger,init_core,duration,SrsService,EloService,ResponseProcessor,CardHydrationService,ItemQueue,CouchDBToStaticPacker,DEFAULT_MIGRATION_OPTIONS,FileSystemError,nodeFS2,nodeFS3,nodePath,StaticToCouchDBMigrator,QuotaRoundRobinMixer,MAX_RUNS2,runHistory2,mixerDebugAPI,activeController,OVERLAY_ID,POLL_MS,INLINE_THRESHOLD,SPINNER_FRAMES,spinnerFrame,overlayEl,pollHandle,expanded,activeSession,sessionHistory,MAX_HISTORY,sessionDebugAPI,SessionController,init_dist=__esmMin((()=>{init_defineProperty(),init_index_browser_es$5(),init_index_browser_es(),init_index_es(),import___vite_browser_external=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$1=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$2=__toESM$2(require___vite_browser_external(),1),init_moment(),init_dist$1(),init_esm_browser(),import_browser_ponyfill=__toESM$2(require_browser_ponyfill(),1),import_browser_ponyfill$1=__toESM$2(require_browser_ponyfill(),1),import_browser=__toESM$2(require_browser(),1),__defProp=Object.defineProperty,__getOwnPropNames=Object.getOwnPropertyNames,__glob=t=>c=>{var u=t[c];if(u)return u();throw Error(`Module not found in bundle: `+c)},__esm=(t,c)=>function __init(){return t&&(c=(0,t[__getOwnPropNames(t)[0]])(t=0)),c},__export=(t,c)=>{for(var u in c)__defProp(t,u,{get:c[u],enumerable:!0})},init_adminDB=__esm({"src/core/interfaces/adminDB.ts"(){"use strict";}}),init_classroomDB=__esm({"src/core/interfaces/classroomDB.ts"(){"use strict";}}),init_SyncStrategy=__esm({"src/impl/common/SyncStrategy.ts"(){"use strict";}}),init_logger=__esm({"src/util/logger.ts"(){"use strict";isDevelopment=typeof process<`u`&&process.env.NODE_ENV===`development`,logger={debug:(t,...c)=>{isDevelopment&&console.debug(`[DB:DEBUG] ${t}`,...c)},info:(t,...c)=>{console.info(`[DB:INFO] ${t}`,...c)},warn:(t,...c)=>{console.warn(`[DB:WARN] ${t}`,...c)},error:(t,...c)=>{console.error(`[DB:ERROR] ${t}`,...c)},log:(t,...c)=>{isDevelopment&&console.log(`[DB:LOG] ${t}`,...c)}}}}),init_types_legacy=__esm({"src/core/types/types-legacy.ts"(){"use strict";init_logger(),GuestUsername=`sk-guest-`,log=t=>{logger.log(t)},DocType=(t=>(t.DISPLAYABLE_DATA=`DISPLAYABLE_DATA`,t.CARD=`CARD`,t.DATASHAPE=`DATASHAPE`,t.QUESTIONTYPE=`QUESTION`,t.VIEW=`VIEW`,t.PEDAGOGY=`PEDAGOGY`,t.CARDRECORD=`CARDRECORD`,t.SCHEDULED_CARD=`SCHEDULED_CARD`,t.TAG=`TAG`,t.NAVIGATION_STRATEGY=`NAVIGATION_STRATEGY`,t.STRATEGY_STATE=`STRATEGY_STATE`,t.USER_OUTCOME=`USER_OUTCOME`,t.STRATEGY_LEARNING_STATE=`STRATEGY_LEARNING_STATE`,t))(DocType||{}),DocTypePrefixes={CARD:`c`,DISPLAYABLE_DATA:`dd`,TAG:`TAG`,CARDRECORD:`cardH`,SCHEDULED_CARD:`card_review_`,DATASHAPE:`DATASHAPE`,QUESTION:`QUESTION`,VIEW:`VIEW`,PEDAGOGY:`PEDAGOGY`,NAVIGATION_STRATEGY:`NAVIGATION_STRATEGY`,STRATEGY_STATE:`STRATEGY_STATE`,USER_OUTCOME:`USER_OUTCOME`,STRATEGY_LEARNING_STATE:`STRATEGY_LEARNING_STATE`}}}),init_util=__esm({"src/core/util/index.ts"(){"use strict";init_types_legacy()}}),init_pouchdb_setup=__esm({"src/impl/couch/pouchdb-setup.ts"(){"use strict";PouchDB.plugin(plugin$1),PouchDB.plugin(plugin),PouchDB.debug!==void 0&&PouchDB.debug.disable(),PouchDB.defaults({}),pouchdb_setup_default=PouchDB}}),init_dataDirectory=__esm({"src/util/dataDirectory.ts"(){"use strict";init_logger(),init_factory()}}),init_userDBHelpers=__esm({"src/impl/common/userDBHelpers.ts"(){"use strict";init_core(),init_logger(),init_pouchdb_setup(),init_dataDirectory(),REVIEW_TIME_FORMAT=`YYYY-MM-DD--kk:mm:ss-SSS`,log2=t=>{logger.info(t)}}}),init_Loggable=__esm({"src/util/Loggable.ts"(){"use strict";Loggable=class{log(...t){console.log(`LOG-${this._className}@${new Date}:`,...t)}error(...t){console.error(`ERROR-${this._className}@${new Date}:`,...t)}}}}),init_updateQueue=__esm({"src/impl/couch/updateQueue.ts"(){"use strict";init_Loggable(),init_logger(),UpdateQueue=class extends Loggable{update(t,c){return logger.debug(`Update requested on doc: ${t}`),this.pendingUpdates[t]?this.pendingUpdates[t].push(c):this.pendingUpdates[t]=[c],this.applyUpdates(t)}constructor(t,c){super(),_defineProperty$2(this,`_className`,`UpdateQueue`),_defineProperty$2(this,`pendingUpdates`,{}),_defineProperty$2(this,`inprogressUpdates`,{}),_defineProperty$2(this,`readDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),this.readDB=t,this.writeDB=c||t,logger.debug(`UpdateQ initialized...`),this.readDB.info().then(t=>{logger.debug(`db info: ${JSON.stringify(t)}`)})}async applyUpdates(t){if(logger.debug(`Applying updates on doc: ${t}`),this.inprogressUpdates[t]){for(;this.inprogressUpdates[t];)await new Promise(t=>setTimeout(t,Math.random()*50));return this.applyUpdates(t)}else if(this.pendingUpdates[t]&&this.pendingUpdates[t].length>0){this.inprogressUpdates[t]=!0;let c=5;for(let c=0;c<5;c++)try{let c={...await this.readDB.get(t)},u=[...this.pendingUpdates[t]];for(let t of u)c=typeof t==`function`?{...c,...t(c)}:{...c,...t};if(await this.writeDB.put(c),this.pendingUpdates[t].splice(0,u.length),this.pendingUpdates[t].length===0)this.inprogressUpdates[t]=!1,delete this.inprogressUpdates[t];else return this.applyUpdates(t);return c}catch(u){if(u.name===`conflict`&&c<4)logger.warn(`Conflict on update for doc ${t}, retry #${c+1}`),await new Promise(t=>setTimeout(t,50*Math.random()));else if(u.name===`not_found`&&c===0)throw logger.warn(`Update failed for ${t} - does not exist. Throwing to caller.`),delete this.inprogressUpdates[t],u;else throw delete this.inprogressUpdates[t],this.pendingUpdates[t]&&delete this.pendingUpdates[t],logger.error(`Error on attemped update (retry ${c}): ${JSON.stringify(u)}`),u}throw Error(`UpdateQueue failed for doc ${t} after 5 retries.`)}else throw Error(`Empty Updates Queue Triggered`)}}}}),init_user_course_relDB=__esm({"src/impl/couch/user-course-relDB.ts"(){"use strict";init_logger(),UsrCrsData=class{constructor(t,c){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`_courseId`,void 0),this.user=t,this._courseId=c}async getReviewsForcast(t){let c=hooks.utc().add(t,`days`);return this.getReviewstoDate(c)}async getPendingReviews(){let t=hooks.utc();return this.getReviewstoDate(t)}async getScheduledReviewCount(){return(await this.getPendingReviews()).length}async getCourseSettings(){let t=(await this.user.getCourseRegistrationsDoc()).courses.find(t=>t.courseID===this._courseId);return t&&t.settings?t.settings:(logger.warn(`no settings found during lookup on course ${this._courseId}`),{})}updateCourseSettings(t){`updateCourseSettings`in this.user&&this.user.updateCourseSettings(this._courseId,t)}async getStrategyState(t){return this.user.getStrategyState(this._courseId,t)}async putStrategyState(t,c){return this.user.putStrategyState(this._courseId,t,c)}async deleteStrategyState(t){return this.user.deleteStrategyState(this._courseId,t)}async getReviewstoDate(t){let c=await this.user.getPendingReviews(this._courseId);return logger.debug(`Fetching ${this.user.getUsername()}'s scheduled reviews for course ${this._courseId}.`),c.filter(c=>{let u=hooks.utc(c.reviewTime);return t.isAfter(u)})}}}}),init_clientCache=__esm({"src/impl/couch/clientCache.ts"(){"use strict";CLIENT_CACHE={}}}),init_courseAPI=__esm({"src/impl/couch/courseAPI.ts"(){"use strict";init_pouchdb_setup(),init_couch(),init_factory(),init_courseDB(),init_types_legacy(),init_common(),init_logger(),AlreadyTaggedErr=class extends Error{constructor(t){super(t),this.name=`AlreadyTaggedErr`}}}}),init_courseLookupDB=__esm({"src/impl/couch/courseLookupDB.ts"(){"use strict";var t;init_pouchdb_setup(),init_factory(),init_logger(),courseLookupDBTitle=`coursedb-lookup`,logger.debug(`COURSELOOKUP FILE RUNNING`),CourseLookup=(t=class _CourseLookup{static get _db(){if(this._dbInstance)return this._dbInstance;if(ENV.COUCHDB_SERVER_URL===`NOT_SET`||!ENV.COUCHDB_SERVER_URL)throw Error(`CourseLookup.db: COUCHDB_SERVER_URL is not set. Ensure initializeDataLayer has been called with valid configuration.`);if(ENV.COUCHDB_SERVER_PROTOCOL===`NOT_SET`||!ENV.COUCHDB_SERVER_PROTOCOL)throw Error(`CourseLookup.db: COUCHDB_SERVER_PROTOCOL is not set. Ensure initializeDataLayer has been called with valid configuration.`);let t=`${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}/${courseLookupDBTitle}`,c={};ENV.COUCHDB_USERNAME&&ENV.COUCHDB_PASSWORD?(c.auth={username:ENV.COUCHDB_USERNAME,password:ENV.COUCHDB_PASSWORD},logger.info(`CourseLookup: Connecting to ${t} with authentication.`)):logger.info(`CourseLookup: Connecting to ${t} without authentication.`);try{return this._dbInstance=new pouchdb_setup_default(t,c),logger.info(`CourseLookup: Database instance created for ${courseLookupDBTitle}.`),this._dbInstance}catch(c){throw logger.error(`CourseLookup: Failed to create PouchDB instance for ${t}`,c),this._dbInstance=null,Error(`CourseLookup: Failed to initialize database connection: ${c instanceof Error?c.message:String(c)}`)}}static async add(t){return(await _CourseLookup._db.post({name:t})).id}static async addWithId(t,c,u){let d={_id:t,name:c};u&&(d.disambiguator=u),await _CourseLookup._db.put(d)}static async delete(t){let c=await _CourseLookup._db.get(t);return await _CourseLookup._db.remove(c)}static async allCourseWare(){return(await _CourseLookup._db.allDocs({include_docs:!0})).rows.map(t=>t.doc)}static async updateDisambiguator(t,c){let u=await _CourseLookup._db.get(t);return u.disambiguator=c,await _CourseLookup._db.put(u)}static async isCourse(t){try{return await _CourseLookup._db.get(t),!0}catch(t){return logger.info(`Courselookup failed:`,t),!1}}},_defineProperty$2(t,`_dbInstance`,null),t)}}),PipelineDebugger_exports={},__export(PipelineDebugger_exports,{buildRunReport:()=>buildRunReport,captureRun:()=>captureRun,clearRunHistory:()=>clearRunHistory,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerPipelineForDebug:()=>registerPipelineForDebug}),init_PipelineDebugger=__esm({"src/core/navigators/PipelineDebugger.ts"(){"use strict";init_navigators(),init_logger(),_activePipeline=null,MAX_RUNS=10,runHistory=[],DISCARDED_KEEP_TOP=25,_uiContainer=null,_selectedRunIndex=null,_cardSearchQuery=``,pipelineDebugAPI={get runs(){return[...runHistory]},showRun(t=0){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c;if(typeof t==`number`){if(c=runHistory[t],!c){logger.info(`[Pipeline Debug] No run found at index ${t}. History length: ${runHistory.length}`);return}}else if(c=runHistory.find(c=>c.runId.endsWith(t)),!c){logger.info(`[Pipeline Debug] No run found matching ID '${t}'.`);return}printRunSummary(c)},showLastRun(){this.showRun(0)},showCard(t){for(let c of runHistory){let u=c.cards.find(c=>c.cardId===t);if(u){console.group(`\u{1F3B4} Card: ${t}`),logger.info(`Course: ${u.courseId}`),logger.info(`Origin: ${u.origin}`),logger.info(`Card ELO: ${u.cardElo??`unknown`} | User ELO: ${c.userElo??`unknown`}`),logger.info(`Final score: ${u.finalScore.toFixed(3)}`),logger.info(`Selected: ${u.selected?`Yes ✅`:`No ❌`}`),u.tags&&u.tags.length>0&&logger.info(`Tags (${u.tags.length}): ${u.tags.join(`, `)}`),logger.info(`Provenance:`),logger.info(formatProvenance(u.provenance)),console.groupEnd();return}}let c=runHistory.filter(t=>t.discardedTail&&t.discardedTail.count>0);c.length>0?logger.info(`[Pipeline Debug] Card '${t}' not found in retained cards. ${c.length} run(s) have discarded tails that were not retained \u2014 the card may have been a low-score candidate. See run.discardedTail for ranges.`):logger.info(`[Pipeline Debug] Card '${t}' not found in recent runs.`)},explainReviews(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.group(`📋 Review Selection Analysis`);for(let t of runHistory){console.group(`Run: ${t.courseId} @ ${t.timestamp.toLocaleTimeString()}`);let c=t.cards.filter(t=>t.origin===`review`),u=c.filter(t=>t.selected);if(c.length===0)logger.info(`❌ No reviews were generated. Check SRS logs for why.`);else if(u.length===0){logger.info(`\u26A0\uFE0F ${c.length} reviews generated but none selected.`),logger.info(`Possible reasons:`);let u=Math.max(...t.cards.filter(t=>t.origin===`new`&&t.selected).map(t=>t.finalScore),0),d=Math.max(...c.map(t=>t.finalScore),0);d<u&&logger.info(` - New cards scored higher (top new: ${u.toFixed(2)}, top review: ${d.toFixed(2)})`);let m=c.sort((t,c)=>c.finalScore-t.finalScore)[0];m&&(logger.info(` - Top review score: ${m.finalScore.toFixed(3)}`),logger.info(` - Its provenance:`),logger.info(formatProvenance(m.provenance)))}else{logger.info(`\u2705 ${u.length}/${c.length} reviews selected.`),logger.info(`Top selected review:`);let t=u.sort((t,c)=>c.finalScore-t.finalScore)[0];logger.info(formatProvenance(t.provenance))}console.groupEnd()}console.groupEnd()},showPrescribed(t){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c=runHistory[0],u=c.cards.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`));if(console.group(`\u{1F9ED} Prescribed Debug (${c.courseId})`),u.length===0){logger.info(`No prescribed-generated cards were present in the most recent run.`),console.groupEnd();return}let d=u.map(t=>{let c=t.provenance.find(t=>t.strategy===`prescribed`)?.reason??``,u=c.match(/group=([^;]+)/)?.[1]??`unknown`,d=c.match(/mode=([^;]+)/)?.[1]??`unknown`,m=c.match(/blocked=([^;]+)/)?.[1]??`unknown`,g=c.match(/blockedTargets=([^;]+)/)?.[1]??`none`,b=c.match(/supportCard=([^;]+)/)?.[1]??`none`,S=c.match(/supportTags=([^;]+)/)?.[1]??`none`,C=c.match(/multiplier=([^;]+)/)?.[1]??`unknown`;return{group:u,mode:d,supportSource:d===`discovered-support`?`discovered`:d===`support`?`authored`:`n/a`,cardId:t.cardId,selected:t.selected?`yes`:`no`,finalScore:t.finalScore.toFixed(3),blocked:m,blockedTargets:g,supportCard:b,supportTags:S,multiplier:C}}).filter(c=>!t||c.group===t).sort((t,c)=>Number(c.finalScore)-Number(t.finalScore));if(d.length===0){logger.info(`[Pipeline Debug] No prescribed cards matched group '${t}' in the most recent run.`),console.groupEnd();return}console.table(d);let m=d.filter(t=>t.selected===`yes`),g=new Set,b=new Set,S=new Set,C=new Set;for(let t of d)t.blockedTargets&&t.blockedTargets!==`none`&&t.blockedTargets.split(`|`).filter(Boolean).forEach(t=>g.add(t)),t.supportTags&&t.supportTags!==`none`&&t.supportTags.split(`|`).filter(Boolean).forEach(t=>b.add(t)),t.supportCard&&t.supportCard!==`none`&&(t.supportSource===`discovered`?C.add(t.supportCard):t.supportSource===`authored`&&S.add(t.supportCard));logger.info(`Prescribed cards in run: ${d.length}`),logger.info(`Selected prescribed cards: ${m.length}`),logger.info(`Blocked prescribed targets referenced: ${g.size>0?[...g].join(`, `):`none`}`),logger.info(`Resolved support tags referenced: ${b.size>0?[...b].join(`, `):`none`}`),logger.info(`Authored support cards emitted: ${S.size>0?[...S].join(`, `):`none`}`),logger.info(`Discovered support cards emitted: ${C.size>0?[...C].join(`, `):`none`}`),console.groupEnd()},listRuns(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.table(runHistory.map(t=>({id:t.runId.slice(-8),time:t.timestamp.toLocaleTimeString(),course:t.courseName||t.courseId.slice(0,8),generated:t.generatedCount,selected:t.finalCount,new:t.newSelected,reviews:t.reviewsSelected})))},export(){let t=JSON.stringify(runHistory,null,2);return logger.info(`[Pipeline Debug] Run history exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.pipeline.export())`),t},clear(){runHistory.length=0,logger.info(`[Pipeline Debug] Run history cleared.`)},showRegistry(){let t=getRegisteredNavigatorNames();if(t.length===0){logger.info(`[Pipeline Debug] Navigator registry is empty.`);return}console.group(`📦 Navigator Registry`),console.table(t.map(t=>{let c=getRegisteredNavigatorRole(t),u=NavigatorRoles[t];return{name:t,role:u||c||`⚠️ NONE`,source:u?`built-in`:c?`consumer`:`unclassified`,isGenerator:isGenerator(t),isFilter:isFilter(t)}})),console.groupEnd()},showStrategies(){if(this.showRegistry(),runHistory.length===0){logger.info(`[Pipeline Debug] No pipeline runs captured yet — cannot show strategy doc mapping.`);return}let t=runHistory[0];if(console.group(`🔌 Pipeline Strategy Mapping (last run)`),logger.info(`Generator: ${t.generatorName}`),t.generators&&t.generators.length>0)for(let c of t.generators)logger.info(` \u{1F4E5} ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews)`);if(t.filters.length>0){logger.info(`Filters:`);for(let c of t.filters)logger.info(` \u{1F538} ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`)}else logger.info(`Filters: (none)`);console.groupEnd()},async diagnoseCardSpace(t){return _activePipeline?_activePipeline.diagnoseCardSpace({threshold:t}):(logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`),null)},async showTagElo(t){if(!_activePipeline){logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`);return}let c=await _activePipeline.getTagEloStatus(t),u=Object.entries(c).sort(([t],[c])=>t.localeCompare(c));if(u.length===0){logger.info(`[Pipeline Debug] No tag ELO data found${t?` for pattern: ${t}`:``}.`);return}console.table(Object.fromEntries(u.map(([t,c])=>[t,{score:Math.round(c.score),count:c.count}])))},ui(){if(_uiContainer){document.body.removeChild(_uiContainer),_uiContainer=null;return}_uiContainer=document.createElement(`div`),_uiContainer.id=`sk-pipeline-debugger`,document.body.appendChild(_uiContainer),_selectedRunIndex===null&&runHistory.length>0&&(_selectedRunIndex=0),renderUI()},_selectRun(t){_selectedRunIndex=t,renderUI()},_setSearch(t){_cardSearchQuery=t,renderUI()},_copyConfig(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d={runId:u.runId,timestamp:u.timestamp.toISOString(),courseId:u.courseId,courseName:u.courseName,hints:u.hints??null};copyTextToClipboard(JSON.stringify(d,null,2),c)},_copyResults(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d=u.cards.filter(t=>t.selected).sort((t,c)=>c.finalScore-t.finalScore).map(t=>({cardId:t.cardId,generator:t.generator,origin:t.origin,score:Number(t.finalScore.toFixed(3)),topReason:t.provenance[0]?.reason??``})),m={runId:u.runId,label:u.hints?._label??null,finalCount:u.finalCount,newSelected:u.newSelected,reviewsSelected:u.reviewsSelected,selected:d};copyTextToClipboard(JSON.stringify(m,null,2),c)},help(){logger.info(`
|
|
327
|
+
\u26A0\uFE0F Detected clustering: max ${m} cards from same course in a row`),logger.info(`This suggests cards are sorted by score rather than round-robin by course.`)),console.groupEnd()}function mountSessionDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.session=sessionDebugAPI}var import___vite_browser_external,import___vite_browser_external$1,import___vite_browser_external$2,import_browser_ponyfill,import_browser_ponyfill$1,import_browser,_SessionController2,__defProp,__getOwnPropNames,__glob,__esm,__export,init_adminDB,init_classroomDB,init_SyncStrategy,isDevelopment,logger,init_logger,GuestUsername,log,DocType,DocTypePrefixes,init_types_legacy,init_util,pouchdb_setup_default,init_pouchdb_setup,init_dataDirectory,REVIEW_TIME_FORMAT,log2,init_userDBHelpers,Loggable,init_Loggable,UpdateQueue,init_updateQueue,UsrCrsData,init_user_course_relDB,CLIENT_CACHE,init_clientCache,AlreadyTaggedErr,init_courseAPI,courseLookupDBTitle,CourseLookup,init_courseLookupDB,PipelineDebugger_exports,_activePipeline,MAX_RUNS,runHistory,DISCARDED_KEEP_TOP,_uiContainer,_selectedRunIndex,_cardSearchQuery,pipelineDebugAPI,init_PipelineDebugger,CompositeGenerator_exports,AggregationMode,DEFAULT_AGGREGATION_MODE,FREQUENCY_BOOST_FACTOR,CompositeGenerator,init_CompositeGenerator,elo_exports,ELO_RELEVANCE_SIGMA,ELONavigator,init_elo,generators_exports,init_generators,prescribed_exports,DEFAULT_FRESHNESS_WINDOW,DEFAULT_MAX_DIRECT_PER_RUN,DEFAULT_MAX_SUPPORT_PER_RUN,DEFAULT_HIERARCHY_DEPTH,DEFAULT_MIN_COUNT,BASE_TARGET_SCORE,BASE_SUPPORT_SCORE,DISCOVERED_SUPPORT_SCORE,MAX_TARGET_MULTIPLIER,MAX_SUPPORT_MULTIPLIER,PRESCRIBED_DEBUG_VERSION,PrescribedCardsGenerator,init_prescribed,srs_exports,DEFAULT_HEALTHY_BACKLOG,MAX_BACKLOG_PRESSURE,SRSNavigator,init_srs,types_exports,init_types,globImport_generators,init_,DEFAULT_LEARNABLE_WEIGHT,init_contentNavigationStrategy,WeightedFilter_exports,WeightedFilter,init_WeightedFilter,eloDistance_exports,DEFAULT_HALF_LIFE,DEFAULT_MIN_MULTIPLIER,DEFAULT_MAX_MULTIPLIER,init_eloDistance,hierarchyDefinition_exports,DEFAULT_MIN_COUNT2,HierarchyDefinitionNavigator,init_hierarchyDefinition,userTagPreference_exports,UserTagPreferenceFilter,init_userTagPreference,filters_exports,init_filters,inferredPreferenceStub_exports,INFERRED_PREFERENCE_NAVIGATOR_STUB,init_inferredPreferenceStub,interferenceMitigator_exports,DEFAULT_MIN_COUNT3,DEFAULT_MIN_ELAPSED_DAYS,DEFAULT_INTERFERENCE_DECAY,InterferenceMitigatorNavigator,init_interferenceMitigator,relativePriority_exports,DEFAULT_PRIORITY,DEFAULT_PRIORITY_INFLUENCE,DEFAULT_COMBINE_MODE,RelativePriorityNavigator,init_relativePriority,types_exports2,init_types2,userGoalStub_exports,USER_GOAL_NAVIGATOR_STUB,init_userGoalStub,globImport_filters,init_2,init_gradient,MIN_OBSERVATIONS_FOR_UPDATE,LEARNING_RATE,MAX_WEIGHT_DELTA,MIN_R_SQUARED_FOR_GRADIENT,FLAT_GRADIENT_THRESHOLD,MAX_HISTORY_LENGTH,init_learning,init_signal,init_recording,MIN_SPREAD,MAX_SPREAD,MIN_WEIGHT,MAX_WEIGHT,init_orchestration,Pipeline_exports,VERBOSE_RESULTS,Pipeline,init_Pipeline,defaults_exports,init_defaults,PipelineAssembler_exports,PipelineAssembler,init_PipelineAssembler,globImport,init_3,navigators_exports,navigatorRegistry,Navigators,NavigatorRole,NavigatorRoles,ContentNavigator,init_navigators,CoursesDB,CourseDB,init_courseDB,classroomLookupDBTitle,CLASSROOM_CONFIG,ClassroomDBBase,StudentClassroomDB,TeacherClassroomDB,ClassroomLookupDB,init_classroomDB2,AdminDB,init_adminDB2,CourseSyncService_exports,DEFAULT_REPLICATION,CourseSyncService,init_CourseSyncService,init_auth,CouchDBSyncStrategy_exports,log3,CouchDBSyncStrategy,init_CouchDBSyncStrategy,isBrowser,GUEST_LOCAL_DB,localUserDB,pouchDBincludeCredentialsConfig,REVIEW_TIME_FORMAT2,init_couch,log4,BaseUser,userCoursesDoc,userClassroomsDoc,init_BaseUserDB,init_common,PouchDataLayerProvider_exports,CouchDataLayerProvider,init_PouchDataLayerProvider,pathUtils,nodeFS,StaticDataUnpacker,init_StaticDataUnpacker,StaticCourseDB,init_courseDB2,StaticCoursesDB,init_coursesDB,NoOpSyncStrategy,init_NoOpSyncStrategy,StaticDataLayerProvider_exports,StaticDataLayerProvider,init_StaticDataLayerProvider,NOT_SET,ENV,dataLayerInstance,init_factory,TagFilteredContentSource,init_TagFilteredContentSource,init_contentSource,init_courseDB3,init_dataLayerProvider,init_userDB,init_interfaces,init_user,init_strategyState,init_userOutcome,init_cardProcessor,init_types3,init_bulkImport,userDBDebugAPI,init_UserDBDebugger,init_core,duration,SrsService,EloService,ResponseProcessor,CardHydrationService,ItemQueue,CouchDBToStaticPacker,DEFAULT_MIGRATION_OPTIONS,FileSystemError,nodeFS2,nodeFS3,nodePath,StaticToCouchDBMigrator,QuotaRoundRobinMixer,MAX_RUNS2,runHistory2,mixerDebugAPI,activeController,OVERLAY_ID,POLL_MS,INLINE_THRESHOLD,SPINNER_FRAMES,spinnerFrame,overlayEl,pollHandle,lastSnapshot,copyFlashUntil,minified,expanded,activeSession,sessionHistory,MAX_HISTORY,sessionDebugAPI,SessionController,init_dist=__esmMin((()=>{init_defineProperty(),init_index_browser_es$5(),init_index_browser_es(),init_index_es(),import___vite_browser_external=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$1=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$2=__toESM$2(require___vite_browser_external(),1),init_moment(),init_dist$1(),init_esm_browser(),import_browser_ponyfill=__toESM$2(require_browser_ponyfill(),1),import_browser_ponyfill$1=__toESM$2(require_browser_ponyfill(),1),import_browser=__toESM$2(require_browser(),1),__defProp=Object.defineProperty,__getOwnPropNames=Object.getOwnPropertyNames,__glob=t=>c=>{var u=t[c];if(u)return u();throw Error(`Module not found in bundle: `+c)},__esm=(t,c)=>function __init(){return t&&(c=(0,t[__getOwnPropNames(t)[0]])(t=0)),c},__export=(t,c)=>{for(var u in c)__defProp(t,u,{get:c[u],enumerable:!0})},init_adminDB=__esm({"src/core/interfaces/adminDB.ts"(){"use strict";}}),init_classroomDB=__esm({"src/core/interfaces/classroomDB.ts"(){"use strict";}}),init_SyncStrategy=__esm({"src/impl/common/SyncStrategy.ts"(){"use strict";}}),init_logger=__esm({"src/util/logger.ts"(){"use strict";isDevelopment=typeof process<`u`&&process.env.NODE_ENV===`development`,logger={debug:(t,...c)=>{isDevelopment&&console.debug(`[DB:DEBUG] ${t}`,...c)},info:(t,...c)=>{console.info(`[DB:INFO] ${t}`,...c)},warn:(t,...c)=>{console.warn(`[DB:WARN] ${t}`,...c)},error:(t,...c)=>{console.error(`[DB:ERROR] ${t}`,...c)},log:(t,...c)=>{isDevelopment&&console.log(`[DB:LOG] ${t}`,...c)}}}}),init_types_legacy=__esm({"src/core/types/types-legacy.ts"(){"use strict";init_logger(),GuestUsername=`sk-guest-`,log=t=>{logger.log(t)},DocType=(t=>(t.DISPLAYABLE_DATA=`DISPLAYABLE_DATA`,t.CARD=`CARD`,t.DATASHAPE=`DATASHAPE`,t.QUESTIONTYPE=`QUESTION`,t.VIEW=`VIEW`,t.PEDAGOGY=`PEDAGOGY`,t.CARDRECORD=`CARDRECORD`,t.SCHEDULED_CARD=`SCHEDULED_CARD`,t.TAG=`TAG`,t.NAVIGATION_STRATEGY=`NAVIGATION_STRATEGY`,t.STRATEGY_STATE=`STRATEGY_STATE`,t.USER_OUTCOME=`USER_OUTCOME`,t.STRATEGY_LEARNING_STATE=`STRATEGY_LEARNING_STATE`,t))(DocType||{}),DocTypePrefixes={CARD:`c`,DISPLAYABLE_DATA:`dd`,TAG:`TAG`,CARDRECORD:`cardH`,SCHEDULED_CARD:`card_review_`,DATASHAPE:`DATASHAPE`,QUESTION:`QUESTION`,VIEW:`VIEW`,PEDAGOGY:`PEDAGOGY`,NAVIGATION_STRATEGY:`NAVIGATION_STRATEGY`,STRATEGY_STATE:`STRATEGY_STATE`,USER_OUTCOME:`USER_OUTCOME`,STRATEGY_LEARNING_STATE:`STRATEGY_LEARNING_STATE`}}}),init_util=__esm({"src/core/util/index.ts"(){"use strict";init_types_legacy()}}),init_pouchdb_setup=__esm({"src/impl/couch/pouchdb-setup.ts"(){"use strict";PouchDB.plugin(plugin$1),PouchDB.plugin(plugin),PouchDB.debug!==void 0&&PouchDB.debug.disable(),PouchDB.defaults({}),pouchdb_setup_default=PouchDB}}),init_dataDirectory=__esm({"src/util/dataDirectory.ts"(){"use strict";init_logger(),init_factory()}}),init_userDBHelpers=__esm({"src/impl/common/userDBHelpers.ts"(){"use strict";init_core(),init_logger(),init_pouchdb_setup(),init_dataDirectory(),REVIEW_TIME_FORMAT=`YYYY-MM-DD--kk:mm:ss-SSS`,log2=t=>{logger.info(t)}}}),init_Loggable=__esm({"src/util/Loggable.ts"(){"use strict";Loggable=class{log(...t){console.log(`LOG-${this._className}@${new Date}:`,...t)}error(...t){console.error(`ERROR-${this._className}@${new Date}:`,...t)}}}}),init_updateQueue=__esm({"src/impl/couch/updateQueue.ts"(){"use strict";init_Loggable(),init_logger(),UpdateQueue=class extends Loggable{update(t,c){return logger.debug(`Update requested on doc: ${t}`),this.pendingUpdates[t]?this.pendingUpdates[t].push(c):this.pendingUpdates[t]=[c],this.applyUpdates(t)}constructor(t,c){super(),_defineProperty$2(this,`_className`,`UpdateQueue`),_defineProperty$2(this,`pendingUpdates`,{}),_defineProperty$2(this,`inprogressUpdates`,{}),_defineProperty$2(this,`readDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),this.readDB=t,this.writeDB=c||t,logger.debug(`UpdateQ initialized...`),this.readDB.info().then(t=>{logger.debug(`db info: ${JSON.stringify(t)}`)})}async applyUpdates(t){if(logger.debug(`Applying updates on doc: ${t}`),this.inprogressUpdates[t]){for(;this.inprogressUpdates[t];)await new Promise(t=>setTimeout(t,Math.random()*50));return this.applyUpdates(t)}else if(this.pendingUpdates[t]&&this.pendingUpdates[t].length>0){this.inprogressUpdates[t]=!0;let c=5;for(let c=0;c<5;c++)try{let c={...await this.readDB.get(t)},u=[...this.pendingUpdates[t]];for(let t of u)c=typeof t==`function`?{...c,...t(c)}:{...c,...t};if(await this.writeDB.put(c),this.pendingUpdates[t].splice(0,u.length),this.pendingUpdates[t].length===0)this.inprogressUpdates[t]=!1,delete this.inprogressUpdates[t];else return this.applyUpdates(t);return c}catch(u){if(u.name===`conflict`&&c<4)logger.warn(`Conflict on update for doc ${t}, retry #${c+1}`),await new Promise(t=>setTimeout(t,50*Math.random()));else if(u.name===`not_found`&&c===0)throw logger.warn(`Update failed for ${t} - does not exist. Throwing to caller.`),delete this.inprogressUpdates[t],u;else throw delete this.inprogressUpdates[t],this.pendingUpdates[t]&&delete this.pendingUpdates[t],logger.error(`Error on attemped update (retry ${c}): ${JSON.stringify(u)}`),u}throw Error(`UpdateQueue failed for doc ${t} after 5 retries.`)}else throw Error(`Empty Updates Queue Triggered`)}}}}),init_user_course_relDB=__esm({"src/impl/couch/user-course-relDB.ts"(){"use strict";init_logger(),UsrCrsData=class{constructor(t,c){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`_courseId`,void 0),this.user=t,this._courseId=c}async getReviewsForcast(t){let c=hooks.utc().add(t,`days`);return this.getReviewstoDate(c)}async getPendingReviews(){let t=hooks.utc();return this.getReviewstoDate(t)}async getScheduledReviewCount(){return(await this.getPendingReviews()).length}async getCourseSettings(){let t=(await this.user.getCourseRegistrationsDoc()).courses.find(t=>t.courseID===this._courseId);return t&&t.settings?t.settings:(logger.warn(`no settings found during lookup on course ${this._courseId}`),{})}updateCourseSettings(t){`updateCourseSettings`in this.user&&this.user.updateCourseSettings(this._courseId,t)}async getStrategyState(t){return this.user.getStrategyState(this._courseId,t)}async putStrategyState(t,c){return this.user.putStrategyState(this._courseId,t,c)}async deleteStrategyState(t){return this.user.deleteStrategyState(this._courseId,t)}async getReviewstoDate(t){let c=await this.user.getPendingReviews(this._courseId);return logger.debug(`Fetching ${this.user.getUsername()}'s scheduled reviews for course ${this._courseId}.`),c.filter(c=>{let u=hooks.utc(c.reviewTime);return t.isAfter(u)})}}}}),init_clientCache=__esm({"src/impl/couch/clientCache.ts"(){"use strict";CLIENT_CACHE={}}}),init_courseAPI=__esm({"src/impl/couch/courseAPI.ts"(){"use strict";init_pouchdb_setup(),init_couch(),init_factory(),init_courseDB(),init_types_legacy(),init_common(),init_logger(),AlreadyTaggedErr=class extends Error{constructor(t){super(t),this.name=`AlreadyTaggedErr`}}}}),init_courseLookupDB=__esm({"src/impl/couch/courseLookupDB.ts"(){"use strict";var t;init_pouchdb_setup(),init_factory(),init_logger(),courseLookupDBTitle=`coursedb-lookup`,logger.debug(`COURSELOOKUP FILE RUNNING`),CourseLookup=(t=class _CourseLookup{static get _db(){if(this._dbInstance)return this._dbInstance;if(ENV.COUCHDB_SERVER_URL===`NOT_SET`||!ENV.COUCHDB_SERVER_URL)throw Error(`CourseLookup.db: COUCHDB_SERVER_URL is not set. Ensure initializeDataLayer has been called with valid configuration.`);if(ENV.COUCHDB_SERVER_PROTOCOL===`NOT_SET`||!ENV.COUCHDB_SERVER_PROTOCOL)throw Error(`CourseLookup.db: COUCHDB_SERVER_PROTOCOL is not set. Ensure initializeDataLayer has been called with valid configuration.`);let t=`${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}/${courseLookupDBTitle}`,c={};ENV.COUCHDB_USERNAME&&ENV.COUCHDB_PASSWORD?(c.auth={username:ENV.COUCHDB_USERNAME,password:ENV.COUCHDB_PASSWORD},logger.info(`CourseLookup: Connecting to ${t} with authentication.`)):logger.info(`CourseLookup: Connecting to ${t} without authentication.`);try{return this._dbInstance=new pouchdb_setup_default(t,c),logger.info(`CourseLookup: Database instance created for ${courseLookupDBTitle}.`),this._dbInstance}catch(c){throw logger.error(`CourseLookup: Failed to create PouchDB instance for ${t}`,c),this._dbInstance=null,Error(`CourseLookup: Failed to initialize database connection: ${c instanceof Error?c.message:String(c)}`)}}static async add(t){return(await _CourseLookup._db.post({name:t})).id}static async addWithId(t,c,u){let d={_id:t,name:c};u&&(d.disambiguator=u),await _CourseLookup._db.put(d)}static async delete(t){let c=await _CourseLookup._db.get(t);return await _CourseLookup._db.remove(c)}static async allCourseWare(){return(await _CourseLookup._db.allDocs({include_docs:!0})).rows.map(t=>t.doc)}static async updateDisambiguator(t,c){let u=await _CourseLookup._db.get(t);return u.disambiguator=c,await _CourseLookup._db.put(u)}static async isCourse(t){try{return await _CourseLookup._db.get(t),!0}catch(t){return logger.info(`Courselookup failed:`,t),!1}}},_defineProperty$2(t,`_dbInstance`,null),t)}}),PipelineDebugger_exports={},__export(PipelineDebugger_exports,{buildRunReport:()=>buildRunReport,captureRun:()=>captureRun,clearRunHistory:()=>clearRunHistory,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerPipelineForDebug:()=>registerPipelineForDebug}),init_PipelineDebugger=__esm({"src/core/navigators/PipelineDebugger.ts"(){"use strict";init_navigators(),init_logger(),_activePipeline=null,MAX_RUNS=10,runHistory=[],DISCARDED_KEEP_TOP=25,_uiContainer=null,_selectedRunIndex=null,_cardSearchQuery=``,pipelineDebugAPI={get runs(){return[...runHistory]},showRun(t=0){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c;if(typeof t==`number`){if(c=runHistory[t],!c){logger.info(`[Pipeline Debug] No run found at index ${t}. History length: ${runHistory.length}`);return}}else if(c=runHistory.find(c=>c.runId.endsWith(t)),!c){logger.info(`[Pipeline Debug] No run found matching ID '${t}'.`);return}printRunSummary(c)},showLastRun(){this.showRun(0)},showCard(t){for(let c of runHistory){let u=c.cards.find(c=>c.cardId===t);if(u){console.group(`\u{1F3B4} Card: ${t}`),logger.info(`Course: ${u.courseId}`),logger.info(`Origin: ${u.origin}`),logger.info(`Card ELO: ${u.cardElo??`unknown`} | User ELO: ${c.userElo??`unknown`}`),logger.info(`Final score: ${u.finalScore.toFixed(3)}`),logger.info(`Selected: ${u.selected?`Yes ✅`:`No ❌`}`),u.tags&&u.tags.length>0&&logger.info(`Tags (${u.tags.length}): ${u.tags.join(`, `)}`),logger.info(`Provenance:`),logger.info(formatProvenance(u.provenance)),console.groupEnd();return}}let c=runHistory.filter(t=>t.discardedTail&&t.discardedTail.count>0);c.length>0?logger.info(`[Pipeline Debug] Card '${t}' not found in retained cards. ${c.length} run(s) have discarded tails that were not retained \u2014 the card may have been a low-score candidate. See run.discardedTail for ranges.`):logger.info(`[Pipeline Debug] Card '${t}' not found in recent runs.`)},explainReviews(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.group(`📋 Review Selection Analysis`);for(let t of runHistory){console.group(`Run: ${t.courseId} @ ${t.timestamp.toLocaleTimeString()}`);let c=t.cards.filter(t=>t.origin===`review`),u=c.filter(t=>t.selected);if(c.length===0)logger.info(`❌ No reviews were generated. Check SRS logs for why.`);else if(u.length===0){logger.info(`\u26A0\uFE0F ${c.length} reviews generated but none selected.`),logger.info(`Possible reasons:`);let u=Math.max(...t.cards.filter(t=>t.origin===`new`&&t.selected).map(t=>t.finalScore),0),d=Math.max(...c.map(t=>t.finalScore),0);d<u&&logger.info(` - New cards scored higher (top new: ${u.toFixed(2)}, top review: ${d.toFixed(2)})`);let m=c.sort((t,c)=>c.finalScore-t.finalScore)[0];m&&(logger.info(` - Top review score: ${m.finalScore.toFixed(3)}`),logger.info(` - Its provenance:`),logger.info(formatProvenance(m.provenance)))}else{logger.info(`\u2705 ${u.length}/${c.length} reviews selected.`),logger.info(`Top selected review:`);let t=u.sort((t,c)=>c.finalScore-t.finalScore)[0];logger.info(formatProvenance(t.provenance))}console.groupEnd()}console.groupEnd()},showPrescribed(t){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c=runHistory[0],u=c.cards.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`));if(console.group(`\u{1F9ED} Prescribed Debug (${c.courseId})`),u.length===0){logger.info(`No prescribed-generated cards were present in the most recent run.`),console.groupEnd();return}let d=u.map(t=>{let c=t.provenance.find(t=>t.strategy===`prescribed`)?.reason??``,u=c.match(/group=([^;]+)/)?.[1]??`unknown`,d=c.match(/mode=([^;]+)/)?.[1]??`unknown`,m=c.match(/blocked=([^;]+)/)?.[1]??`unknown`,g=c.match(/blockedTargets=([^;]+)/)?.[1]??`none`,b=c.match(/supportCard=([^;]+)/)?.[1]??`none`,S=c.match(/supportTags=([^;]+)/)?.[1]??`none`,C=c.match(/multiplier=([^;]+)/)?.[1]??`unknown`;return{group:u,mode:d,supportSource:d===`discovered-support`?`discovered`:d===`support`?`authored`:`n/a`,cardId:t.cardId,selected:t.selected?`yes`:`no`,finalScore:t.finalScore.toFixed(3),blocked:m,blockedTargets:g,supportCard:b,supportTags:S,multiplier:C}}).filter(c=>!t||c.group===t).sort((t,c)=>Number(c.finalScore)-Number(t.finalScore));if(d.length===0){logger.info(`[Pipeline Debug] No prescribed cards matched group '${t}' in the most recent run.`),console.groupEnd();return}console.table(d);let m=d.filter(t=>t.selected===`yes`),g=new Set,b=new Set,S=new Set,C=new Set;for(let t of d)t.blockedTargets&&t.blockedTargets!==`none`&&t.blockedTargets.split(`|`).filter(Boolean).forEach(t=>g.add(t)),t.supportTags&&t.supportTags!==`none`&&t.supportTags.split(`|`).filter(Boolean).forEach(t=>b.add(t)),t.supportCard&&t.supportCard!==`none`&&(t.supportSource===`discovered`?C.add(t.supportCard):t.supportSource===`authored`&&S.add(t.supportCard));logger.info(`Prescribed cards in run: ${d.length}`),logger.info(`Selected prescribed cards: ${m.length}`),logger.info(`Blocked prescribed targets referenced: ${g.size>0?[...g].join(`, `):`none`}`),logger.info(`Resolved support tags referenced: ${b.size>0?[...b].join(`, `):`none`}`),logger.info(`Authored support cards emitted: ${S.size>0?[...S].join(`, `):`none`}`),logger.info(`Discovered support cards emitted: ${C.size>0?[...C].join(`, `):`none`}`),console.groupEnd()},listRuns(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.table(runHistory.map(t=>({id:t.runId.slice(-8),time:t.timestamp.toLocaleTimeString(),course:t.courseName||t.courseId.slice(0,8),generated:t.generatedCount,selected:t.finalCount,new:t.newSelected,reviews:t.reviewsSelected})))},export(){let t=JSON.stringify(runHistory,null,2);return logger.info(`[Pipeline Debug] Run history exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.pipeline.export())`),t},clear(){runHistory.length=0,logger.info(`[Pipeline Debug] Run history cleared.`)},showRegistry(){let t=getRegisteredNavigatorNames();if(t.length===0){logger.info(`[Pipeline Debug] Navigator registry is empty.`);return}console.group(`📦 Navigator Registry`),console.table(t.map(t=>{let c=getRegisteredNavigatorRole(t),u=NavigatorRoles[t];return{name:t,role:u||c||`⚠️ NONE`,source:u?`built-in`:c?`consumer`:`unclassified`,isGenerator:isGenerator(t),isFilter:isFilter(t)}})),console.groupEnd()},showStrategies(){if(this.showRegistry(),runHistory.length===0){logger.info(`[Pipeline Debug] No pipeline runs captured yet — cannot show strategy doc mapping.`);return}let t=runHistory[0];if(console.group(`🔌 Pipeline Strategy Mapping (last run)`),logger.info(`Generator: ${t.generatorName}`),t.generators&&t.generators.length>0)for(let c of t.generators)logger.info(` \u{1F4E5} ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews)`);if(t.filters.length>0){logger.info(`Filters:`);for(let c of t.filters)logger.info(` \u{1F538} ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`)}else logger.info(`Filters: (none)`);console.groupEnd()},async diagnoseCardSpace(t){return _activePipeline?_activePipeline.diagnoseCardSpace({threshold:t}):(logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`),null)},async showTagElo(t){if(!_activePipeline){logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`);return}let c=await _activePipeline.getTagEloStatus(t),u=Object.entries(c).sort(([t],[c])=>t.localeCompare(c));if(u.length===0){logger.info(`[Pipeline Debug] No tag ELO data found${t?` for pattern: ${t}`:``}.`);return}console.table(Object.fromEntries(u.map(([t,c])=>[t,{score:Math.round(c.score),count:c.count}])))},ui(){if(_uiContainer){document.body.removeChild(_uiContainer),_uiContainer=null;return}_uiContainer=document.createElement(`div`),_uiContainer.id=`sk-pipeline-debugger`,document.body.appendChild(_uiContainer),_selectedRunIndex===null&&runHistory.length>0&&(_selectedRunIndex=0),renderUI()},_selectRun(t){_selectedRunIndex=t,renderUI()},_setSearch(t){_cardSearchQuery=t,renderUI()},_copyConfig(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d={runId:u.runId,timestamp:u.timestamp.toISOString(),courseId:u.courseId,courseName:u.courseName,hints:u.hints??null};copyTextToClipboard(JSON.stringify(d,null,2),c)},_copyResults(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d=u.cards.filter(t=>t.selected).sort((t,c)=>c.finalScore-t.finalScore).map(t=>({cardId:t.cardId,generator:t.generator,origin:t.origin,score:Number(t.finalScore.toFixed(3)),topReason:t.provenance[0]?.reason??``})),m={runId:u.runId,label:u.hints?._label??null,finalCount:u.finalCount,newSelected:u.newSelected,reviewsSelected:u.reviewsSelected,selected:d};copyTextToClipboard(JSON.stringify(m,null,2),c)},help(){logger.info(`
|
|
325
328
|
🔧 Pipeline Debug API
|
|
326
329
|
|
|
327
330
|
Commands:
|
|
@@ -346,7 +349,7 @@ Example:
|
|
|
346
349
|
window.skuilder.pipeline.showLastRun()
|
|
347
350
|
window.skuilder.pipeline.showRun(1)
|
|
348
351
|
await window.skuilder.pipeline.diagnoseCardSpace()
|
|
349
|
-
`)}},mountPipelineDebugger()}}),CompositeGenerator_exports={},__export(CompositeGenerator_exports,{AggregationMode:()=>AggregationMode,default:()=>CompositeGenerator}),init_CompositeGenerator=__esm({"src/core/navigators/generators/CompositeGenerator.ts"(){"use strict";init_navigators(),init_logger(),AggregationMode=(t=>(t.MAX=`max`,t.AVERAGE=`average`,t.FREQUENCY_BOOST=`frequencyBoost`,t))(AggregationMode||{}),DEFAULT_AGGREGATION_MODE=`frequencyBoost`,FREQUENCY_BOOST_FACTOR=.1,CompositeGenerator=class _CompositeGenerator extends ContentNavigator{constructor(t,c=DEFAULT_AGGREGATION_MODE){if(super(),_defineProperty$2(this,`name`,`Composite Generator`),_defineProperty$2(this,`generators`,void 0),_defineProperty$2(this,`aggregationMode`,void 0),this.generators=t,this.aggregationMode=c,t.length===0)throw Error(`CompositeGenerator requires at least one generator`);logger.debug(`[CompositeGenerator] Created with ${t.length} generators, mode: ${c}`)}static async fromStrategies(t,c,u,d=DEFAULT_AGGREGATION_MODE){return new _CompositeGenerator(await Promise.all(u.map(u=>ContentNavigator.create(t,c,u))),d)}async getWeightedCards(t,c){if(!c)throw Error(`CompositeGenerator.getWeightedCards requires a GeneratorContext. It should be called via Pipeline, not directly.`);let u=await Promise.all(this.generators.map(u=>u.getWeightedCards(t,c))),d=[];u.forEach((t,c)=>{let u=t.cards,m=this.generators[c].name||`Generator ${c}`,g=u.filter(t=>t.provenance[0]?.reason?.includes(`new card`)),b=u.filter(t=>t.provenance[0]?.reason?.includes(`review`));if(u.length>0){let t=Math.max(...u.map(t=>t.score)).toFixed(2),c=[];g.length>0&&c.push(`${g.length} new`),b.length>0&&c.push(`${b.length} reviews`);let S=c.length>0?c.join(`, `):`${u.length} cards`;d.push(`${m}: ${S} (top: ${t})`)}else d.push(`${m}: 0 cards`)}),logger.info(`[Composite] Generator breakdown: ${d.join(` | `)}`);let m=new Map;u.forEach((t,u)=>{let d=t.cards,g=this.generators[u],b=g.learnable?.weight??1,S;if(g.learnable&&!g.staticWeight&&c.orchestration){let t=g.strategyId;t&&(b=c.orchestration.getEffectiveWeight(t,g.learnable),S=c.orchestration.getDeviation(t))}for(let t of d){t.provenance.length>0&&(t.provenance[0].effectiveWeight=b,t.provenance[0].deviation=S);let c=m.get(t.cardId)||[];c.push({card:t,weight:b}),m.set(t.cardId,c)}});let g=[];for(let[,t]of m){let c=t.map(t=>t.card),u=this.aggregateScores(t),d=Math.max(0,u),m=c.flatMap(t=>t.provenance),b=c[0].score,S=d>b?`boosted`:d<b?`penalized`:`passed`,C=this.buildAggregationReason(t,d);g.push({...c[0],score:d,provenance:[...m,{strategy:`composite`,strategyName:`Composite Generator`,strategyId:`COMPOSITE_GENERATOR`,action:S,score:d,reason:C}]})}return{cards:g.sort((t,c)=>c.score-t.score).slice(0,t),hints:mergeHints(u.map(t=>t.hints))}}buildAggregationReason(t,c){let u=t.map(t=>t.card),d=u.length,m=u.map(t=>t.score.toFixed(2)).join(`, `);if(d===1){let u=Math.abs(t[0].weight-1)>.001?` (w=${t[0].weight.toFixed(2)})`:``;return`Single generator, score ${c.toFixed(2)}${u}`}let g=u.map(t=>t.provenance[0]?.strategy||`unknown`).join(`, `);switch(this.aggregationMode){case`max`:return`Max of ${d} generators (${g}): scores [${m}] \u2192 ${c.toFixed(2)}`;case`average`:return`Weighted Avg of ${d} generators (${g}): scores [${m}] \u2192 ${c.toFixed(2)}`;case`frequencyBoost`:{let u=t.reduce((t,c)=>t+c.weight,0),m=t.reduce((t,c)=>t+c.card.score*c.weight,0),b=u>0?m/u:0,S=1+FREQUENCY_BOOST_FACTOR*(d-1);return`Frequency boost from ${d} generators (${g}): w-avg ${b.toFixed(2)} \xD7 ${S.toFixed(2)} \u2192 ${c.toFixed(2)}`}default:return`Aggregated from ${d} generators: ${c.toFixed(2)}`}}aggregateScores(t){let c=t.map(t=>t.card.score);switch(this.aggregationMode){case`max`:return Math.max(...c);case`average`:{let c=t.reduce((t,c)=>t+c.weight,0);return c===0?0:t.reduce((t,c)=>t+c.card.score*c.weight,0)/c}case`frequencyBoost`:{let c=t.reduce((t,c)=>t+c.weight,0),u=t.reduce((t,c)=>t+c.card.score*c.weight,0);return(c>0?u/c:0)*(1+FREQUENCY_BOOST_FACTOR*(t.length-1))}default:return c[0]}}}}}),elo_exports={},__export(elo_exports,{default:()=>ELONavigator}),init_elo=__esm({"src/core/navigators/generators/elo.ts"(){"use strict";init_navigators(),init_logger(),ELONavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),this.name=u?.name||`ELO`}async getWeightedCards(t,c){let u;u=c?.userElo===void 0?toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo).global.score:c.userElo;let d=await this.user.getActiveCards(),m=(await this.course.getCardsCenteredAtELO({limit:t,elo:`user`},t=>!d.some(c=>t.cardID===c.cardID))).map(t=>({...t,status:`new`})).map(t=>{let c=t.elo??1e3,d=Math.abs(c-u),m=Math.max(0,1-d/500),g=m>0?Math.random()**(1/m):0;return{cardId:t.cardID,courseId:t.courseID,score:g,provenance:[{strategy:`elo`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-ELO-default`,action:`generated`,score:g,reason:`ELO distance ${Math.round(d)} (card: ${Math.round(c)}, user: ${Math.round(u)}), raw ${m.toFixed(3)}, key ${g.toFixed(3)}`}]}});m.sort((t,c)=>c.score-t.score);let g=m.slice(0,t);if(g.length>0){let t=g.slice(0,3).map(t=>t.score.toFixed(2)).join(`, `);logger.info(`[ELO] Course ${this.course.getCourseID()}: ${g.length} new cards (top scores: ${t})`)}else logger.info(`[ELO] Course ${this.course.getCourseID()}: No new cards available`);return{cards:g}}}}}),generators_exports={},init_generators=__esm({"src/core/navigators/generators/index.ts"(){"use strict";}}),prescribed_exports={},__export(prescribed_exports,{default:()=>PrescribedCardsGenerator}),init_prescribed=__esm({"src/core/navigators/generators/prescribed.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_FRESHNESS_WINDOW=3,DEFAULT_MAX_DIRECT_PER_RUN=3,DEFAULT_MAX_SUPPORT_PER_RUN=3,DEFAULT_HIERARCHY_DEPTH=2,DEFAULT_MIN_COUNT=3,BASE_TARGET_SCORE=1,BASE_SUPPORT_SCORE=.8,DISCOVERED_SUPPORT_SCORE=12,MAX_TARGET_MULTIPLIER=8,MAX_SUPPORT_MULTIPLIER=4,PRESCRIBED_DEBUG_VERSION=`testversion-prescribed-v3`,PrescribedCardsGenerator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`config`,void 0),this.name=u.name||`Prescribed Cards`,this.config=this.parseConfig(u.serializedData),logger.debug(`[Prescribed] Initialized with ${this.config.groups.length} groups and ${this.config.groups.reduce((t,c)=>t+c.targetCardIds.length,0)} targets`)}get strategyKey(){return`PrescribedProgress`}async getWeightedCards(t,c){if(this.config.groups.length===0||t<=0)return{cards:[]};let u=this.course.getCourseID(),d=await this.user.getActiveCards(),m=new Set(d.map(t=>t.cardID)),g=await this.user.getSeenCards(u).catch(()=>[]),b=new Set(g),S=await this.getStrategyState()??{updatedAt:isoNow(),groups:{}},C=await this.loadHierarchyConfigs(),w=await this.user.getCourseRegDoc(u).catch(()=>null),T=typeof w?.elo==`number`?w.elo:w?.elo?.global?.score??c?.userElo??1e3,E=typeof w?.elo==`number`?{}:w?.elo?.tags??{},D=dedupe(this.config.groups.flatMap(t=>t.targetCardIds)),O=dedupe(this.config.groups.flatMap(t=>t.supportCardIds??[])),Or=dedupe([...D,...O]),kr=Or.length>0?await this.course.getAppliedTagsBatch(Or):new Map,Ar=await this.course.getCourseTagStubs().catch(()=>({rows:[],offset:0,total_rows:0})),jr=new Map;for(let t of Ar.rows??[]){let c=t.doc;c?.name&&Array.isArray(c.taggedCards)&&jr.set(c.name,[...c.taggedCards])}let Mr={updatedAt:isoNow(),groups:{}},Nr=[],Pr=new Set,Fr=[];for(let t of this.config.groups){let c=this.buildGroupRuntimeState({group:t,priorState:S.groups[t.id],activeIds:m,seenIds:b,tagsByCard:kr,cardsByTag:jr,hierarchyConfigs:C,userTagElo:E,userGlobalElo:T});Fr.push(c),logger.info(`[Prescribed] Group '${t.id}': ${t.targetCardIds.length} targets total, ${c.encounteredTargets.size} encountered, ${c.pendingTargets.length} pending (${c.surfaceableTargets.length} surfaceable, ${c.blockedTargets.length} blocked), ${c.supportCandidates.length} authored support candidates, ${c.discoveredSupportCandidates.length} discovered support candidates, pressure=${c.pressureMultiplier.toFixed(2)}`),c.blockedTargets.length>0&&(logger.info(`[Prescribed] Group '${t.id}' blocked targets: ${c.blockedTargets.join(`, `)}`),logger.info(`[Prescribed] Group '${t.id}' support tags needed: ${c.supportTags.join(`, `)||`(none)`}`),logger.info(`[Prescribed] Group '${t.id}' escalation mode: `+(c.supportCandidates.length>0?`direct-support`:c.discoveredSupportCandidates.length>0?`inserted-support-candidates`:`boost-only`)),c.discoveredSupportCandidates.length>0&&logger.info(`[Prescribed] Group '${t.id}' discovered support candidates: ${c.discoveredSupportCandidates.join(`, `)}`)),Mr.groups[t.id]=this.buildNextGroupState(c,S.groups[t.id]);let d=this.buildDirectTargetCards(c,u,Pr),g=this.buildSupportCards(c,u,Pr),w=this.buildDiscoveredSupportCards(c,u,Pr);Nr.push(...d,...g,...w)}let Ir=this.buildSupportHintSummary(Fr),Lr=Object.keys(Ir.boostTags).length>0?{boostTags:Ir.boostTags,_label:`prescribed-support (${Ir.supportTags.length} tags; blocked=${Ir.blockedTargetIds.length}; testversion=${PRESCRIBED_DEBUG_VERSION})`}:void 0;if(Lr){let t=Object.entries(Lr.boostTags??{});logger.info(`[Prescribed] Emitting ${t.length} boost hint(s): `+t.map(([t,c])=>`${t}\xD7${c.toFixed(1)}`).join(`, `))}else logger.info(`[Prescribed] No hints to emit (no blocked targets or no support tags)`);if(Nr.length===0)return logger.info(`[Prescribed] 0 cards emitted (all targets blocked, authored/discovered support candidates exhausted)`+(Lr?` — boost hints emitted but may not survive filters`:``)),await this.putStrategyState(Mr).catch(t=>{logger.debug(`[Prescribed] Failed to persist empty-state update: ${t}`)}),Lr?{cards:[],hints:Lr}:{cards:[]};let Rr=pickTopByScore(Nr,t),zr=new Map;for(let t of Rr){let c=t.provenance[0],u=c?.reason.match(/group=([^;]+)/)?.[1],d=c?.reason.includes(`mode=support`)?`supportIds`:`targetIds`;u&&(zr.has(u)||zr.set(u,{targetIds:[],supportIds:[]}),zr.get(u)[d].push(t.cardId))}for(let t of this.config.groups){let c=Mr.groups[t.id],u=zr.get(t.id);u&&(u.targetIds.length>0||u.supportIds.length>0)&&(c.lastSurfacedAt=isoNow(),c.sessionsSinceSurfaced=0,u.supportIds.length>0&&(c.lastSupportAt=isoNow()))}return await this.putStrategyState(Mr).catch(t=>{logger.debug(`[Prescribed] Failed to persist prescribed progress: ${t}`)}),logger.info(`[Prescribed] Emitting ${Rr.length} cards (${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=target`)).length} target, ${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=support`)).length} support, ${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=discovered-support`)).length} discovered support)`),Lr?{cards:Rr,hints:Lr}:{cards:Rr}}buildSupportHintSummary(t){let c={},u=new Set,d=new Set;for(let m of t)if(!(m.blockedTargets.length===0||m.supportTags.length===0)){m.blockedTargets.forEach(t=>u.add(t));for(let t of m.supportTags)d.add(t),c[t]=(c[t]??1)*m.supportMultiplier}return{boostTags:c,blockedTargetIds:[...u].sort(),supportTags:[...d].sort()}}parseConfig(t){try{let c=JSON.parse(t);return{groups:(Array.isArray(c.groups)?c.groups:[]).map((t,c)=>({id:typeof t.id==`string`&&t.id.trim().length>0?t.id:`group-${c+1}`,targetCardIds:dedupe(Array.isArray(t.targetCardIds)?t.targetCardIds.filter(t=>typeof t==`string`):[]),supportCardIds:dedupe(Array.isArray(t.supportCardIds)?t.supportCardIds.filter(t=>typeof t==`string`):[]),supportTagPatterns:dedupe(Array.isArray(t.supportTagPatterns)?t.supportTagPatterns.filter(t=>typeof t==`string`):[]),freshnessWindowSessions:typeof t.freshnessWindowSessions==`number`?t.freshnessWindowSessions:DEFAULT_FRESHNESS_WINDOW,maxDirectTargetsPerRun:typeof t.maxDirectTargetsPerRun==`number`?t.maxDirectTargetsPerRun:DEFAULT_MAX_DIRECT_PER_RUN,maxSupportCardsPerRun:typeof t.maxSupportCardsPerRun==`number`?t.maxSupportCardsPerRun:DEFAULT_MAX_SUPPORT_PER_RUN,hierarchyWalk:{enabled:t.hierarchyWalk?.enabled!==!1,maxDepth:typeof t.hierarchyWalk?.maxDepth==`number`?t.hierarchyWalk.maxDepth:DEFAULT_HIERARCHY_DEPTH},retireOnEncounter:t.retireOnEncounter!==!1})).filter(t=>t.targetCardIds.length>0)}}catch{return{groups:[]}}}async loadHierarchyConfigs(){try{return(await this.course.getAllNavigationStrategies()).filter(t=>t.implementingClass===`hierarchyDefinition`).map(t=>{try{return{prerequisites:JSON.parse(t.serializedData).prerequisites||{}}}catch{return{prerequisites:{}}}})}catch(t){return logger.debug(`[Prescribed] Failed to load hierarchy configs: ${t}`),[]}}buildGroupRuntimeState(t){let{group:c,priorState:u,activeIds:d,seenIds:m,tagsByCard:g,cardsByTag:b,hierarchyConfigs:S,userTagElo:C,userGlobalElo:w}=t,T=new Set;for(let t of c.targetCardIds)(d.has(t)||m.has(t))&&T.add(t);if(u?.encounteredCardIds?.length)for(let t of u.encounteredCardIds)T.add(t);let E=c.targetCardIds.filter(t=>!T.has(t)),D=new Map;for(let t of E)D.set(t,g.get(t)??[]);let O=[],Or=[],kr=new Set;for(let t of E){let u=D.get(t)??[],d=this.resolveBlockedSupportTags(u,S,C,w,c.hierarchyWalk?.enabled!==!1,c.hierarchyWalk?.maxDepth??DEFAULT_HIERARCHY_DEPTH),m=u.filter(t=>t.startsWith(`gpc:intro:`)),g=new Set(u.filter(t=>t.startsWith(`gpc:expose:`)));for(let t of m){let c=t.slice(10);c&&g.add(`gpc:expose:${c}`)}let b=[...g].filter(t=>{let c=C[t];return!c||c.count<DEFAULT_MIN_COUNT});b.length>0&&b.forEach(t=>kr.add(t)),d.blocked||b.length>0?(O.push(t),d.supportTags.forEach(t=>kr.add(t))):Or.push(t)}let Ar=dedupe([...c.supportCardIds??[],...this.findSupportCardsByTags(c,g,[...kr])]).filter(t=>!d.has(t)&&!m.has(t)),jr=O.length>0&&kr.size>0&&Ar.length===0?this.findDiscoveredSupportCards({supportTags:[...kr],cardsByTag:b,activeIds:d,seenIds:m,excludedIds:new Set([...c.targetCardIds,...c.supportCardIds??[]]),limit:c.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN}):[];O.length>0&&kr.size>0&&jr.length===0&&logger.info(`[Prescribed] Group '${c.id}' discovered 0 broader support candidates (blocked=${O.length}; authoredSupport=${Ar.length})`);let Mr=u?.sessionsSinceSurfaced??0,Nr=c.freshnessWindowSessions??DEFAULT_FRESHNESS_WINDOW,Pr=Math.max(0,Mr-Nr),Fr=E.length===0?1:clamp(1+Pr*.75+Math.min(2,E.length*.1),1,MAX_TARGET_MULTIPLIER),Ir=O.length===0?1:clamp(1+Pr*.5+Math.min(1.5,O.length*.15),1,MAX_SUPPORT_MULTIPLIER);return{group:c,encounteredTargets:T,pendingTargets:E,blockedTargets:O,surfaceableTargets:Or,targetTags:D,supportCandidates:Ar,discoveredSupportCandidates:jr,supportTags:[...kr],pressureMultiplier:Fr,supportMultiplier:Ir,debugVersion:PRESCRIBED_DEBUG_VERSION}}buildNextGroupState(t,c){let u=c?.sessionsSinceSurfaced??0,d=!1;return{encounteredCardIds:[...t.encounteredTargets].sort(),pendingTargetIds:[...t.pendingTargets].sort(),lastSurfacedAt:c?.lastSurfacedAt??null,sessionsSinceSurfaced:u+1,lastSupportAt:c?.lastSupportAt??null,blockedTargetIds:[...t.blockedTargets].sort(),lastResolvedSupportTags:[...t.supportTags].sort()}}buildDirectTargetCards(t,c,u){let d=t.group.maxDirectTargetsPerRun??DEFAULT_MAX_DIRECT_PER_RUN,m=t.surfaceableTargets.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:BASE_TARGET_SCORE*t.pressureMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:BASE_TARGET_SCORE*t.pressureMultiplier,reason:`mode=target;group=${t.group.id};pending=${t.pendingTargets.length};surfaceable=${t.surfaceableTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.pressureMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}buildSupportCards(t,c,u){if(t.blockedTargets.length===0||t.supportCandidates.length===0)return[];let d=t.group.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN,m=t.supportCandidates.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:BASE_SUPPORT_SCORE*t.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:BASE_SUPPORT_SCORE*t.supportMultiplier,reason:`mode=support;group=${t.group.id};pending=${t.pendingTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportCard=${d};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.supportMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}buildDiscoveredSupportCards(t,c,u){if(t.blockedTargets.length===0||t.discoveredSupportCandidates.length===0)return[];let d=t.group.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN,m=t.discoveredSupportCandidates.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:DISCOVERED_SUPPORT_SCORE*t.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:DISCOVERED_SUPPORT_SCORE*t.supportMultiplier,reason:`mode=discovered-support;group=${t.group.id};pending=${t.pendingTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportCard=${d};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.supportMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}findSupportCardsByTags(t,c,u){if(u.length===0)return[];let d=t.supportCardIds??[],m=t.supportTagPatterns??[];if(d.length===0&&m.length===0)return[];let g=new Set;for(let t of d){let d=c.get(t)??[],b=u.some(t=>d.includes(t)),S=m.some(t=>d.some(c=>matchesTagPattern(c,t)));(b||S)&&g.add(t)}return[...g]}findDiscoveredSupportCards(t){let{supportTags:c,cardsByTag:u,activeIds:d,seenIds:m,excludedIds:g,limit:b}=t,S=new Map;for(let t of c){let c=u.get(t)??[];for(let t of c){if(d.has(t)||m.has(t)||g.has(t))continue;let c=S.get(t);c?c.matches+=1:S.set(t,{cardId:t,matches:1})}}let C=[...S.values()].sort((t,c)=>c.matches-t.matches||t.cardId.localeCompare(c.cardId)),w=new Set,T=[],E=[];for(let t of C){let c=extractWordStem(t.cardId);w.has(c)?E.push(t):(w.add(c),T.push(t))}return shuffleInPlace(T),shuffleInPlace(E),[...T,...E].slice(0,b).map(t=>t.cardId)}resolveBlockedSupportTags(t,c,u,d,m,g){let b=new Set,S=!1;for(let C of t){let t=c.map(t=>t.prerequisites[C]).filter(t=>Array.isArray(t)&&t.length>0);if(t.length!==0&&t.some(t=>t.some(t=>!this.isPrerequisiteMet(t,u[t.tag],d)))){if(S=!0,!m){for(let c of t)for(let t of c)this.isPrerequisiteMet(t,u[t.tag],d)||b.add(t.tag);continue}for(let m of t)for(let t of m)this.isPrerequisiteMet(t,u[t.tag],d)||this.collectSupportTagsRecursive(t.tag,c,u,d,g,new Set,b)}}return{blocked:S,supportTags:[...b]}}collectSupportTagsRecursive(t,c,u,d,m,g,b){if(m<0||g.has(t))return;g.add(t);let S=!1;for(let C of c){let w=C.prerequisites[t];if(!w||w.length===0)continue;let T=w.filter(t=>!this.isPrerequisiteMet(t,u[t.tag],d));if(T.length>0&&m>0){S=!0;for(let t of T)this.collectSupportTagsRecursive(t.tag,c,u,d,m-1,g,b)}}S||b.add(t)}isPrerequisiteMet(t,c,u){if(!c)return!1;let d=t.masteryThreshold?.minCount??DEFAULT_MIN_COUNT;return c.count<d?!1:t.masteryThreshold?.minElo===void 0?t.masteryThreshold?.minCount===void 0?c.score>=u:!0:c.score>=t.masteryThreshold.minElo}}}}),srs_exports={},__export(srs_exports,{default:()=>SRSNavigator}),init_srs=__esm({"src/core/navigators/generators/srs.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_HEALTHY_BACKLOG=20,MAX_BACKLOG_PRESSURE=.5,SRSNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`healthyBacklog`,void 0),this.name=u?.name||`SRS`,this.healthyBacklog=this.parseConfig(u?.serializedData).healthyBacklog??DEFAULT_HEALTHY_BACKLOG}parseConfig(t){if(!t)return{};try{return JSON.parse(t)}catch{return logger.warn(`[SRS] Failed to parse strategy config, using defaults`),{}}}async getWeightedCards(t,c){if(!this.user||!this.course)throw Error(`SRSNavigator requires user and course to be set`);let u=this.course.getCourseID(),d=await this.user.getPendingReviews(u),m=hooks.utc(),g=d.filter(t=>m.isAfter(hooks.utc(t.reviewTime)));if(g.length>0){let t=[...new Set(g.map(t=>t.cardId))],c=await this.course.getAppliedTagsBatch(t),u=[];if(g=g.filter(t=>(c.get(t.cardId)??[]).includes(`srs:skip`)?(u.push(t._id),!1):!0),u.length>0){logger.info(`[SRS] Removing ${u.length} scheduled reviews for srs:skip cards`);for(let t of u)this.user.removeScheduledCardReview(t)}}let b=this.computeBacklogPressure(g.length);if(g.length>0){let t=b>0?` [backlog pressure: +${b.toFixed(2)}]`:` [healthy backlog]`;logger.info(`[SRS] Course ${u}: ${g.length} reviews due now (of ${d.length} scheduled)${t}`)}else if(d.length>0){let t=[...d].sort((t,c)=>hooks.utc(t.reviewTime).diff(hooks.utc(c.reviewTime)))[0],c=hooks.utc(t.reviewTime),g=hooks.duration(c.diff(m)),b=g.asHours()<1?`${Math.round(g.asMinutes())}m`:g.asHours()<24?`${Math.round(g.asHours())}h`:`${Math.round(g.asDays())}d`;logger.info(`[SRS] Course ${u}: 0 reviews due now (${d.length} scheduled, next in ${b})`)}else logger.info(`[SRS] Course ${u}: No reviews scheduled`);return{cards:g.map(t=>{let{score:c,reason:u}=this.computeUrgencyScore(t,m,b);return{cardId:t.cardId,courseId:t.courseId,score:c,reviewID:t._id,provenance:[{strategy:`srs`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-SRS-default`,action:`generated`,score:c,reason:u}]}}).sort((t,c)=>c.score-t.score).slice(0,t)}}computeBacklogPressure(t){if(t<=this.healthyBacklog)return 0;let c=(t-this.healthyBacklog)/this.healthyBacklog*(MAX_BACKLOG_PRESSURE/2);return Math.min(MAX_BACKLOG_PRESSURE,c)}computeUrgencyScore(t,c,u){let d=hooks.utc(t.scheduledAt),m=hooks.utc(t.reviewTime),g=Math.max(1,m.diff(d,`hours`)),b=c.diff(m,`hours`),S=b/g,C=.3+.7*Math.exp(-g/720),w=.5+(Math.min(1,Math.max(0,S))*.5+C*.5)*.45,T=Math.min(1,w+u),E=[`${Math.round(b)}h overdue`,`interval: ${Math.round(g)}h`,`relative: ${S.toFixed(2)}`,`recency: ${C.toFixed(2)}`];return u>0&&E.push(`backlog: +${u.toFixed(2)}`),E.push(`review`),{score:T,reason:E.join(`, `)}}}}}),types_exports={},init_types=__esm({"src/core/navigators/generators/types.ts"(){"use strict";}}),init_=__esm({'import("./generators/**/*") in src/core/navigators/index.ts'(){globImport_generators=__glob({"./generators/CompositeGenerator.ts":()=>Promise.resolve().then(()=>(init_CompositeGenerator(),CompositeGenerator_exports)),"./generators/elo.ts":()=>Promise.resolve().then(()=>(init_elo(),elo_exports)),"./generators/index.ts":()=>Promise.resolve().then(()=>(init_generators(),generators_exports)),"./generators/prescribed.ts":()=>Promise.resolve().then(()=>(init_prescribed(),prescribed_exports)),"./generators/srs.ts":()=>Promise.resolve().then(()=>(init_srs(),srs_exports)),"./generators/types.ts":()=>Promise.resolve().then(()=>(init_types(),types_exports))})}}),init_contentNavigationStrategy=__esm({"src/core/types/contentNavigationStrategy.ts"(){"use strict";DEFAULT_LEARNABLE_WEIGHT={weight:1,confidence:.1,sampleSize:0}}}),WeightedFilter_exports={},__export(WeightedFilter_exports,{WeightedFilter:()=>WeightedFilter}),init_WeightedFilter=__esm({"src/core/navigators/filters/WeightedFilter.ts"(){"use strict";init_contentNavigationStrategy(),WeightedFilter=class{constructor(t,c=DEFAULT_LEARNABLE_WEIGHT,u=!1,d){_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`inner`,void 0),_defineProperty$2(this,`learnable`,void 0),_defineProperty$2(this,`staticWeight`,void 0),_defineProperty$2(this,`strategyId`,void 0),this.inner=t,this.name=t.name,this.learnable=c,this.staticWeight=u,this.strategyId=d}async transform(t,c){let u=this.learnable.weight,d;if(!this.staticWeight&&c.orchestration){let t=this.strategyId||this.inner.strategyId||this.name;u=c.orchestration.getEffectiveWeight(t,this.learnable),d=c.orchestration.getDeviation(t)}if(Math.abs(u-1)<.001)return this.inner.transform(t,c);let m=new Map;for(let c of t)m.set(c.cardId,c.score);return(await this.inner.transform(t,c)).map(t=>{let c=m.get(t.cardId);if(c===void 0||c===0||t.score===0)return t;let g=t.score/c;if(Math.abs(g-1)<1e-4)return t;let b=c*g**+u,S=t.provenance.length-1,C=t.provenance[S];if(C){let c=[...t.provenance];return c[S]={...C,score:b,effectiveWeight:u,deviation:d},{...t,score:b,provenance:c}}return{...t,score:b}})}}}}),eloDistance_exports={},__export(eloDistance_exports,{DEFAULT_HALF_LIFE:()=>DEFAULT_HALF_LIFE,DEFAULT_MAX_MULTIPLIER:()=>DEFAULT_MAX_MULTIPLIER,DEFAULT_MIN_MULTIPLIER:()=>DEFAULT_MIN_MULTIPLIER,createEloDistanceFilter:()=>createEloDistanceFilter}),init_eloDistance=__esm({"src/core/navigators/filters/eloDistance.ts"(){"use strict";DEFAULT_HALF_LIFE=200,DEFAULT_MIN_MULTIPLIER=.3,DEFAULT_MAX_MULTIPLIER=1}}),hierarchyDefinition_exports={},__export(hierarchyDefinition_exports,{default:()=>HierarchyDefinitionNavigator}),init_hierarchyDefinition=__esm({"src/core/navigators/filters/hierarchyDefinition.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_MIN_COUNT2=3,HierarchyDefinitionNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),this.config=this.parseConfig(u.serializedData),this.name=u.name||`Hierarchy Definition`}parseConfig(t){try{return{prerequisites:JSON.parse(t).prerequisites||{}}}catch{return{prerequisites:{}}}}isPrerequisiteMet(t,c,u){if(!c)return!1;let d=t.masteryThreshold?.minCount??DEFAULT_MIN_COUNT2;return c.count<d?!1:t.masteryThreshold?.minElo===void 0?t.masteryThreshold?.minCount===void 0?c.score>=u:!0:c.score>=t.masteryThreshold.minElo}async getMasteredTags(t){let c=new Set;try{let u=toCourseElo((await t.user.getCourseRegDoc(t.course.getCourseID())).elo);for(let t of Object.values(this.config.prerequisites))for(let d of t){let t=u.tags[d.tag];this.isPrerequisiteMet(d,t,u.global.score)&&c.add(d.tag)}}catch{}return c}getUnlockedTags(t){let c=new Set;for(let[u,d]of Object.entries(this.config.prerequisites))d.every(c=>t.has(c.tag))&&c.add(u);return c}hasPrerequisites(t){return t in this.config.prerequisites}async checkCardUnlock(t,c,u,d){try{let c=t.tags??[],m=c.filter(t=>this.hasPrerequisites(t)&&!u.has(t));return m.length===0?{isUnlocked:!0,reason:`Prerequisites met, tags: ${c.length>0?c.join(`, `):`none`}`}:{isUnlocked:!1,reason:`Blocked: missing prerequisites ${m.flatMap(t=>(this.config.prerequisites[t]||[]).filter(t=>!d.has(t.tag)).map(t=>t.tag)).join(`, `)} for tags ${m.join(`, `)}`}}catch{return{isUnlocked:!0,reason:`Prerequisites check skipped (tag lookup failed)`}}}getPreReqBoosts(t,c){let u=new Map;for(let[d,m]of Object.entries(this.config.prerequisites))if(!t.has(d))for(let t of m){if(!t.preReqBoost||t.preReqBoost<=1||c.has(t.tag))continue;let d=u.get(t.tag)??1;u.set(t.tag,Math.max(d,t.preReqBoost))}return u}getTargetBoosts(t){let c=new Map,u=Object.keys(this.config.prerequisites),d=[...t];logger.info(`[HierarchyDefinition:targetBoost:trace] ${this.name} | configKeys=${u.length}, unlocked=${d.length} (${d.slice(0,5).join(`, `)}${d.length>5?`...`:``})`);for(let[u,d]of Object.entries(this.config.prerequisites))if(t.has(u)){logger.info(`[HierarchyDefinition:targetBoost:trace] UNLOCKED ${u}: ${d.length} prereqs, raw=${JSON.stringify(d.map(t=>({tag:t.tag,tb:t.targetBoost})))}`);for(let t of d){if(!t.targetBoost||t.targetBoost<=1)continue;let d=c.get(u)??1;c.set(u,Math.max(d,t.targetBoost))}}return c.size>0?logger.info(`[HierarchyDefinition] targetBoosts active: ${[...c.entries()].map(([t,c])=>`${t}=\xD7${c}`).join(`, `)}`):logger.info(`[HierarchyDefinition:targetBoost:trace] no targetBoosts found despite ${d.length} unlocked tags`),c}async transform(t,c){let u=await this.getMasteredTags(c),d=this.getUnlockedTags(u),m=this.getPreReqBoosts(d,u),g=this.getTargetBoosts(d),b=[];for(let S of t){let{isUnlocked:t,reason:C}=await this.checkCardUnlock(S,c.course,d,u),w=t?S.score:S.score*.02,T=t?`passed`:`penalized`,E=C;if(t&&m.size>0){let t=S.tags??[],c=1,u=[];for(let d of t){let t=m.get(d);t&&t>c&&(c=t,u.push(d))}c>1&&(w*=c,T=`boosted`,E=`${C} | preReqBoost \xD7${c.toFixed(2)} for ${u.join(`, `)}`,logger.info(`[HierarchyDefinition] preReqBoost \xD7${c.toFixed(2)} applied to card ${S.cardId} via tags [${u.join(`, `)}] (score: ${S.score.toFixed(3)} \u2192 ${w.toFixed(3)})`))}if(t&&g.size>0){let t=S.tags??[],c=1,u=[];for(let d of t){let t=g.get(d);t&&t>c&&(c=t,u.push(d))}c>1&&(w*=c,T=`boosted`,E=`${E} | targetBoost \xD7${c.toFixed(2)} for ${u.join(`, `)}`,logger.info(`[HierarchyDefinition] targetBoost \xD7${c.toFixed(2)} applied to card ${S.cardId} via tags [${u.join(`, `)}] (score: ${S.score.toFixed(3)} \u2192 ${w.toFixed(3)})`))}b.push({...S,score:w,provenance:[...S.provenance,{strategy:`hierarchyDefinition`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-hierarchy`,action:T,score:w,reason:E}]})}return b}async getWeightedCards(t){throw Error(`HierarchyDefinitionNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),userTagPreference_exports={},__export(userTagPreference_exports,{default:()=>UserTagPreferenceFilter}),init_userTagPreference=__esm({"src/core/navigators/filters/userTagPreference.ts"(){"use strict";init_navigators(),UserTagPreferenceFilter=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`_strategyData`,void 0),_defineProperty$2(this,`name`,void 0),this._strategyData=u,this.name=u.name||`User Tag Preferences`}computeMultiplier(t,c){let u=t.map(t=>c[t]).filter(t=>t!==void 0);return u.length===0?1:Math.max(...u)}buildReason(t,c,u){let d=t.filter(t=>c[t]===u);return u===0?`Excluded by user preference: ${d.join(`, `)} (${u}x)`:u<1?`Penalized by user preference: ${d.join(`, `)} (${u.toFixed(2)}x)`:u>1?`Boosted by user preference: ${d.join(`, `)} (${u.toFixed(2)}x)`:`No matching user preferences`}async transform(t,c){let u=await this.getStrategyState();return!u||Object.keys(u.boost).length===0?t.map(t=>({...t,provenance:[...t.provenance,{strategy:`userTagPreference`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||this._strategyData._id,action:`passed`,score:t.score,reason:`No user tag preferences configured`}]})):await Promise.all(t.map(async t=>{let c=t.tags??[],d=this.computeMultiplier(c,u.boost),m=Math.min(1,t.score*d),g;return g=d===0||d<1?`penalized`:d>1?`boosted`:`passed`,{...t,score:m,provenance:[...t.provenance,{strategy:`userTagPreference`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||this._strategyData._id,action:g,score:m,reason:this.buildReason(c,u.boost,d)}]}}))}async getWeightedCards(t){throw Error(`UserTagPreferenceFilter is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),filters_exports={},__export(filters_exports,{UserTagPreferenceFilter:()=>UserTagPreferenceFilter,createEloDistanceFilter:()=>createEloDistanceFilter}),init_filters=__esm({"src/core/navigators/filters/index.ts"(){"use strict";init_eloDistance(),init_userTagPreference()}}),inferredPreferenceStub_exports={},__export(inferredPreferenceStub_exports,{INFERRED_PREFERENCE_NAVIGATOR_STUB:()=>INFERRED_PREFERENCE_NAVIGATOR_STUB}),init_inferredPreferenceStub=__esm({"src/core/navigators/filters/inferredPreferenceStub.ts"(){"use strict";INFERRED_PREFERENCE_NAVIGATOR_STUB=!0}}),interferenceMitigator_exports={},__export(interferenceMitigator_exports,{default:()=>InterferenceMitigatorNavigator}),init_interferenceMitigator=__esm({"src/core/navigators/filters/interferenceMitigator.ts"(){"use strict";init_navigators(),DEFAULT_MIN_COUNT3=10,DEFAULT_MIN_ELAPSED_DAYS=3,DEFAULT_INTERFERENCE_DECAY=.8,InterferenceMitigatorNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`interferenceMap`,void 0),this.config=this.parseConfig(u.serializedData),this.interferenceMap=this.buildInterferenceMap(),this.name=u.name||`Interference Mitigator`}parseConfig(t){try{let c=JSON.parse(t),u=c.interferenceSets||[];return u.length>0&&Array.isArray(u[0])&&(u=u.map(t=>({tags:t}))),{interferenceSets:u,maturityThreshold:{minCount:c.maturityThreshold?.minCount??DEFAULT_MIN_COUNT3,minElo:c.maturityThreshold?.minElo,minElapsedDays:c.maturityThreshold?.minElapsedDays??DEFAULT_MIN_ELAPSED_DAYS},defaultDecay:c.defaultDecay??DEFAULT_INTERFERENCE_DECAY}}catch{return{interferenceSets:[],maturityThreshold:{minCount:DEFAULT_MIN_COUNT3,minElapsedDays:DEFAULT_MIN_ELAPSED_DAYS},defaultDecay:DEFAULT_INTERFERENCE_DECAY}}}buildInterferenceMap(){let t=new Map;for(let c of this.config.interferenceSets){let u=c.decay??this.config.defaultDecay??DEFAULT_INTERFERENCE_DECAY;for(let d of c.tags){t.has(d)||t.set(d,[]);let m=t.get(d);for(let t of c.tags)if(t!==d){let c=m.find(c=>c.partner===t);c?c.decay=Math.max(c.decay,u):m.push({partner:t,decay:u})}}}return t}async getImmatureTags(t){let c=new Set;try{let u=toCourseElo((await t.user.getCourseRegDoc(t.course.getCourseID())).elo),d=this.config.maturityThreshold?.minCount??DEFAULT_MIN_COUNT3,m=this.config.maturityThreshold?.minElo,g=(this.config.maturityThreshold?.minElapsedDays??DEFAULT_MIN_ELAPSED_DAYS)*2;for(let[t,b]of Object.entries(u.tags)){if(b.count===0)continue;let u=b.count<d,S=m!==void 0&&b.score<m,C=b.count<g;(u||S||C)&&c.add(t)}}catch{}return c}getTagsToAvoid(t){let c=new Map;for(let u of t){let d=this.interferenceMap.get(u);if(d){for(let{partner:u,decay:m}of d)if(!t.has(u)){let t=c.get(u)??0;c.set(u,Math.max(t,m))}}}return c}computeInterferenceEffect(t,c,u){if(c.size===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let d=1,m=[];for(let u of t){let t=c.get(u);t!==void 0&&(m.push(u),d*=1-t)}if(m.length===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let g=new Set;for(let t of m)for(let c of u)this.interferenceMap.get(c)?.some(c=>c.partner===t)&&g.add(c);let b=`Interferes with immature tags ${Array.from(g).join(`, `)} (tags: ${m.join(`, `)}, multiplier: ${d.toFixed(2)})`;return{multiplier:d,interferingTags:m,reason:b}}async transform(t,c){let u=await this.getImmatureTags(c),d=this.getTagsToAvoid(u),m=[];for(let c of t){let t=c.tags??[],{multiplier:g,reason:b}=this.computeInterferenceEffect(t,d,u),S=c.score*g,C=g<1?`penalized`:g>1?`boosted`:`passed`;m.push({...c,score:S,provenance:[...c.provenance,{strategy:`interferenceMitigator`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-interference`,action:C,score:S,reason:b}]})}return m}async getWeightedCards(t){throw Error(`InterferenceMitigatorNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),relativePriority_exports={},__export(relativePriority_exports,{default:()=>RelativePriorityNavigator}),init_relativePriority=__esm({"src/core/navigators/filters/relativePriority.ts"(){"use strict";init_navigators(),DEFAULT_PRIORITY=.5,DEFAULT_PRIORITY_INFLUENCE=.5,DEFAULT_COMBINE_MODE=`max`,RelativePriorityNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),this.config=this.parseConfig(u.serializedData),this.name=u.name||`Relative Priority`}parseConfig(t){try{let c=JSON.parse(t);return{tagPriorities:c.tagPriorities||{},defaultPriority:c.defaultPriority??DEFAULT_PRIORITY,combineMode:c.combineMode??DEFAULT_COMBINE_MODE,priorityInfluence:c.priorityInfluence??DEFAULT_PRIORITY_INFLUENCE}}catch{return{tagPriorities:{},defaultPriority:DEFAULT_PRIORITY,combineMode:DEFAULT_COMBINE_MODE,priorityInfluence:DEFAULT_PRIORITY_INFLUENCE}}}getTagPriority(t){return this.config.tagPriorities[t]??this.config.defaultPriority??DEFAULT_PRIORITY}computeCardPriority(t){if(t.length===0)return this.config.defaultPriority??DEFAULT_PRIORITY;let c=t.map(t=>this.getTagPriority(t));switch(this.config.combineMode){case`max`:return Math.max(...c);case`min`:return Math.min(...c);case`average`:return c.reduce((t,c)=>t+c,0)/c.length;default:return Math.max(...c)}}computeBoostFactor(t){let c=this.config.priorityInfluence??DEFAULT_PRIORITY_INFLUENCE;return 1+(t-.5)*c}buildPriorityReason(t,c,u,d){if(t.length===0)return`No tags, neutral priority (${c.toFixed(2)})`;let m=t.slice(0,3).join(`, `),g=t.length>3?` (+${t.length-3} more)`:``;return u===1?`Neutral priority (${c.toFixed(2)}) for tags: ${m}${g}`:u>1?`High-priority tags: ${m}${g} (priority ${c.toFixed(2)} \u2192 boost ${u.toFixed(2)}x \u2192 ${d.toFixed(2)})`:`Low-priority tags: ${m}${g} (priority ${c.toFixed(2)} \u2192 reduce ${u.toFixed(2)}x \u2192 ${d.toFixed(2)})`}async transform(t,c){return await Promise.all(t.map(async t=>{let c=t.tags??[],u=this.computeCardPriority(c),d=this.computeBoostFactor(u),m=Math.max(0,t.score*d),g=d>1?`boosted`:d<1?`penalized`:`passed`,b=this.buildPriorityReason(c,u,d,m);return{...t,score:m,provenance:[...t.provenance,{strategy:`relativePriority`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-priority`,action:g,score:m,reason:b}]}}))}async getWeightedCards(t){throw Error(`RelativePriorityNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),types_exports2={},init_types2=__esm({"src/core/navigators/filters/types.ts"(){"use strict";}}),userGoalStub_exports={},__export(userGoalStub_exports,{USER_GOAL_NAVIGATOR_STUB:()=>USER_GOAL_NAVIGATOR_STUB}),init_userGoalStub=__esm({"src/core/navigators/filters/userGoalStub.ts"(){"use strict";USER_GOAL_NAVIGATOR_STUB=!0}}),init_2=__esm({'import("./filters/**/*") in src/core/navigators/index.ts'(){globImport_filters=__glob({"./filters/WeightedFilter.ts":()=>Promise.resolve().then(()=>(init_WeightedFilter(),WeightedFilter_exports)),"./filters/eloDistance.ts":()=>Promise.resolve().then(()=>(init_eloDistance(),eloDistance_exports)),"./filters/hierarchyDefinition.ts":()=>Promise.resolve().then(()=>(init_hierarchyDefinition(),hierarchyDefinition_exports)),"./filters/index.ts":()=>Promise.resolve().then(()=>(init_filters(),filters_exports)),"./filters/inferredPreferenceStub.ts":()=>Promise.resolve().then(()=>(init_inferredPreferenceStub(),inferredPreferenceStub_exports)),"./filters/interferenceMitigator.ts":()=>Promise.resolve().then(()=>(init_interferenceMitigator(),interferenceMitigator_exports)),"./filters/relativePriority.ts":()=>Promise.resolve().then(()=>(init_relativePriority(),relativePriority_exports)),"./filters/types.ts":()=>Promise.resolve().then(()=>(init_types2(),types_exports2)),"./filters/userGoalStub.ts":()=>Promise.resolve().then(()=>(init_userGoalStub(),userGoalStub_exports)),"./filters/userTagPreference.ts":()=>Promise.resolve().then(()=>(init_userTagPreference(),userTagPreference_exports))})}}),init_gradient=__esm({"src/core/orchestration/gradient.ts"(){"use strict";init_logger()}}),init_learning=__esm({"src/core/orchestration/learning.ts"(){"use strict";init_contentNavigationStrategy(),init_types_legacy(),init_logger(),MIN_OBSERVATIONS_FOR_UPDATE=10,LEARNING_RATE=.1,MAX_WEIGHT_DELTA=.3,MIN_R_SQUARED_FOR_GRADIENT=.05,FLAT_GRADIENT_THRESHOLD=.02,MAX_HISTORY_LENGTH=100}}),init_signal=__esm({"src/core/orchestration/signal.ts"(){"use strict";}}),init_recording=__esm({"src/core/orchestration/recording.ts"(){"use strict";init_signal(),init_types_legacy(),init_logger()}}),init_orchestration=__esm({"src/core/orchestration/index.ts"(){"use strict";init_logger(),init_gradient(),init_learning(),init_signal(),init_recording(),MIN_SPREAD=.1,MAX_SPREAD=.5,MIN_WEIGHT=.1,MAX_WEIGHT=3}}),Pipeline_exports={},__export(Pipeline_exports,{Pipeline:()=>Pipeline,mergeHints:()=>mergeHints2}),init_Pipeline=__esm({"src/core/navigators/Pipeline.ts"(){"use strict";init_navigators(),init_logger(),init_orchestration(),init_PipelineDebugger(),VERBOSE_RESULTS=!0,Pipeline=class extends ContentNavigator{constructor(t,c,u,d){super(),_defineProperty$2(this,`generator`,void 0),_defineProperty$2(this,`filters`,void 0),_defineProperty$2(this,`_cachedOrchestration`,null),_defineProperty$2(this,`_tagCache`,new Map),_defineProperty$2(this,`_ephemeralHints`,null),this.generator=t,this.filters=c,this.user=u,this.course=d,d.getCourseConfig().then(t=>{logger.debug(`[pipeline] Crated pipeline for ${t.name}`)}).catch(t=>{logger.error(`[pipeline] Failed to lookup courseCfg: ${t}`)}),logPipelineConfig(t,c),registerPipelineForDebug(this)}setEphemeralHints(t){this._ephemeralHints=t,logger.info(`[Pipeline] Ephemeral hints set: ${JSON.stringify(t)}`)}async getWeightedCards(t){let c=performance.now(),u=await this.buildContext(),d=performance.now(),m=500;logger.debug(`[Pipeline] Fetching 500 candidates from generator '${this.generator.name}'`);let g=await this.generator.getWeightedCards(500,u),b=g.cards,S=performance.now(),C=b.length;this._ephemeralHints=mergeHints2([this._ephemeralHints,g.hints])??null;let w;if(this.generator.generators){let t=new Map;for(let c of b){let u=c.provenance[0];if(u){let d=u.strategyName;t.has(d)||t.set(d,{cards:[]}),t.get(d).cards.push(c)}}w=Array.from(t.entries()).map(([t,c])=>{let u=c.cards.filter(t=>t.provenance[0]?.reason?.includes(`new card`)),d=c.cards.filter(t=>t.provenance[0]?.reason?.includes(`review`));return{name:t,cardCount:c.cards.length,newCount:u.length,reviewCount:d.length,topScore:Math.max(...c.cards.map(t=>t.score),0)}})}logger.debug(`[Pipeline] Generator returned ${C} candidates`),b=await this.hydrateTags(b);let T=performance.now(),E=[...b],D=this._ephemeralHints;if(D?.requireCards?.length){let t=new Set(E.map(t=>t.cardId)),c=D.requireCards.filter(c=>!c.includes(`*`)&&!t.has(c));if(c.length>0){let t=await this.course.getAppliedTagsBatch(c),u=this.course.getCourseID();for(let d of c)E.push({cardId:d,courseId:u,score:1,tags:t.get(d)??[],provenance:[]});logger.info(`[Pipeline] Pre-fetched ${c.length} required card(s) into pool: ${c.join(`, `)}`)}}let O=new Set(b.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`)).map(t=>t.cardId)),Or=[];for(let t of this.filters){let c=b.length,d=new Map(b.map(t=>[t.cardId,t.score]));b=await t.transform(b,u);let m=0,g=0,S=0,C=c-b.length;for(let t of b){let c=d.get(t.cardId)??0;t.score>c?m++:t.score<c?g++:S++}if(Or.push({name:t.name,boosted:m,penalized:g,passed:S,removed:C}),O.size>0){let c=new Set(b.map(t=>t.cardId)),u=[...O].filter(t=>!c.has(t)),d=b.filter(t=>O.has(t.cardId)&&t.score===0).map(t=>t.cardId);(u.length>0||d.length>0)&&(logger.info(`[Pipeline] Filter '${t.name}' impact on prescribed cards: `+(u.length>0?`removed=[${u.join(`, `)}] `:``)+(d.length>0?`zeroed=[${d.join(`, `)}]`:``)),u.forEach(t=>O.delete(t)))}logger.debug(`[Pipeline] Filter '${t.name}': ${d.size} \u2192 ${b.length} cards (\u2191${m} \u2193${g} =${S})`)}b=b.filter(t=>t.score>0);let kr=this._ephemeralHints;kr&&(this._ephemeralHints=null,b=this.applyHints(b,kr,E)),b.sort((t,c)=>c.score-t.score);let Ar=performance.now(),jr=b.slice(0,t);logger.info(`[Pipeline:timing] total=${(Ar-c).toFixed(0)}ms (context=${(d-c).toFixed(0)} generate=${(S-d).toFixed(0)} hydrate=${(T-S).toFixed(0)} filter=${(Ar-T).toFixed(0)})`);let Mr=jr.slice(0,3).map(t=>t.score);logExecutionSummary(this.generator.name,C,this.filters.length,jr.length,Mr,Or),logResultCards(jr),logCardProvenance(jr,3);try{let t=await this.course?.getCourseConfig().then(t=>t.name).catch(()=>void 0);captureRun(buildRunReport(this.course?.getCourseID()||`unknown`,t,this.generator.name,w,C,Or,b,jr,u.userElo,kr??void 0))}catch(t){logger.debug(`[Pipeline] Failed to capture debug run: ${t}`)}return{cards:jr}}async hydrateTags(t){if(t.length===0)return t;let c=[];for(let u of t)this._tagCache.has(u.cardId)||c.push(u.cardId);if(c.length>0){let t=await this.course.getAppliedTagsBatch(c);for(let[c,u]of t)this._tagCache.set(c,u)}let u=new Map;for(let c of t)u.set(c.cardId,this._tagCache.get(c.cardId)??[]);return logTagHydration(t,u),t.map(t=>({...t,tags:this._tagCache.get(t.cardId)??[]}))}applyHints(t,c,u){let d=t.length;if(c.excludeCards?.length&&(t=t.filter(t=>!c.excludeCards.some(c=>globMatch(t.cardId,c)))),c.excludeTags?.length&&(t=t.filter(t=>!c.excludeTags.some(c=>cardMatchesTagPattern(t,c)))),c.boostTags)for(let[u,d]of Object.entries(c.boostTags))for(let m of t)cardMatchesTagPattern(m,u)&&(m.score*=d,m.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:c._label?`Replan Hint (${c._label})`:`Replan Hint`,action:`boosted`,score:m.score,reason:`boostTag ${u} \xD7${d}`}));if(c.boostCards)for(let[u,d]of Object.entries(c.boostCards))for(let m of t)globMatch(m.cardId,u)&&(m.score*=d,m.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:c._label?`Replan Hint (${c._label})`:`Replan Hint`,action:`boosted`,score:m.score,reason:`boostCard ${u} \xD7${d}`}));let m=new Set(t.map(t=>t.cardId)),g=new Map(t.map(t=>[t.cardId,t])),b=c._label?`Replan Hint (${c._label})`:`Replan Hint`,applyRequirement=(c,u)=>{let d=1/0,S=g.get(c.cardId);S?S.score<d&&(S.score=d,S.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:b,action:`boosted`,score:d,reason:`${u} (upgrade to mandatory score)`})):(t.push({...c,score:d,provenance:[...c.provenance,{strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:b,action:`boosted`,score:d,reason:u}]}),m.add(c.cardId),g.set(c.cardId,t[t.length-1]))};if(c.requireCards?.length)for(let t of c.requireCards){for(let c of m)globMatch(c,t)&&applyRequirement(g.get(c),`requireCard ${t}`);for(let c of u)globMatch(c.cardId,t)&&applyRequirement(c,`requireCard ${t}`)}if(c.requireTags?.length)for(let t of c.requireTags){for(let c of m){let u=g.get(c);cardMatchesTagPattern(u,t)&&applyRequirement(u,`requireTag ${t}`)}for(let c of u)cardMatchesTagPattern(c,t)&&applyRequirement(c,`requireTag ${t}`)}return logger.info(`[Pipeline] Hints applied: ${d} \u2192 ${t.length} cards`),t}async buildContext(){let t=1e3;try{t=toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo).global.score}catch(t){logger.debug(`[Pipeline] Could not get user ELO, using default: ${t}`)}this._cachedOrchestration||(this._cachedOrchestration=await createOrchestrationContext(this.user,this.course));let c=this._cachedOrchestration;return{user:this.user,course:this.course,userElo:t,orchestration:c}}getCourseID(){return this.course.getCourseID()}async getOrchestrationContext(){return createOrchestrationContext(this.user,this.course)}getStrategyIds(){let t=[],extractId=t=>t.strategyId?t.strategyId:null,c=extractId(this.generator);c&&t.push(c),this.generator.generators&&Array.isArray(this.generator.generators)&&this.generator.generators.forEach(c=>{let u=extractId(c);u&&t.push(u)});for(let c of this.filters){let u=extractId(c);u&&t.push(u)}return[...new Set(t)]}async getTagEloStatus(t){let c=toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo),u={};if(t){let d=Array.isArray(t)?t:[t];for(let t of d){let d=globToRegex(t);for(let[t,m]of Object.entries(c.tags))d.test(t)&&(u[t]={score:m.score,count:m.count})}}else for(let[t,d]of Object.entries(c.tags))u[t]={score:d.score,count:d.count};return u}async diagnoseCardSpace(t){let c=t?.threshold??.1,u=performance.now(),d=await this.course.getAllCardIds(),m=d.map(t=>({cardId:t,courseId:this.course.getCourseID(),score:1,provenance:[]}));m=await this.hydrateTags(m);let g=await this.buildContext(),b=[];for(let t of this.filters){m=await t.transform(m,g);let u=m.filter(t=>t.score>=c).length;b.push({name:t.name,wellIndicated:u})}let S=m.filter(t=>t.score>=c),C=new Set(S.map(t=>t.cardId)),w;try{let t=this.course.getCourseID(),c=await this.user.getSeenCards(t);w=new Set(c)}catch{w=new Set}let T=S.filter(t=>!w.has(t.cardId)),E=new Map;for(let t of m){let u=t.cardId.split(`-`)[1]||`unknown`;E.has(u)||E.set(u,{total:0,wellIndicated:0,new:0});let d=E.get(u);d.total++,t.score>=c&&(d.wellIndicated++,w.has(t.cardId)||d.new++)}let D=performance.now()-u,O={totalCards:d.length,threshold:c,wellIndicated:C.size,encountered:w.size,wellIndicatedNew:T.length,byType:Object.fromEntries(E),filterBreakdown:b,elapsedMs:Math.round(D)};logger.info(`[Pipeline:diagnose] Card space scan (${O.elapsedMs}ms):`),logger.info(`[Pipeline:diagnose] Total cards: ${O.totalCards}`),logger.info(`[Pipeline:diagnose] Well-indicated (score >= ${c}): ${O.wellIndicated}`),logger.info(`[Pipeline:diagnose] Encountered: ${O.encountered}`),logger.info(`[Pipeline:diagnose] Well-indicated & new: ${O.wellIndicatedNew}`),logger.info(`[Pipeline:diagnose] By type:`);for(let[t,c]of E)logger.info(`[Pipeline:diagnose] ${t}: ${c.wellIndicated}/${c.total} well-indicated, ${c.new} new`);logger.info(`[Pipeline:diagnose] After each filter:`);for(let t of b)logger.info(`[Pipeline:diagnose] ${t.name}: ${t.wellIndicated} well-indicated`);return O}}}}),defaults_exports={},__export(defaults_exports,{createDefaultEloStrategy:()=>createDefaultEloStrategy,createDefaultPipeline:()=>createDefaultPipeline,createDefaultSrsStrategy:()=>createDefaultSrsStrategy}),init_defaults=__esm({"src/core/navigators/defaults.ts"(){"use strict";init_navigators(),init_Pipeline(),init_CompositeGenerator(),init_elo(),init_srs(),init_eloDistance(),init_types_legacy()}}),PipelineAssembler_exports={},__export(PipelineAssembler_exports,{PipelineAssembler:()=>PipelineAssembler}),init_PipelineAssembler=__esm({"src/core/navigators/PipelineAssembler.ts"(){"use strict";init_navigators(),init_WeightedFilter(),init_Pipeline(),init_logger(),init_CompositeGenerator(),init_defaults(),PipelineAssembler=class{async assemble(t){let{strategies:c,user:u,course:d}=t,m=[];if(c.length===0)return{pipeline:null,generatorStrategies:[],filterStrategies:[],warnings:m};let g=[],b=[];for(let t of c)isGenerator(t.implementingClass)?g.push(t):isFilter(t.implementingClass)?b.push(t):m.push(`Unknown strategy type '${t.implementingClass}', skipping: ${t.name}`);let S=d.getCourseID(),C=g.some(t=>t.implementingClass===`elo`),w=g.some(t=>t.implementingClass===`srs`);if(C||(logger.debug(`[PipelineAssembler] No ELO generator configured, adding default`),g.push(createDefaultEloStrategy(S))),w||(logger.debug(`[PipelineAssembler] No SRS generator configured, adding default`),g.push(createDefaultSrsStrategy(S))),g.length===0)return m.push(`No generator strategy found`),{pipeline:null,generatorStrategies:[],filterStrategies:[],warnings:m};let T;g.length===1?(T=await ContentNavigator.create(u,d,g[0]),logger.debug(`[PipelineAssembler] Using single generator: ${g[0].name}`)):(logger.debug(`[PipelineAssembler] Using CompositeGenerator for ${g.length} generators: ${g.map(t=>t.name).join(`, `)}`),T=await CompositeGenerator.fromStrategies(u,d,g));let E=[],D=[...b].sort((t,c)=>t.name.localeCompare(c.name));for(let t of D)try{let c=await ContentNavigator.create(u,d,t);if(`transform`in c&&typeof c.transform==`function`){let u=c;t.learnable&&(u=new WeightedFilter(u,t.learnable,t.staticWeight,t._id)),E.push(u),logger.debug(`[PipelineAssembler] Added filter: ${t.name}`)}else m.push(`Filter '${t.name}' does not implement CardFilter.transform(), skipping`)}catch(c){m.push(`Failed to instantiate filter '${t.name}': ${c}`)}let O=new Pipeline(T,E,u,d);return logger.debug(`[PipelineAssembler] Assembled pipeline with ${g.length} generator(s) and ${E.length} filter(s)`),{pipeline:O,generatorStrategies:g,filterStrategies:D,warnings:m}}}}}),init_3=__esm({'import("./**/*") in src/core/navigators/index.ts'(){globImport=__glob({"./Pipeline.ts":()=>Promise.resolve().then(()=>(init_Pipeline(),Pipeline_exports)),"./PipelineAssembler.ts":()=>Promise.resolve().then(()=>(init_PipelineAssembler(),PipelineAssembler_exports)),"./PipelineDebugger.ts":()=>Promise.resolve().then(()=>(init_PipelineDebugger(),PipelineDebugger_exports)),"./defaults.ts":()=>Promise.resolve().then(()=>(init_defaults(),defaults_exports)),"./filters/WeightedFilter.ts":()=>Promise.resolve().then(()=>(init_WeightedFilter(),WeightedFilter_exports)),"./filters/eloDistance.ts":()=>Promise.resolve().then(()=>(init_eloDistance(),eloDistance_exports)),"./filters/hierarchyDefinition.ts":()=>Promise.resolve().then(()=>(init_hierarchyDefinition(),hierarchyDefinition_exports)),"./filters/index.ts":()=>Promise.resolve().then(()=>(init_filters(),filters_exports)),"./filters/inferredPreferenceStub.ts":()=>Promise.resolve().then(()=>(init_inferredPreferenceStub(),inferredPreferenceStub_exports)),"./filters/interferenceMitigator.ts":()=>Promise.resolve().then(()=>(init_interferenceMitigator(),interferenceMitigator_exports)),"./filters/relativePriority.ts":()=>Promise.resolve().then(()=>(init_relativePriority(),relativePriority_exports)),"./filters/types.ts":()=>Promise.resolve().then(()=>(init_types2(),types_exports2)),"./filters/userGoalStub.ts":()=>Promise.resolve().then(()=>(init_userGoalStub(),userGoalStub_exports)),"./filters/userTagPreference.ts":()=>Promise.resolve().then(()=>(init_userTagPreference(),userTagPreference_exports)),"./generators/CompositeGenerator.ts":()=>Promise.resolve().then(()=>(init_CompositeGenerator(),CompositeGenerator_exports)),"./generators/elo.ts":()=>Promise.resolve().then(()=>(init_elo(),elo_exports)),"./generators/index.ts":()=>Promise.resolve().then(()=>(init_generators(),generators_exports)),"./generators/prescribed.ts":()=>Promise.resolve().then(()=>(init_prescribed(),prescribed_exports)),"./generators/srs.ts":()=>Promise.resolve().then(()=>(init_srs(),srs_exports)),"./generators/types.ts":()=>Promise.resolve().then(()=>(init_types(),types_exports)),"./index.ts":()=>Promise.resolve().then(()=>(init_navigators(),navigators_exports))})}}),navigators_exports={},__export(navigators_exports,{ContentNavigator:()=>ContentNavigator,NavigatorRole:()=>NavigatorRole,NavigatorRoles:()=>NavigatorRoles,Navigators:()=>Navigators,getCardOrigin:()=>getCardOrigin,getRegisteredNavigator:()=>getRegisteredNavigator,getRegisteredNavigatorNames:()=>getRegisteredNavigatorNames,getRegisteredNavigatorRole:()=>getRegisteredNavigatorRole,hasRegisteredNavigator:()=>hasRegisteredNavigator,initializeNavigatorRegistry:()=>initializeNavigatorRegistry,isFilter:()=>isFilter,isGenerator:()=>isGenerator,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerNavigator:()=>registerNavigator}),init_navigators=__esm({"src/core/navigators/index.ts"(){"use strict";init_PipelineDebugger(),init_logger(),init_(),init_2(),init_3(),navigatorRegistry=new Map,Navigators=(t=>(t.ELO=`elo`,t.SRS=`srs`,t.PRESCRIBED=`prescribed`,t.HIERARCHY=`hierarchyDefinition`,t.INTERFERENCE=`interferenceMitigator`,t.RELATIVE_PRIORITY=`relativePriority`,t.USER_TAG_PREFERENCE=`userTagPreference`,t))(Navigators||{}),NavigatorRole=(t=>(t.GENERATOR=`generator`,t.FILTER=`filter`,t))(NavigatorRole||{}),NavigatorRoles={elo:`generator`,srs:`generator`,prescribed:`generator`,hierarchyDefinition:`filter`,interferenceMitigator:`filter`,relativePriority:`filter`,userTagPreference:`filter`},ContentNavigator=class{constructor(t,c,u){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`course`,void 0),_defineProperty$2(this,`strategyName`,void 0),_defineProperty$2(this,`strategyId`,void 0),_defineProperty$2(this,`learnable`,void 0),_defineProperty$2(this,`staticWeight`,void 0),this.user=t,this.course=c,u&&(this.strategyName=u.name,this.strategyId=u._id,this.learnable=u.learnable,this.staticWeight=u.staticWeight)}get strategyKey(){return this.constructor.name}async getStrategyState(){if(!this.user||!this.course)throw Error(`Cannot get strategy state: navigator not properly initialized. Ensure user and course are provided to constructor.`);return this.user.getStrategyState(this.course.getCourseID(),this.strategyKey)}async putStrategyState(t){if(!this.user||!this.course)throw Error(`Cannot put strategy state: navigator not properly initialized. Ensure user and course are provided to constructor.`);return this.user.putStrategyState(this.course.getCourseID(),this.strategyKey,t)}static async create(t,c,u){let d=u.implementingClass,m=getRegisteredNavigator(d);if(m)return logger.debug(`[ContentNavigator.create] Using registered navigator: ${d}`),new m(t,c,u);logger.debug(`[ContentNavigator.create] Navigator not in registry, attempting dynamic import: ${d}`);let g;for(let t of[`.ts`,`.js`,``]){try{if(g=(await globImport_generators(`./generators/${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load generator ${d}${t}:`,c)}try{if(g=(await globImport_filters(`./filters/${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load filter ${d}${t}:`,c)}try{if(g=(await globImport(`./${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load legacy ${d}${t}:`,c)}if(g)break}if(!g)throw Error(`Could not load navigator implementation for: ${d}`);return new g(t,c,u)}async getWeightedCards(t){throw Error(`${this.constructor.name} must implement getWeightedCards(). `)}setEphemeralHints(t){}}}}),init_courseDB=__esm({"src/impl/couch/courseDB.ts"(){"use strict";init_couch(),init_updateQueue(),init_types_legacy(),init_logger(),init_clientCache(),init_courseAPI(),init_courseLookupDB(),init_navigators(),init_PipelineAssembler(),init_defaults(),CoursesDB=class{constructor(t){_defineProperty$2(this,`_courseIDs`,void 0),t&&t.length>0?this._courseIDs=t:this._courseIDs=void 0}async getCourseList(){let t=await CourseLookup.allCourseWare();return logger.debug(`AllCourses: ${t.map(t=>t.name+`, `+t._id+`
|
|
352
|
+
`)}},mountPipelineDebugger()}}),CompositeGenerator_exports={},__export(CompositeGenerator_exports,{AggregationMode:()=>AggregationMode,default:()=>CompositeGenerator}),init_CompositeGenerator=__esm({"src/core/navigators/generators/CompositeGenerator.ts"(){"use strict";init_navigators(),init_logger(),AggregationMode=(t=>(t.MAX=`max`,t.AVERAGE=`average`,t.FREQUENCY_BOOST=`frequencyBoost`,t))(AggregationMode||{}),DEFAULT_AGGREGATION_MODE=`frequencyBoost`,FREQUENCY_BOOST_FACTOR=.1,CompositeGenerator=class _CompositeGenerator extends ContentNavigator{constructor(t,c=DEFAULT_AGGREGATION_MODE){if(super(),_defineProperty$2(this,`name`,`Composite Generator`),_defineProperty$2(this,`generators`,void 0),_defineProperty$2(this,`aggregationMode`,void 0),this.generators=t,this.aggregationMode=c,t.length===0)throw Error(`CompositeGenerator requires at least one generator`);logger.debug(`[CompositeGenerator] Created with ${t.length} generators, mode: ${c}`)}static async fromStrategies(t,c,u,d=DEFAULT_AGGREGATION_MODE){return new _CompositeGenerator(await Promise.all(u.map(u=>ContentNavigator.create(t,c,u))),d)}async getWeightedCards(t,c){if(!c)throw Error(`CompositeGenerator.getWeightedCards requires a GeneratorContext. It should be called via Pipeline, not directly.`);let u=await Promise.all(this.generators.map(u=>u.getWeightedCards(t,c))),d=[];u.forEach((t,c)=>{let u=t.cards,m=this.generators[c].name||`Generator ${c}`,g=u.filter(t=>t.provenance[0]?.reason?.includes(`new card`)),b=u.filter(t=>t.provenance[0]?.reason?.includes(`review`));if(u.length>0){let t=Math.max(...u.map(t=>t.score)).toFixed(2),c=[];g.length>0&&c.push(`${g.length} new`),b.length>0&&c.push(`${b.length} reviews`);let S=c.length>0?c.join(`, `):`${u.length} cards`;d.push(`${m}: ${S} (top: ${t})`)}else d.push(`${m}: 0 cards`)}),logger.info(`[Composite] Generator breakdown: ${d.join(` | `)}`);let m=new Map;u.forEach((t,u)=>{let d=t.cards,g=this.generators[u],b=g.learnable?.weight??1,S;if(g.learnable&&!g.staticWeight&&c.orchestration){let t=g.strategyId;t&&(b=c.orchestration.getEffectiveWeight(t,g.learnable),S=c.orchestration.getDeviation(t))}for(let t of d){t.provenance.length>0&&(t.provenance[0].effectiveWeight=b,t.provenance[0].deviation=S);let c=m.get(t.cardId)||[];c.push({card:t,weight:b}),m.set(t.cardId,c)}});let g=[];for(let[,t]of m){let c=t.map(t=>t.card),u=this.aggregateScores(t),d=Math.max(0,u),m=c.flatMap(t=>t.provenance),b=c[0].score,S=d>b?`boosted`:d<b?`penalized`:`passed`,C=this.buildAggregationReason(t,d);g.push({...c[0],score:d,provenance:[...m,{strategy:`composite`,strategyName:`Composite Generator`,strategyId:`COMPOSITE_GENERATOR`,action:S,score:d,reason:C}]})}return{cards:g.sort((t,c)=>c.score-t.score).slice(0,t),hints:mergeHints(u.map(t=>t.hints))}}buildAggregationReason(t,c){let u=t.map(t=>t.card),d=u.length,m=u.map(t=>t.score.toFixed(2)).join(`, `);if(d===1){let u=Math.abs(t[0].weight-1)>.001?` (w=${t[0].weight.toFixed(2)})`:``;return`Single generator, score ${c.toFixed(2)}${u}`}let g=u.map(t=>t.provenance[0]?.strategy||`unknown`).join(`, `);switch(this.aggregationMode){case`max`:return`Max of ${d} generators (${g}): scores [${m}] \u2192 ${c.toFixed(2)}`;case`average`:return`Weighted Avg of ${d} generators (${g}): scores [${m}] \u2192 ${c.toFixed(2)}`;case`frequencyBoost`:{let u=t.reduce((t,c)=>t+c.weight,0),m=t.reduce((t,c)=>t+c.card.score*c.weight,0),b=u>0?m/u:0,S=1+FREQUENCY_BOOST_FACTOR*(d-1);return`Frequency boost from ${d} generators (${g}): w-avg ${b.toFixed(2)} \xD7 ${S.toFixed(2)} \u2192 ${c.toFixed(2)}`}default:return`Aggregated from ${d} generators: ${c.toFixed(2)}`}}aggregateScores(t){let c=t.map(t=>t.card.score);switch(this.aggregationMode){case`max`:return Math.max(...c);case`average`:{let c=t.reduce((t,c)=>t+c.weight,0);return c===0?0:t.reduce((t,c)=>t+c.card.score*c.weight,0)/c}case`frequencyBoost`:{let c=t.reduce((t,c)=>t+c.weight,0),u=t.reduce((t,c)=>t+c.card.score*c.weight,0);return(c>0?u/c:0)*(1+FREQUENCY_BOOST_FACTOR*(t.length-1))}default:return c[0]}}}}}),elo_exports={},__export(elo_exports,{default:()=>ELONavigator}),init_elo=__esm({"src/core/navigators/generators/elo.ts"(){"use strict";init_navigators(),init_logger(),ELO_RELEVANCE_SIGMA=300,ELONavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),this.name=u?.name||`ELO`}async getWeightedCards(t,c){let u;u=c?.userElo===void 0?toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo).global.score:c.userElo;let d=await this.user.getActiveCards(),m=(await this.course.getCardsCenteredAtELO({limit:t,elo:`user`},t=>!d.some(c=>t.cardID===c.cardID))).map(t=>({...t,status:`new`})).map(t=>{let c=t.elo??1e3,d=Math.abs(c-u),m=Math.exp(-((d/ELO_RELEVANCE_SIGMA)**2)),g=m*(.5+.5*Math.random());return{cardId:t.cardID,courseId:t.courseID,score:g,provenance:[{strategy:`elo`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-ELO-default`,action:`generated`,score:g,reason:`ELO distance ${Math.round(d)} (card: ${Math.round(c)}, user: ${Math.round(u)}), relevance ${m.toFixed(3)}, key ${g.toFixed(3)}`}]}});m.sort((t,c)=>c.score-t.score);let g=m.slice(0,t);if(g.length>0){let t=g.slice(0,3).map(t=>t.score.toFixed(2)).join(`, `);logger.info(`[ELO] Course ${this.course.getCourseID()}: ${g.length} new cards (top scores: ${t})`)}else logger.info(`[ELO] Course ${this.course.getCourseID()}: No new cards available`);return{cards:g}}}}}),generators_exports={},init_generators=__esm({"src/core/navigators/generators/index.ts"(){"use strict";}}),prescribed_exports={},__export(prescribed_exports,{default:()=>PrescribedCardsGenerator}),init_prescribed=__esm({"src/core/navigators/generators/prescribed.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_FRESHNESS_WINDOW=3,DEFAULT_MAX_DIRECT_PER_RUN=3,DEFAULT_MAX_SUPPORT_PER_RUN=3,DEFAULT_HIERARCHY_DEPTH=2,DEFAULT_MIN_COUNT=3,BASE_TARGET_SCORE=1,BASE_SUPPORT_SCORE=.8,DISCOVERED_SUPPORT_SCORE=12,MAX_TARGET_MULTIPLIER=8,MAX_SUPPORT_MULTIPLIER=4,PRESCRIBED_DEBUG_VERSION=`testversion-prescribed-v3`,PrescribedCardsGenerator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`config`,void 0),this.name=u.name||`Prescribed Cards`,this.config=this.parseConfig(u.serializedData),logger.debug(`[Prescribed] Initialized with ${this.config.groups.length} groups and ${this.config.groups.reduce((t,c)=>t+c.targetCardIds.length,0)} targets`)}get strategyKey(){return`PrescribedProgress`}async getWeightedCards(t,c){if(this.config.groups.length===0||t<=0)return{cards:[]};let u=this.course.getCourseID(),d=await this.user.getActiveCards(),m=new Set(d.map(t=>t.cardID)),g=await this.user.getSeenCards(u).catch(()=>[]),b=new Set(g),S=await this.getStrategyState()??{updatedAt:isoNow(),groups:{}},C=await this.loadHierarchyConfigs(),w=await this.user.getCourseRegDoc(u).catch(()=>null),T=typeof w?.elo==`number`?w.elo:w?.elo?.global?.score??c?.userElo??1e3,E=typeof w?.elo==`number`?{}:w?.elo?.tags??{},D=dedupe(this.config.groups.flatMap(t=>t.targetCardIds)),O=dedupe(this.config.groups.flatMap(t=>t.supportCardIds??[])),Or=dedupe([...D,...O]),kr=Or.length>0?await this.course.getAppliedTagsBatch(Or):new Map,Ar=await this.course.getCourseTagStubs().catch(()=>({rows:[],offset:0,total_rows:0})),jr=new Map;for(let t of Ar.rows??[]){let c=t.doc;c?.name&&Array.isArray(c.taggedCards)&&jr.set(c.name,[...c.taggedCards])}let Mr={updatedAt:isoNow(),groups:{}},Nr=[],Pr=new Set,Fr=[];for(let t of this.config.groups){let c=this.buildGroupRuntimeState({group:t,priorState:S.groups[t.id],activeIds:m,seenIds:b,tagsByCard:kr,cardsByTag:jr,hierarchyConfigs:C,userTagElo:E,userGlobalElo:T});Fr.push(c),logger.info(`[Prescribed] Group '${t.id}': ${t.targetCardIds.length} targets total, ${c.encounteredTargets.size} encountered, ${c.pendingTargets.length} pending (${c.surfaceableTargets.length} surfaceable, ${c.blockedTargets.length} blocked), ${c.supportCandidates.length} authored support candidates, ${c.discoveredSupportCandidates.length} discovered support candidates, pressure=${c.pressureMultiplier.toFixed(2)}`),c.blockedTargets.length>0&&(logger.info(`[Prescribed] Group '${t.id}' blocked targets: ${c.blockedTargets.join(`, `)}`),logger.info(`[Prescribed] Group '${t.id}' support tags needed: ${c.supportTags.join(`, `)||`(none)`}`),logger.info(`[Prescribed] Group '${t.id}' escalation mode: `+(c.supportCandidates.length>0?`direct-support`:c.discoveredSupportCandidates.length>0?`inserted-support-candidates`:`boost-only`)),c.discoveredSupportCandidates.length>0&&logger.info(`[Prescribed] Group '${t.id}' discovered support candidates: ${c.discoveredSupportCandidates.join(`, `)}`)),Mr.groups[t.id]=this.buildNextGroupState(c,S.groups[t.id]);let d=this.buildDirectTargetCards(c,u,Pr),g=this.buildSupportCards(c,u,Pr),w=this.buildDiscoveredSupportCards(c,u,Pr);Nr.push(...d,...g,...w)}let Ir=this.buildSupportHintSummary(Fr),Lr=Object.keys(Ir.boostTags).length>0?{boostTags:Ir.boostTags,_label:`prescribed-support (${Ir.supportTags.length} tags; blocked=${Ir.blockedTargetIds.length}; testversion=${PRESCRIBED_DEBUG_VERSION})`}:void 0;if(Lr){let t=Object.entries(Lr.boostTags??{});logger.info(`[Prescribed] Emitting ${t.length} boost hint(s): `+t.map(([t,c])=>`${t}\xD7${c.toFixed(1)}`).join(`, `))}else logger.info(`[Prescribed] No hints to emit (no blocked targets or no support tags)`);if(Nr.length===0)return logger.info(`[Prescribed] 0 cards emitted (all targets blocked, authored/discovered support candidates exhausted)`+(Lr?` — boost hints emitted but may not survive filters`:``)),await this.putStrategyState(Mr).catch(t=>{logger.debug(`[Prescribed] Failed to persist empty-state update: ${t}`)}),Lr?{cards:[],hints:Lr}:{cards:[]};let Rr=pickTopByScore(Nr,t),zr=new Map;for(let t of Rr){let c=t.provenance[0],u=c?.reason.match(/group=([^;]+)/)?.[1],d=c?.reason.includes(`mode=support`)?`supportIds`:`targetIds`;u&&(zr.has(u)||zr.set(u,{targetIds:[],supportIds:[]}),zr.get(u)[d].push(t.cardId))}for(let t of this.config.groups){let c=Mr.groups[t.id],u=zr.get(t.id);u&&(u.targetIds.length>0||u.supportIds.length>0)&&(c.lastSurfacedAt=isoNow(),c.sessionsSinceSurfaced=0,u.supportIds.length>0&&(c.lastSupportAt=isoNow()))}return await this.putStrategyState(Mr).catch(t=>{logger.debug(`[Prescribed] Failed to persist prescribed progress: ${t}`)}),logger.info(`[Prescribed] Emitting ${Rr.length} cards (${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=target`)).length} target, ${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=support`)).length} support, ${Rr.filter(t=>t.provenance[0]?.reason.includes(`mode=discovered-support`)).length} discovered support)`),Lr?{cards:Rr,hints:Lr}:{cards:Rr}}buildSupportHintSummary(t){let c={},u=new Set,d=new Set;for(let m of t)if(!(m.blockedTargets.length===0||m.supportTags.length===0)){m.blockedTargets.forEach(t=>u.add(t));for(let t of m.supportTags)d.add(t),c[t]=(c[t]??1)*m.supportMultiplier}return{boostTags:c,blockedTargetIds:[...u].sort(),supportTags:[...d].sort()}}parseConfig(t){try{let c=JSON.parse(t);return{groups:(Array.isArray(c.groups)?c.groups:[]).map((t,c)=>({id:typeof t.id==`string`&&t.id.trim().length>0?t.id:`group-${c+1}`,targetCardIds:dedupe(Array.isArray(t.targetCardIds)?t.targetCardIds.filter(t=>typeof t==`string`):[]),supportCardIds:dedupe(Array.isArray(t.supportCardIds)?t.supportCardIds.filter(t=>typeof t==`string`):[]),supportTagPatterns:dedupe(Array.isArray(t.supportTagPatterns)?t.supportTagPatterns.filter(t=>typeof t==`string`):[]),freshnessWindowSessions:typeof t.freshnessWindowSessions==`number`?t.freshnessWindowSessions:DEFAULT_FRESHNESS_WINDOW,maxDirectTargetsPerRun:typeof t.maxDirectTargetsPerRun==`number`?t.maxDirectTargetsPerRun:DEFAULT_MAX_DIRECT_PER_RUN,maxSupportCardsPerRun:typeof t.maxSupportCardsPerRun==`number`?t.maxSupportCardsPerRun:DEFAULT_MAX_SUPPORT_PER_RUN,hierarchyWalk:{enabled:t.hierarchyWalk?.enabled!==!1,maxDepth:typeof t.hierarchyWalk?.maxDepth==`number`?t.hierarchyWalk.maxDepth:DEFAULT_HIERARCHY_DEPTH},retireOnEncounter:t.retireOnEncounter!==!1})).filter(t=>t.targetCardIds.length>0)}}catch{return{groups:[]}}}async loadHierarchyConfigs(){try{return(await this.course.getAllNavigationStrategies()).filter(t=>t.implementingClass===`hierarchyDefinition`).map(t=>{try{return{prerequisites:JSON.parse(t.serializedData).prerequisites||{}}}catch{return{prerequisites:{}}}})}catch(t){return logger.debug(`[Prescribed] Failed to load hierarchy configs: ${t}`),[]}}buildGroupRuntimeState(t){let{group:c,priorState:u,activeIds:d,seenIds:m,tagsByCard:g,cardsByTag:b,hierarchyConfigs:S,userTagElo:C,userGlobalElo:w}=t,T=new Set;for(let t of c.targetCardIds)(d.has(t)||m.has(t))&&T.add(t);if(u?.encounteredCardIds?.length)for(let t of u.encounteredCardIds)T.add(t);let E=c.targetCardIds.filter(t=>!T.has(t)),D=new Map;for(let t of E)D.set(t,g.get(t)??[]);let O=[],Or=[],kr=new Set;for(let t of E){let u=D.get(t)??[],d=this.resolveBlockedSupportTags(u,S,C,w,c.hierarchyWalk?.enabled!==!1,c.hierarchyWalk?.maxDepth??DEFAULT_HIERARCHY_DEPTH),m=u.filter(t=>t.startsWith(`gpc:intro:`)),g=new Set(u.filter(t=>t.startsWith(`gpc:expose:`)));for(let t of m){let c=t.slice(10);c&&g.add(`gpc:expose:${c}`)}let b=[...g].filter(t=>{let c=C[t];return!c||c.count<DEFAULT_MIN_COUNT});b.length>0&&b.forEach(t=>kr.add(t)),d.blocked||b.length>0?(O.push(t),d.supportTags.forEach(t=>kr.add(t))):Or.push(t)}let Ar=dedupe([...c.supportCardIds??[],...this.findSupportCardsByTags(c,g,[...kr])]).filter(t=>!d.has(t)&&!m.has(t)),jr=O.length>0&&kr.size>0&&Ar.length===0?this.findDiscoveredSupportCards({supportTags:[...kr],cardsByTag:b,activeIds:d,seenIds:m,excludedIds:new Set([...c.targetCardIds,...c.supportCardIds??[]]),limit:c.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN}):[];O.length>0&&kr.size>0&&jr.length===0&&logger.info(`[Prescribed] Group '${c.id}' discovered 0 broader support candidates (blocked=${O.length}; authoredSupport=${Ar.length})`);let Mr=u?.sessionsSinceSurfaced??0,Nr=c.freshnessWindowSessions??DEFAULT_FRESHNESS_WINDOW,Pr=Math.max(0,Mr-Nr),Fr=E.length===0?1:clamp(1+Pr*.75+Math.min(2,E.length*.1),1,MAX_TARGET_MULTIPLIER),Ir=O.length===0?1:clamp(1+Pr*.5+Math.min(1.5,O.length*.15),1,MAX_SUPPORT_MULTIPLIER);return{group:c,encounteredTargets:T,pendingTargets:E,blockedTargets:O,surfaceableTargets:Or,targetTags:D,supportCandidates:Ar,discoveredSupportCandidates:jr,supportTags:[...kr],pressureMultiplier:Fr,supportMultiplier:Ir,debugVersion:PRESCRIBED_DEBUG_VERSION}}buildNextGroupState(t,c){let u=c?.sessionsSinceSurfaced??0,d=!1;return{encounteredCardIds:[...t.encounteredTargets].sort(),pendingTargetIds:[...t.pendingTargets].sort(),lastSurfacedAt:c?.lastSurfacedAt??null,sessionsSinceSurfaced:u+1,lastSupportAt:c?.lastSupportAt??null,blockedTargetIds:[...t.blockedTargets].sort(),lastResolvedSupportTags:[...t.supportTags].sort()}}buildDirectTargetCards(t,c,u){let d=t.group.maxDirectTargetsPerRun??DEFAULT_MAX_DIRECT_PER_RUN,m=t.surfaceableTargets.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:BASE_TARGET_SCORE*t.pressureMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:BASE_TARGET_SCORE*t.pressureMultiplier,reason:`mode=target;group=${t.group.id};pending=${t.pendingTargets.length};surfaceable=${t.surfaceableTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.pressureMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}buildSupportCards(t,c,u){if(t.blockedTargets.length===0||t.supportCandidates.length===0)return[];let d=t.group.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN,m=t.supportCandidates.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:BASE_SUPPORT_SCORE*t.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:BASE_SUPPORT_SCORE*t.supportMultiplier,reason:`mode=support;group=${t.group.id};pending=${t.pendingTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportCard=${d};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.supportMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}buildDiscoveredSupportCards(t,c,u){if(t.blockedTargets.length===0||t.discoveredSupportCandidates.length===0)return[];let d=t.group.maxSupportCardsPerRun??DEFAULT_MAX_SUPPORT_PER_RUN,m=t.discoveredSupportCandidates.filter(t=>!u.has(t)).slice(0,d),g=[];for(let d of m)u.add(d),g.push({cardId:d,courseId:c,score:DISCOVERED_SUPPORT_SCORE*t.supportMultiplier,provenance:[{strategy:`prescribed`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-prescribed`,action:`generated`,score:DISCOVERED_SUPPORT_SCORE*t.supportMultiplier,reason:`mode=discovered-support;group=${t.group.id};pending=${t.pendingTargets.length};blocked=${t.blockedTargets.length};blockedTargets=${t.blockedTargets.join(`|`)||`none`};supportCard=${d};supportTags=${t.supportTags.join(`|`)||`none`};multiplier=${t.supportMultiplier.toFixed(2)};testversion=${t.debugVersion}`}]});return g}findSupportCardsByTags(t,c,u){if(u.length===0)return[];let d=t.supportCardIds??[],m=t.supportTagPatterns??[];if(d.length===0&&m.length===0)return[];let g=new Set;for(let t of d){let d=c.get(t)??[],b=u.some(t=>d.includes(t)),S=m.some(t=>d.some(c=>matchesTagPattern(c,t)));(b||S)&&g.add(t)}return[...g]}findDiscoveredSupportCards(t){let{supportTags:c,cardsByTag:u,activeIds:d,seenIds:m,excludedIds:g,limit:b}=t,S=new Map;for(let t of c){let c=u.get(t)??[];for(let t of c){if(d.has(t)||m.has(t)||g.has(t))continue;let c=S.get(t);c?c.matches+=1:S.set(t,{cardId:t,matches:1})}}let C=[...S.values()].sort((t,c)=>c.matches-t.matches||t.cardId.localeCompare(c.cardId)),w=new Set,T=[],E=[];for(let t of C){let c=extractWordStem(t.cardId);w.has(c)?E.push(t):(w.add(c),T.push(t))}return shuffleInPlace(T),shuffleInPlace(E),[...T,...E].slice(0,b).map(t=>t.cardId)}resolveBlockedSupportTags(t,c,u,d,m,g){let b=new Set,S=!1;for(let C of t){let t=c.map(t=>t.prerequisites[C]).filter(t=>Array.isArray(t)&&t.length>0);if(t.length!==0&&t.some(t=>t.some(t=>!this.isPrerequisiteMet(t,u[t.tag],d)))){if(S=!0,!m){for(let c of t)for(let t of c)this.isPrerequisiteMet(t,u[t.tag],d)||b.add(t.tag);continue}for(let m of t)for(let t of m)this.isPrerequisiteMet(t,u[t.tag],d)||this.collectSupportTagsRecursive(t.tag,c,u,d,g,new Set,b)}}return{blocked:S,supportTags:[...b]}}collectSupportTagsRecursive(t,c,u,d,m,g,b){if(m<0||g.has(t))return;g.add(t);let S=!1;for(let C of c){let w=C.prerequisites[t];if(!w||w.length===0)continue;let T=w.filter(t=>!this.isPrerequisiteMet(t,u[t.tag],d));if(T.length>0&&m>0){S=!0;for(let t of T)this.collectSupportTagsRecursive(t.tag,c,u,d,m-1,g,b)}}S||b.add(t)}isPrerequisiteMet(t,c,u){if(!c)return!1;let d=t.masteryThreshold?.minCount??DEFAULT_MIN_COUNT;return c.count<d?!1:t.masteryThreshold?.minElo===void 0?t.masteryThreshold?.minCount===void 0?c.score>=u:!0:c.score>=t.masteryThreshold.minElo}}}}),srs_exports={},__export(srs_exports,{default:()=>SRSNavigator}),init_srs=__esm({"src/core/navigators/generators/srs.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_HEALTHY_BACKLOG=20,MAX_BACKLOG_PRESSURE=.5,SRSNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`healthyBacklog`,void 0),this.name=u?.name||`SRS`,this.healthyBacklog=this.parseConfig(u?.serializedData).healthyBacklog??DEFAULT_HEALTHY_BACKLOG}parseConfig(t){if(!t)return{};try{return JSON.parse(t)}catch{return logger.warn(`[SRS] Failed to parse strategy config, using defaults`),{}}}async getWeightedCards(t,c){if(!this.user||!this.course)throw Error(`SRSNavigator requires user and course to be set`);let u=this.course.getCourseID(),d=await this.user.getPendingReviews(u),m=hooks.utc(),g=d.filter(t=>m.isAfter(hooks.utc(t.reviewTime)));if(g.length>0){let t=[...new Set(g.map(t=>t.cardId))],c=await this.course.getAppliedTagsBatch(t),u=[];if(g=g.filter(t=>(c.get(t.cardId)??[]).includes(`srs:skip`)?(u.push(t._id),!1):!0),u.length>0){logger.info(`[SRS] Removing ${u.length} scheduled reviews for srs:skip cards`);for(let t of u)this.user.removeScheduledCardReview(t)}}let b=this.computeBacklogPressure(g.length);if(g.length>0){let t=b>0?` [backlog pressure: +${b.toFixed(2)}]`:` [healthy backlog]`;logger.info(`[SRS] Course ${u}: ${g.length} reviews due now (of ${d.length} scheduled)${t}`)}else if(d.length>0){let t=[...d].sort((t,c)=>hooks.utc(t.reviewTime).diff(hooks.utc(c.reviewTime)))[0],c=hooks.utc(t.reviewTime),g=hooks.duration(c.diff(m)),b=g.asHours()<1?`${Math.round(g.asMinutes())}m`:g.asHours()<24?`${Math.round(g.asHours())}h`:`${Math.round(g.asDays())}d`;logger.info(`[SRS] Course ${u}: 0 reviews due now (${d.length} scheduled, next in ${b})`)}else logger.info(`[SRS] Course ${u}: No reviews scheduled`);return{cards:g.map(t=>{let{score:c,reason:u}=this.computeUrgencyScore(t,m,b);return{cardId:t.cardId,courseId:t.courseId,score:c,reviewID:t._id,provenance:[{strategy:`srs`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-SRS-default`,action:`generated`,score:c,reason:u}]}}).sort((t,c)=>c.score-t.score).slice(0,t)}}computeBacklogPressure(t){if(t<=this.healthyBacklog)return 0;let c=(t-this.healthyBacklog)/this.healthyBacklog*(MAX_BACKLOG_PRESSURE/2);return Math.min(MAX_BACKLOG_PRESSURE,c)}computeUrgencyScore(t,c,u){let d=hooks.utc(t.scheduledAt),m=hooks.utc(t.reviewTime),g=Math.max(1,m.diff(d,`hours`)),b=c.diff(m,`hours`),S=b/g,C=.3+.7*Math.exp(-g/720),w=.5+(Math.min(1,Math.max(0,S))*.5+C*.5)*.45,T=Math.min(1,w+u),E=[`${Math.round(b)}h overdue`,`interval: ${Math.round(g)}h`,`relative: ${S.toFixed(2)}`,`recency: ${C.toFixed(2)}`];return u>0&&E.push(`backlog: +${u.toFixed(2)}`),E.push(`review`),{score:T,reason:E.join(`, `)}}}}}),types_exports={},init_types=__esm({"src/core/navigators/generators/types.ts"(){"use strict";}}),init_=__esm({'import("./generators/**/*") in src/core/navigators/index.ts'(){globImport_generators=__glob({"./generators/CompositeGenerator.ts":()=>Promise.resolve().then(()=>(init_CompositeGenerator(),CompositeGenerator_exports)),"./generators/elo.ts":()=>Promise.resolve().then(()=>(init_elo(),elo_exports)),"./generators/index.ts":()=>Promise.resolve().then(()=>(init_generators(),generators_exports)),"./generators/prescribed.ts":()=>Promise.resolve().then(()=>(init_prescribed(),prescribed_exports)),"./generators/srs.ts":()=>Promise.resolve().then(()=>(init_srs(),srs_exports)),"./generators/types.ts":()=>Promise.resolve().then(()=>(init_types(),types_exports))})}}),init_contentNavigationStrategy=__esm({"src/core/types/contentNavigationStrategy.ts"(){"use strict";DEFAULT_LEARNABLE_WEIGHT={weight:1,confidence:.1,sampleSize:0}}}),WeightedFilter_exports={},__export(WeightedFilter_exports,{WeightedFilter:()=>WeightedFilter}),init_WeightedFilter=__esm({"src/core/navigators/filters/WeightedFilter.ts"(){"use strict";init_contentNavigationStrategy(),WeightedFilter=class{constructor(t,c=DEFAULT_LEARNABLE_WEIGHT,u=!1,d){_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`inner`,void 0),_defineProperty$2(this,`learnable`,void 0),_defineProperty$2(this,`staticWeight`,void 0),_defineProperty$2(this,`strategyId`,void 0),this.inner=t,this.name=t.name,this.learnable=c,this.staticWeight=u,this.strategyId=d}async transform(t,c){let u=this.learnable.weight,d;if(!this.staticWeight&&c.orchestration){let t=this.strategyId||this.inner.strategyId||this.name;u=c.orchestration.getEffectiveWeight(t,this.learnable),d=c.orchestration.getDeviation(t)}if(Math.abs(u-1)<.001)return this.inner.transform(t,c);let m=new Map;for(let c of t)m.set(c.cardId,c.score);return(await this.inner.transform(t,c)).map(t=>{let c=m.get(t.cardId);if(c===void 0||c===0||t.score===0)return t;let g=t.score/c;if(Math.abs(g-1)<1e-4)return t;let b=c*g**+u,S=t.provenance.length-1,C=t.provenance[S];if(C){let c=[...t.provenance];return c[S]={...C,score:b,effectiveWeight:u,deviation:d},{...t,score:b,provenance:c}}return{...t,score:b}})}}}}),eloDistance_exports={},__export(eloDistance_exports,{DEFAULT_HALF_LIFE:()=>DEFAULT_HALF_LIFE,DEFAULT_MAX_MULTIPLIER:()=>DEFAULT_MAX_MULTIPLIER,DEFAULT_MIN_MULTIPLIER:()=>DEFAULT_MIN_MULTIPLIER,createEloDistanceFilter:()=>createEloDistanceFilter}),init_eloDistance=__esm({"src/core/navigators/filters/eloDistance.ts"(){"use strict";DEFAULT_HALF_LIFE=200,DEFAULT_MIN_MULTIPLIER=.3,DEFAULT_MAX_MULTIPLIER=1}}),hierarchyDefinition_exports={},__export(hierarchyDefinition_exports,{default:()=>HierarchyDefinitionNavigator}),init_hierarchyDefinition=__esm({"src/core/navigators/filters/hierarchyDefinition.ts"(){"use strict";init_navigators(),init_logger(),DEFAULT_MIN_COUNT2=3,HierarchyDefinitionNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),this.config=this.parseConfig(u.serializedData),this.name=u.name||`Hierarchy Definition`}parseConfig(t){try{return{prerequisites:JSON.parse(t).prerequisites||{}}}catch{return{prerequisites:{}}}}isPrerequisiteMet(t,c,u){if(!c)return!1;let d=t.masteryThreshold?.minCount??DEFAULT_MIN_COUNT2;return c.count<d?!1:t.masteryThreshold?.minElo===void 0?t.masteryThreshold?.minCount===void 0?c.score>=u:!0:c.score>=t.masteryThreshold.minElo}async getMasteredTags(t){let c=new Set;try{let u=toCourseElo((await t.user.getCourseRegDoc(t.course.getCourseID())).elo);for(let t of Object.values(this.config.prerequisites))for(let d of t){let t=u.tags[d.tag];this.isPrerequisiteMet(d,t,u.global.score)&&c.add(d.tag)}}catch{}return c}getUnlockedTags(t){let c=new Set;for(let[u,d]of Object.entries(this.config.prerequisites))d.every(c=>t.has(c.tag))&&c.add(u);return c}hasPrerequisites(t){return t in this.config.prerequisites}async checkCardUnlock(t,c,u,d){try{let c=t.tags??[],m=c.filter(t=>this.hasPrerequisites(t)&&!u.has(t));return m.length===0?{isUnlocked:!0,reason:`Prerequisites met, tags: ${c.length>0?c.join(`, `):`none`}`}:{isUnlocked:!1,reason:`Blocked: missing prerequisites ${m.flatMap(t=>(this.config.prerequisites[t]||[]).filter(t=>!d.has(t.tag)).map(t=>t.tag)).join(`, `)} for tags ${m.join(`, `)}`}}catch{return{isUnlocked:!0,reason:`Prerequisites check skipped (tag lookup failed)`}}}getPreReqBoosts(t,c){let u=new Map;for(let[d,m]of Object.entries(this.config.prerequisites))if(!t.has(d))for(let t of m){if(!t.preReqBoost||t.preReqBoost<=1||c.has(t.tag))continue;let d=u.get(t.tag)??1;u.set(t.tag,Math.max(d,t.preReqBoost))}return u}getTargetBoosts(t){let c=new Map,u=Object.keys(this.config.prerequisites),d=[...t];logger.info(`[HierarchyDefinition:targetBoost:trace] ${this.name} | configKeys=${u.length}, unlocked=${d.length} (${d.slice(0,5).join(`, `)}${d.length>5?`...`:``})`);for(let[u,d]of Object.entries(this.config.prerequisites))if(t.has(u)){logger.info(`[HierarchyDefinition:targetBoost:trace] UNLOCKED ${u}: ${d.length} prereqs, raw=${JSON.stringify(d.map(t=>({tag:t.tag,tb:t.targetBoost})))}`);for(let t of d){if(!t.targetBoost||t.targetBoost<=1)continue;let d=c.get(u)??1;c.set(u,Math.max(d,t.targetBoost))}}return c.size>0?logger.info(`[HierarchyDefinition] targetBoosts active: ${[...c.entries()].map(([t,c])=>`${t}=\xD7${c}`).join(`, `)}`):logger.info(`[HierarchyDefinition:targetBoost:trace] no targetBoosts found despite ${d.length} unlocked tags`),c}async transform(t,c){let u=await this.getMasteredTags(c),d=this.getUnlockedTags(u),m=this.getPreReqBoosts(d,u),g=this.getTargetBoosts(d),b=[];for(let S of t){let{isUnlocked:t,reason:C}=await this.checkCardUnlock(S,c.course,d,u),w=t?S.score:S.score*.02,T=t?`passed`:`penalized`,E=C;if(t&&m.size>0){let t=S.tags??[],c=1,u=[];for(let d of t){let t=m.get(d);t&&t>c&&(c=t,u.push(d))}c>1&&(w*=c,T=`boosted`,E=`${C} | preReqBoost \xD7${c.toFixed(2)} for ${u.join(`, `)}`,logger.info(`[HierarchyDefinition] preReqBoost \xD7${c.toFixed(2)} applied to card ${S.cardId} via tags [${u.join(`, `)}] (score: ${S.score.toFixed(3)} \u2192 ${w.toFixed(3)})`))}if(t&&g.size>0){let t=S.tags??[],c=1,u=[];for(let d of t){let t=g.get(d);t&&t>c&&(c=t,u.push(d))}c>1&&(w*=c,T=`boosted`,E=`${E} | targetBoost \xD7${c.toFixed(2)} for ${u.join(`, `)}`,logger.info(`[HierarchyDefinition] targetBoost \xD7${c.toFixed(2)} applied to card ${S.cardId} via tags [${u.join(`, `)}] (score: ${S.score.toFixed(3)} \u2192 ${w.toFixed(3)})`))}b.push({...S,score:w,provenance:[...S.provenance,{strategy:`hierarchyDefinition`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-hierarchy`,action:T,score:w,reason:E}]})}return b}async getWeightedCards(t){throw Error(`HierarchyDefinitionNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),userTagPreference_exports={},__export(userTagPreference_exports,{default:()=>UserTagPreferenceFilter}),init_userTagPreference=__esm({"src/core/navigators/filters/userTagPreference.ts"(){"use strict";init_navigators(),UserTagPreferenceFilter=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`_strategyData`,void 0),_defineProperty$2(this,`name`,void 0),this._strategyData=u,this.name=u.name||`User Tag Preferences`}computeMultiplier(t,c){let u=t.map(t=>c[t]).filter(t=>t!==void 0);return u.length===0?1:Math.max(...u)}buildReason(t,c,u){let d=t.filter(t=>c[t]===u);return u===0?`Excluded by user preference: ${d.join(`, `)} (${u}x)`:u<1?`Penalized by user preference: ${d.join(`, `)} (${u.toFixed(2)}x)`:u>1?`Boosted by user preference: ${d.join(`, `)} (${u.toFixed(2)}x)`:`No matching user preferences`}async transform(t,c){let u=await this.getStrategyState();return!u||Object.keys(u.boost).length===0?t.map(t=>({...t,provenance:[...t.provenance,{strategy:`userTagPreference`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||this._strategyData._id,action:`passed`,score:t.score,reason:`No user tag preferences configured`}]})):await Promise.all(t.map(async t=>{let c=t.tags??[],d=this.computeMultiplier(c,u.boost),m=Math.min(1,t.score*d),g;return g=d===0||d<1?`penalized`:d>1?`boosted`:`passed`,{...t,score:m,provenance:[...t.provenance,{strategy:`userTagPreference`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||this._strategyData._id,action:g,score:m,reason:this.buildReason(c,u.boost,d)}]}}))}async getWeightedCards(t){throw Error(`UserTagPreferenceFilter is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),filters_exports={},__export(filters_exports,{UserTagPreferenceFilter:()=>UserTagPreferenceFilter,createEloDistanceFilter:()=>createEloDistanceFilter}),init_filters=__esm({"src/core/navigators/filters/index.ts"(){"use strict";init_eloDistance(),init_userTagPreference()}}),inferredPreferenceStub_exports={},__export(inferredPreferenceStub_exports,{INFERRED_PREFERENCE_NAVIGATOR_STUB:()=>INFERRED_PREFERENCE_NAVIGATOR_STUB}),init_inferredPreferenceStub=__esm({"src/core/navigators/filters/inferredPreferenceStub.ts"(){"use strict";INFERRED_PREFERENCE_NAVIGATOR_STUB=!0}}),interferenceMitigator_exports={},__export(interferenceMitigator_exports,{default:()=>InterferenceMitigatorNavigator}),init_interferenceMitigator=__esm({"src/core/navigators/filters/interferenceMitigator.ts"(){"use strict";init_navigators(),DEFAULT_MIN_COUNT3=10,DEFAULT_MIN_ELAPSED_DAYS=3,DEFAULT_INTERFERENCE_DECAY=.8,InterferenceMitigatorNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`interferenceMap`,void 0),this.config=this.parseConfig(u.serializedData),this.interferenceMap=this.buildInterferenceMap(),this.name=u.name||`Interference Mitigator`}parseConfig(t){try{let c=JSON.parse(t),u=c.interferenceSets||[];return u.length>0&&Array.isArray(u[0])&&(u=u.map(t=>({tags:t}))),{interferenceSets:u,maturityThreshold:{minCount:c.maturityThreshold?.minCount??DEFAULT_MIN_COUNT3,minElo:c.maturityThreshold?.minElo,minElapsedDays:c.maturityThreshold?.minElapsedDays??DEFAULT_MIN_ELAPSED_DAYS},defaultDecay:c.defaultDecay??DEFAULT_INTERFERENCE_DECAY}}catch{return{interferenceSets:[],maturityThreshold:{minCount:DEFAULT_MIN_COUNT3,minElapsedDays:DEFAULT_MIN_ELAPSED_DAYS},defaultDecay:DEFAULT_INTERFERENCE_DECAY}}}buildInterferenceMap(){let t=new Map;for(let c of this.config.interferenceSets){let u=c.decay??this.config.defaultDecay??DEFAULT_INTERFERENCE_DECAY;for(let d of c.tags){t.has(d)||t.set(d,[]);let m=t.get(d);for(let t of c.tags)if(t!==d){let c=m.find(c=>c.partner===t);c?c.decay=Math.max(c.decay,u):m.push({partner:t,decay:u})}}}return t}async getImmatureTags(t){let c=new Set;try{let u=toCourseElo((await t.user.getCourseRegDoc(t.course.getCourseID())).elo),d=this.config.maturityThreshold?.minCount??DEFAULT_MIN_COUNT3,m=this.config.maturityThreshold?.minElo,g=(this.config.maturityThreshold?.minElapsedDays??DEFAULT_MIN_ELAPSED_DAYS)*2;for(let[t,b]of Object.entries(u.tags)){if(b.count===0)continue;let u=b.count<d,S=m!==void 0&&b.score<m,C=b.count<g;(u||S||C)&&c.add(t)}}catch{}return c}getTagsToAvoid(t){let c=new Map;for(let u of t){let d=this.interferenceMap.get(u);if(d){for(let{partner:u,decay:m}of d)if(!t.has(u)){let t=c.get(u)??0;c.set(u,Math.max(t,m))}}}return c}computeInterferenceEffect(t,c,u){if(c.size===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let d=1,m=[];for(let u of t){let t=c.get(u);t!==void 0&&(m.push(u),d*=1-t)}if(m.length===0)return{multiplier:1,interferingTags:[],reason:`No interference detected`};let g=new Set;for(let t of m)for(let c of u)this.interferenceMap.get(c)?.some(c=>c.partner===t)&&g.add(c);let b=`Interferes with immature tags ${Array.from(g).join(`, `)} (tags: ${m.join(`, `)}, multiplier: ${d.toFixed(2)})`;return{multiplier:d,interferingTags:m,reason:b}}async transform(t,c){let u=await this.getImmatureTags(c),d=this.getTagsToAvoid(u),m=[];for(let c of t){let t=c.tags??[],{multiplier:g,reason:b}=this.computeInterferenceEffect(t,d,u),S=c.score*g,C=g<1?`penalized`:g>1?`boosted`:`passed`;m.push({...c,score:S,provenance:[...c.provenance,{strategy:`interferenceMitigator`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-interference`,action:C,score:S,reason:b}]})}return m}async getWeightedCards(t){throw Error(`InterferenceMitigatorNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),relativePriority_exports={},__export(relativePriority_exports,{default:()=>RelativePriorityNavigator}),init_relativePriority=__esm({"src/core/navigators/filters/relativePriority.ts"(){"use strict";init_navigators(),DEFAULT_PRIORITY=.5,DEFAULT_PRIORITY_INFLUENCE=.5,DEFAULT_COMBINE_MODE=`max`,RelativePriorityNavigator=class extends ContentNavigator{constructor(t,c,u){super(t,c,u),_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`name`,void 0),this.config=this.parseConfig(u.serializedData),this.name=u.name||`Relative Priority`}parseConfig(t){try{let c=JSON.parse(t);return{tagPriorities:c.tagPriorities||{},defaultPriority:c.defaultPriority??DEFAULT_PRIORITY,combineMode:c.combineMode??DEFAULT_COMBINE_MODE,priorityInfluence:c.priorityInfluence??DEFAULT_PRIORITY_INFLUENCE}}catch{return{tagPriorities:{},defaultPriority:DEFAULT_PRIORITY,combineMode:DEFAULT_COMBINE_MODE,priorityInfluence:DEFAULT_PRIORITY_INFLUENCE}}}getTagPriority(t){return this.config.tagPriorities[t]??this.config.defaultPriority??DEFAULT_PRIORITY}computeCardPriority(t){if(t.length===0)return this.config.defaultPriority??DEFAULT_PRIORITY;let c=t.map(t=>this.getTagPriority(t));switch(this.config.combineMode){case`max`:return Math.max(...c);case`min`:return Math.min(...c);case`average`:return c.reduce((t,c)=>t+c,0)/c.length;default:return Math.max(...c)}}computeBoostFactor(t){let c=this.config.priorityInfluence??DEFAULT_PRIORITY_INFLUENCE;return 1+(t-.5)*c}buildPriorityReason(t,c,u,d){if(t.length===0)return`No tags, neutral priority (${c.toFixed(2)})`;let m=t.slice(0,3).join(`, `),g=t.length>3?` (+${t.length-3} more)`:``;return u===1?`Neutral priority (${c.toFixed(2)}) for tags: ${m}${g}`:u>1?`High-priority tags: ${m}${g} (priority ${c.toFixed(2)} \u2192 boost ${u.toFixed(2)}x \u2192 ${d.toFixed(2)})`:`Low-priority tags: ${m}${g} (priority ${c.toFixed(2)} \u2192 reduce ${u.toFixed(2)}x \u2192 ${d.toFixed(2)})`}async transform(t,c){return await Promise.all(t.map(async t=>{let c=t.tags??[],u=this.computeCardPriority(c),d=this.computeBoostFactor(u),m=Math.max(0,t.score*d),g=d>1?`boosted`:d<1?`penalized`:`passed`,b=this.buildPriorityReason(c,u,d,m);return{...t,score:m,provenance:[...t.provenance,{strategy:`relativePriority`,strategyName:this.strategyName||this.name,strategyId:this.strategyId||`NAVIGATION_STRATEGY-priority`,action:g,score:m,reason:b}]}}))}async getWeightedCards(t){throw Error(`RelativePriorityNavigator is a filter and should not be used as a generator. Use Pipeline with a generator and this filter via transform().`)}}}}),types_exports2={},init_types2=__esm({"src/core/navigators/filters/types.ts"(){"use strict";}}),userGoalStub_exports={},__export(userGoalStub_exports,{USER_GOAL_NAVIGATOR_STUB:()=>USER_GOAL_NAVIGATOR_STUB}),init_userGoalStub=__esm({"src/core/navigators/filters/userGoalStub.ts"(){"use strict";USER_GOAL_NAVIGATOR_STUB=!0}}),init_2=__esm({'import("./filters/**/*") in src/core/navigators/index.ts'(){globImport_filters=__glob({"./filters/WeightedFilter.ts":()=>Promise.resolve().then(()=>(init_WeightedFilter(),WeightedFilter_exports)),"./filters/eloDistance.ts":()=>Promise.resolve().then(()=>(init_eloDistance(),eloDistance_exports)),"./filters/hierarchyDefinition.ts":()=>Promise.resolve().then(()=>(init_hierarchyDefinition(),hierarchyDefinition_exports)),"./filters/index.ts":()=>Promise.resolve().then(()=>(init_filters(),filters_exports)),"./filters/inferredPreferenceStub.ts":()=>Promise.resolve().then(()=>(init_inferredPreferenceStub(),inferredPreferenceStub_exports)),"./filters/interferenceMitigator.ts":()=>Promise.resolve().then(()=>(init_interferenceMitigator(),interferenceMitigator_exports)),"./filters/relativePriority.ts":()=>Promise.resolve().then(()=>(init_relativePriority(),relativePriority_exports)),"./filters/types.ts":()=>Promise.resolve().then(()=>(init_types2(),types_exports2)),"./filters/userGoalStub.ts":()=>Promise.resolve().then(()=>(init_userGoalStub(),userGoalStub_exports)),"./filters/userTagPreference.ts":()=>Promise.resolve().then(()=>(init_userTagPreference(),userTagPreference_exports))})}}),init_gradient=__esm({"src/core/orchestration/gradient.ts"(){"use strict";init_logger()}}),init_learning=__esm({"src/core/orchestration/learning.ts"(){"use strict";init_contentNavigationStrategy(),init_types_legacy(),init_logger(),MIN_OBSERVATIONS_FOR_UPDATE=10,LEARNING_RATE=.1,MAX_WEIGHT_DELTA=.3,MIN_R_SQUARED_FOR_GRADIENT=.05,FLAT_GRADIENT_THRESHOLD=.02,MAX_HISTORY_LENGTH=100}}),init_signal=__esm({"src/core/orchestration/signal.ts"(){"use strict";}}),init_recording=__esm({"src/core/orchestration/recording.ts"(){"use strict";init_signal(),init_types_legacy(),init_logger()}}),init_orchestration=__esm({"src/core/orchestration/index.ts"(){"use strict";init_logger(),init_gradient(),init_learning(),init_signal(),init_recording(),MIN_SPREAD=.1,MAX_SPREAD=.5,MIN_WEIGHT=.1,MAX_WEIGHT=3}}),Pipeline_exports={},__export(Pipeline_exports,{Pipeline:()=>Pipeline,mergeHints:()=>mergeHints2}),init_Pipeline=__esm({"src/core/navigators/Pipeline.ts"(){"use strict";init_navigators(),init_logger(),init_orchestration(),init_PipelineDebugger(),VERBOSE_RESULTS=!0,Pipeline=class extends ContentNavigator{constructor(t,c,u,d){super(),_defineProperty$2(this,`generator`,void 0),_defineProperty$2(this,`filters`,void 0),_defineProperty$2(this,`_cachedOrchestration`,null),_defineProperty$2(this,`_tagCache`,new Map),_defineProperty$2(this,`_ephemeralHints`,null),this.generator=t,this.filters=c,this.user=u,this.course=d,d.getCourseConfig().then(t=>{logger.debug(`[pipeline] Crated pipeline for ${t.name}`)}).catch(t=>{logger.error(`[pipeline] Failed to lookup courseCfg: ${t}`)}),logPipelineConfig(t,c),registerPipelineForDebug(this)}setEphemeralHints(t){this._ephemeralHints=t,logger.info(`[Pipeline] Ephemeral hints set: ${JSON.stringify(t)}`)}async getWeightedCards(t){let c=performance.now(),u=await this.buildContext(),d=performance.now(),m=500;logger.debug(`[Pipeline] Fetching 500 candidates from generator '${this.generator.name}'`);let g=await this.generator.getWeightedCards(500,u),b=g.cards,S=performance.now(),C=b.length;this._ephemeralHints=mergeHints2([this._ephemeralHints,g.hints])??null;let w;if(this.generator.generators){let t=new Map;for(let c of b){let u=c.provenance[0];if(u){let d=u.strategyName;t.has(d)||t.set(d,{cards:[]}),t.get(d).cards.push(c)}}w=Array.from(t.entries()).map(([t,c])=>{let u=c.cards.filter(t=>t.provenance[0]?.reason?.includes(`new card`)),d=c.cards.filter(t=>t.provenance[0]?.reason?.includes(`review`));return{name:t,cardCount:c.cards.length,newCount:u.length,reviewCount:d.length,topScore:Math.max(...c.cards.map(t=>t.score),0)}})}logger.debug(`[Pipeline] Generator returned ${C} candidates`),b=await this.hydrateTags(b);let T=performance.now(),E=[...b],D=this._ephemeralHints;if(D?.requireCards?.length){let t=new Set(E.map(t=>t.cardId)),c=D.requireCards.filter(c=>!c.includes(`*`)&&!t.has(c));if(c.length>0){let t=await this.course.getAppliedTagsBatch(c),u=this.course.getCourseID();for(let d of c)E.push({cardId:d,courseId:u,score:1,tags:t.get(d)??[],provenance:[]});logger.info(`[Pipeline] Pre-fetched ${c.length} required card(s) into pool: ${c.join(`, `)}`)}}let O=new Set(b.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`)).map(t=>t.cardId)),Or=[];for(let t of this.filters){let c=b.length,d=new Map(b.map(t=>[t.cardId,t.score]));b=await t.transform(b,u);let m=0,g=0,S=0,C=c-b.length;for(let t of b){let c=d.get(t.cardId)??0;t.score>c?m++:t.score<c?g++:S++}if(Or.push({name:t.name,boosted:m,penalized:g,passed:S,removed:C}),O.size>0){let c=new Set(b.map(t=>t.cardId)),u=[...O].filter(t=>!c.has(t)),d=b.filter(t=>O.has(t.cardId)&&t.score===0).map(t=>t.cardId);(u.length>0||d.length>0)&&(logger.info(`[Pipeline] Filter '${t.name}' impact on prescribed cards: `+(u.length>0?`removed=[${u.join(`, `)}] `:``)+(d.length>0?`zeroed=[${d.join(`, `)}]`:``)),u.forEach(t=>O.delete(t)))}logger.debug(`[Pipeline] Filter '${t.name}': ${d.size} \u2192 ${b.length} cards (\u2191${m} \u2193${g} =${S})`)}b=b.filter(t=>t.score>0);let kr=this._ephemeralHints;kr&&(this._ephemeralHints=null,b=this.applyHints(b,kr,E)),b.sort((t,c)=>c.score-t.score);let Ar=performance.now(),jr=b.slice(0,t);logger.info(`[Pipeline:timing] total=${(Ar-c).toFixed(0)}ms (context=${(d-c).toFixed(0)} generate=${(S-d).toFixed(0)} hydrate=${(T-S).toFixed(0)} filter=${(Ar-T).toFixed(0)})`);let Mr=jr.slice(0,3).map(t=>t.score);logExecutionSummary(this.generator.name,C,this.filters.length,jr.length,Mr,Or),logResultCards(jr),logCardProvenance(jr,3);try{let t=await this.course?.getCourseConfig().then(t=>t.name).catch(()=>void 0);captureRun(buildRunReport(this.course?.getCourseID()||`unknown`,t,this.generator.name,w,C,Or,b,jr,u.userElo,kr??void 0))}catch(t){logger.debug(`[Pipeline] Failed to capture debug run: ${t}`)}return{cards:jr}}async hydrateTags(t){if(t.length===0)return t;let c=[];for(let u of t)this._tagCache.has(u.cardId)||c.push(u.cardId);if(c.length>0){let t=await this.course.getAppliedTagsBatch(c);for(let[c,u]of t)this._tagCache.set(c,u)}let u=new Map;for(let c of t)u.set(c.cardId,this._tagCache.get(c.cardId)??[]);return logTagHydration(t,u),t.map(t=>({...t,tags:this._tagCache.get(t.cardId)??[]}))}applyHints(t,c,u){let d=t.length;if(c.excludeCards?.length&&(t=t.filter(t=>!c.excludeCards.some(c=>globMatch(t.cardId,c)))),c.excludeTags?.length&&(t=t.filter(t=>!c.excludeTags.some(c=>cardMatchesTagPattern(t,c)))),c.boostTags)for(let[u,d]of Object.entries(c.boostTags))for(let m of t)cardMatchesTagPattern(m,u)&&(m.score*=d,m.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:c._label?`Replan Hint (${c._label})`:`Replan Hint`,action:`boosted`,score:m.score,reason:`boostTag ${u} \xD7${d}`}));if(c.boostCards)for(let[u,d]of Object.entries(c.boostCards))for(let m of t)globMatch(m.cardId,u)&&(m.score*=d,m.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:c._label?`Replan Hint (${c._label})`:`Replan Hint`,action:`boosted`,score:m.score,reason:`boostCard ${u} \xD7${d}`}));let m=new Set(t.map(t=>t.cardId)),g=new Map(t.map(t=>[t.cardId,t])),b=c._label?`Replan Hint (${c._label})`:`Replan Hint`,applyRequirement=(c,u)=>{let d=1/0,S=g.get(c.cardId);S?S.score<d&&(S.score=d,S.provenance.push({strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:b,action:`boosted`,score:d,reason:`${u} (upgrade to mandatory score)`})):(t.push({...c,score:d,provenance:[...c.provenance,{strategy:`ephemeralHint`,strategyId:`ephemeral-hint`,strategyName:b,action:`boosted`,score:d,reason:u}]}),m.add(c.cardId),g.set(c.cardId,t[t.length-1]))};if(c.requireCards?.length)for(let t of c.requireCards){for(let c of m)globMatch(c,t)&&applyRequirement(g.get(c),`requireCard ${t}`);for(let c of u)globMatch(c.cardId,t)&&applyRequirement(c,`requireCard ${t}`)}if(c.requireTags?.length)for(let t of c.requireTags){for(let c of m){let u=g.get(c);cardMatchesTagPattern(u,t)&&applyRequirement(u,`requireTag ${t}`)}for(let c of u)cardMatchesTagPattern(c,t)&&applyRequirement(c,`requireTag ${t}`)}return logger.info(`[Pipeline] Hints applied: ${d} \u2192 ${t.length} cards`),t}async buildContext(){let t=1e3;try{t=toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo).global.score}catch(t){logger.debug(`[Pipeline] Could not get user ELO, using default: ${t}`)}this._cachedOrchestration||(this._cachedOrchestration=await createOrchestrationContext(this.user,this.course));let c=this._cachedOrchestration;return{user:this.user,course:this.course,userElo:t,orchestration:c}}getCourseID(){return this.course.getCourseID()}async getOrchestrationContext(){return createOrchestrationContext(this.user,this.course)}getStrategyIds(){let t=[],extractId=t=>t.strategyId?t.strategyId:null,c=extractId(this.generator);c&&t.push(c),this.generator.generators&&Array.isArray(this.generator.generators)&&this.generator.generators.forEach(c=>{let u=extractId(c);u&&t.push(u)});for(let c of this.filters){let u=extractId(c);u&&t.push(u)}return[...new Set(t)]}async getTagEloStatus(t){let c=toCourseElo((await this.user.getCourseRegDoc(this.course.getCourseID())).elo),u={};if(t){let d=Array.isArray(t)?t:[t];for(let t of d){let d=globToRegex(t);for(let[t,m]of Object.entries(c.tags))d.test(t)&&(u[t]={score:m.score,count:m.count})}}else for(let[t,d]of Object.entries(c.tags))u[t]={score:d.score,count:d.count};return u}async diagnoseCardSpace(t){let c=t?.threshold??.1,u=performance.now(),d=await this.course.getAllCardIds(),m=d.map(t=>({cardId:t,courseId:this.course.getCourseID(),score:1,provenance:[]}));m=await this.hydrateTags(m);let g=await this.buildContext(),b=[];for(let t of this.filters){m=await t.transform(m,g);let u=m.filter(t=>t.score>=c).length;b.push({name:t.name,wellIndicated:u})}let S=m.filter(t=>t.score>=c),C=new Set(S.map(t=>t.cardId)),w;try{let t=this.course.getCourseID(),c=await this.user.getSeenCards(t);w=new Set(c)}catch{w=new Set}let T=S.filter(t=>!w.has(t.cardId)),E=new Map;for(let t of m){let u=t.cardId.split(`-`)[1]||`unknown`;E.has(u)||E.set(u,{total:0,wellIndicated:0,new:0});let d=E.get(u);d.total++,t.score>=c&&(d.wellIndicated++,w.has(t.cardId)||d.new++)}let D=performance.now()-u,O={totalCards:d.length,threshold:c,wellIndicated:C.size,encountered:w.size,wellIndicatedNew:T.length,byType:Object.fromEntries(E),filterBreakdown:b,elapsedMs:Math.round(D)};logger.info(`[Pipeline:diagnose] Card space scan (${O.elapsedMs}ms):`),logger.info(`[Pipeline:diagnose] Total cards: ${O.totalCards}`),logger.info(`[Pipeline:diagnose] Well-indicated (score >= ${c}): ${O.wellIndicated}`),logger.info(`[Pipeline:diagnose] Encountered: ${O.encountered}`),logger.info(`[Pipeline:diagnose] Well-indicated & new: ${O.wellIndicatedNew}`),logger.info(`[Pipeline:diagnose] By type:`);for(let[t,c]of E)logger.info(`[Pipeline:diagnose] ${t}: ${c.wellIndicated}/${c.total} well-indicated, ${c.new} new`);logger.info(`[Pipeline:diagnose] After each filter:`);for(let t of b)logger.info(`[Pipeline:diagnose] ${t.name}: ${t.wellIndicated} well-indicated`);return O}}}}),defaults_exports={},__export(defaults_exports,{createDefaultEloStrategy:()=>createDefaultEloStrategy,createDefaultPipeline:()=>createDefaultPipeline,createDefaultSrsStrategy:()=>createDefaultSrsStrategy}),init_defaults=__esm({"src/core/navigators/defaults.ts"(){"use strict";init_navigators(),init_Pipeline(),init_CompositeGenerator(),init_elo(),init_srs(),init_eloDistance(),init_types_legacy()}}),PipelineAssembler_exports={},__export(PipelineAssembler_exports,{PipelineAssembler:()=>PipelineAssembler}),init_PipelineAssembler=__esm({"src/core/navigators/PipelineAssembler.ts"(){"use strict";init_navigators(),init_WeightedFilter(),init_Pipeline(),init_logger(),init_CompositeGenerator(),init_defaults(),PipelineAssembler=class{async assemble(t){let{strategies:c,user:u,course:d}=t,m=[];if(c.length===0)return{pipeline:null,generatorStrategies:[],filterStrategies:[],warnings:m};let g=[],b=[];for(let t of c)isGenerator(t.implementingClass)?g.push(t):isFilter(t.implementingClass)?b.push(t):m.push(`Unknown strategy type '${t.implementingClass}', skipping: ${t.name}`);let S=d.getCourseID(),C=g.some(t=>t.implementingClass===`elo`),w=g.some(t=>t.implementingClass===`srs`);if(C||(logger.debug(`[PipelineAssembler] No ELO generator configured, adding default`),g.push(createDefaultEloStrategy(S))),w||(logger.debug(`[PipelineAssembler] No SRS generator configured, adding default`),g.push(createDefaultSrsStrategy(S))),g.length===0)return m.push(`No generator strategy found`),{pipeline:null,generatorStrategies:[],filterStrategies:[],warnings:m};let T;g.length===1?(T=await ContentNavigator.create(u,d,g[0]),logger.debug(`[PipelineAssembler] Using single generator: ${g[0].name}`)):(logger.debug(`[PipelineAssembler] Using CompositeGenerator for ${g.length} generators: ${g.map(t=>t.name).join(`, `)}`),T=await CompositeGenerator.fromStrategies(u,d,g));let E=[],D=[...b].sort((t,c)=>t.name.localeCompare(c.name));for(let t of D)try{let c=await ContentNavigator.create(u,d,t);if(`transform`in c&&typeof c.transform==`function`){let u=c;t.learnable&&(u=new WeightedFilter(u,t.learnable,t.staticWeight,t._id)),E.push(u),logger.debug(`[PipelineAssembler] Added filter: ${t.name}`)}else m.push(`Filter '${t.name}' does not implement CardFilter.transform(), skipping`)}catch(c){m.push(`Failed to instantiate filter '${t.name}': ${c}`)}let O=new Pipeline(T,E,u,d);return logger.debug(`[PipelineAssembler] Assembled pipeline with ${g.length} generator(s) and ${E.length} filter(s)`),{pipeline:O,generatorStrategies:g,filterStrategies:D,warnings:m}}}}}),init_3=__esm({'import("./**/*") in src/core/navigators/index.ts'(){globImport=__glob({"./Pipeline.ts":()=>Promise.resolve().then(()=>(init_Pipeline(),Pipeline_exports)),"./PipelineAssembler.ts":()=>Promise.resolve().then(()=>(init_PipelineAssembler(),PipelineAssembler_exports)),"./PipelineDebugger.ts":()=>Promise.resolve().then(()=>(init_PipelineDebugger(),PipelineDebugger_exports)),"./defaults.ts":()=>Promise.resolve().then(()=>(init_defaults(),defaults_exports)),"./filters/WeightedFilter.ts":()=>Promise.resolve().then(()=>(init_WeightedFilter(),WeightedFilter_exports)),"./filters/eloDistance.ts":()=>Promise.resolve().then(()=>(init_eloDistance(),eloDistance_exports)),"./filters/hierarchyDefinition.ts":()=>Promise.resolve().then(()=>(init_hierarchyDefinition(),hierarchyDefinition_exports)),"./filters/index.ts":()=>Promise.resolve().then(()=>(init_filters(),filters_exports)),"./filters/inferredPreferenceStub.ts":()=>Promise.resolve().then(()=>(init_inferredPreferenceStub(),inferredPreferenceStub_exports)),"./filters/interferenceMitigator.ts":()=>Promise.resolve().then(()=>(init_interferenceMitigator(),interferenceMitigator_exports)),"./filters/relativePriority.ts":()=>Promise.resolve().then(()=>(init_relativePriority(),relativePriority_exports)),"./filters/types.ts":()=>Promise.resolve().then(()=>(init_types2(),types_exports2)),"./filters/userGoalStub.ts":()=>Promise.resolve().then(()=>(init_userGoalStub(),userGoalStub_exports)),"./filters/userTagPreference.ts":()=>Promise.resolve().then(()=>(init_userTagPreference(),userTagPreference_exports)),"./generators/CompositeGenerator.ts":()=>Promise.resolve().then(()=>(init_CompositeGenerator(),CompositeGenerator_exports)),"./generators/elo.ts":()=>Promise.resolve().then(()=>(init_elo(),elo_exports)),"./generators/index.ts":()=>Promise.resolve().then(()=>(init_generators(),generators_exports)),"./generators/prescribed.ts":()=>Promise.resolve().then(()=>(init_prescribed(),prescribed_exports)),"./generators/srs.ts":()=>Promise.resolve().then(()=>(init_srs(),srs_exports)),"./generators/types.ts":()=>Promise.resolve().then(()=>(init_types(),types_exports)),"./index.ts":()=>Promise.resolve().then(()=>(init_navigators(),navigators_exports))})}}),navigators_exports={},__export(navigators_exports,{ContentNavigator:()=>ContentNavigator,NavigatorRole:()=>NavigatorRole,NavigatorRoles:()=>NavigatorRoles,Navigators:()=>Navigators,getCardOrigin:()=>getCardOrigin,getRegisteredNavigator:()=>getRegisteredNavigator,getRegisteredNavigatorNames:()=>getRegisteredNavigatorNames,getRegisteredNavigatorRole:()=>getRegisteredNavigatorRole,hasRegisteredNavigator:()=>hasRegisteredNavigator,initializeNavigatorRegistry:()=>initializeNavigatorRegistry,isFilter:()=>isFilter,isGenerator:()=>isGenerator,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerNavigator:()=>registerNavigator}),init_navigators=__esm({"src/core/navigators/index.ts"(){"use strict";init_PipelineDebugger(),init_logger(),init_(),init_2(),init_3(),navigatorRegistry=new Map,Navigators=(t=>(t.ELO=`elo`,t.SRS=`srs`,t.PRESCRIBED=`prescribed`,t.HIERARCHY=`hierarchyDefinition`,t.INTERFERENCE=`interferenceMitigator`,t.RELATIVE_PRIORITY=`relativePriority`,t.USER_TAG_PREFERENCE=`userTagPreference`,t))(Navigators||{}),NavigatorRole=(t=>(t.GENERATOR=`generator`,t.FILTER=`filter`,t))(NavigatorRole||{}),NavigatorRoles={elo:`generator`,srs:`generator`,prescribed:`generator`,hierarchyDefinition:`filter`,interferenceMitigator:`filter`,relativePriority:`filter`,userTagPreference:`filter`},ContentNavigator=class{constructor(t,c,u){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`course`,void 0),_defineProperty$2(this,`strategyName`,void 0),_defineProperty$2(this,`strategyId`,void 0),_defineProperty$2(this,`learnable`,void 0),_defineProperty$2(this,`staticWeight`,void 0),this.user=t,this.course=c,u&&(this.strategyName=u.name,this.strategyId=u._id,this.learnable=u.learnable,this.staticWeight=u.staticWeight)}get strategyKey(){return this.constructor.name}async getStrategyState(){if(!this.user||!this.course)throw Error(`Cannot get strategy state: navigator not properly initialized. Ensure user and course are provided to constructor.`);return this.user.getStrategyState(this.course.getCourseID(),this.strategyKey)}async putStrategyState(t){if(!this.user||!this.course)throw Error(`Cannot put strategy state: navigator not properly initialized. Ensure user and course are provided to constructor.`);return this.user.putStrategyState(this.course.getCourseID(),this.strategyKey,t)}static async create(t,c,u){let d=u.implementingClass,m=getRegisteredNavigator(d);if(m)return logger.debug(`[ContentNavigator.create] Using registered navigator: ${d}`),new m(t,c,u);logger.debug(`[ContentNavigator.create] Navigator not in registry, attempting dynamic import: ${d}`);let g;for(let t of[`.ts`,`.js`,``]){try{if(g=(await globImport_generators(`./generators/${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load generator ${d}${t}:`,c)}try{if(g=(await globImport_filters(`./filters/${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load filter ${d}${t}:`,c)}try{if(g=(await globImport(`./${d}${t}`)).default,g)break}catch(c){logger.debug(`Failed to load legacy ${d}${t}:`,c)}if(g)break}if(!g)throw Error(`Could not load navigator implementation for: ${d}`);return new g(t,c,u)}async getWeightedCards(t){throw Error(`${this.constructor.name} must implement getWeightedCards(). `)}setEphemeralHints(t){}}}}),init_courseDB=__esm({"src/impl/couch/courseDB.ts"(){"use strict";init_couch(),init_updateQueue(),init_types_legacy(),init_logger(),init_clientCache(),init_courseAPI(),init_courseLookupDB(),init_navigators(),init_PipelineAssembler(),init_defaults(),CoursesDB=class{constructor(t){_defineProperty$2(this,`_courseIDs`,void 0),t&&t.length>0?this._courseIDs=t:this._courseIDs=void 0}async getCourseList(){let t=await CourseLookup.allCourseWare();return logger.debug(`AllCourses: ${t.map(t=>t.name+`, `+t._id+`
|
|
350
353
|
`)}`),this._courseIDs&&(t=t.filter(t=>this._courseIDs.includes(t._id))),logger.debug(`AllCourses.filtered: ${t.map(t=>t.name+`, `+t._id+`
|
|
351
354
|
`)}`),(await Promise.all(t.map(async t=>{try{let c=await getCredentialledCourseConfig(t._id);return logger.debug(`Found cfg: ${JSON.stringify(c)}`),c}catch(c){logger.warn(`Error fetching cfg for course ${t.name}, ${t._id}: ${c}`);return}}))).filter(t=>!!t)}async getCourseConfig(t){if(this._courseIDs&&this._courseIDs.length&&!this._courseIDs.includes(t))throw Error(`Course ${t} not in course list`);let c=await getCredentialledCourseConfig(t);if(c===void 0)throw Error(`Error fetching cfg for course ${t}`);return c}async disambiguateCourse(t,c){await CourseLookup.updateDisambiguator(t,c)}},CourseDB=class{constructor(t,c,u){_defineProperty$2(this,`db`,void 0),_defineProperty$2(this,`remoteDB`,void 0),_defineProperty$2(this,`id`,void 0),_defineProperty$2(this,`_getCurrentUser`,void 0),_defineProperty$2(this,`updateQueue`,void 0),_defineProperty$2(this,`_pendingHints`,null),_defineProperty$2(this,`_eloPoolCache`,null),_defineProperty$2(this,`_eloPoolTtlMs`,300*1e3),_defineProperty$2(this,`_cachedNavigator`,null),_defineProperty$2(this,`_navigatorTtlMs`,300*1e3),this.id=t;let d=getCourseDB2(this.id);this.remoteDB=d,this.db=u??d,this._getCurrentUser=c,this.updateQueue=new UpdateQueue(this.remoteDB,this.remoteDB)}getCourseID(){return this.id}async getCourseInfo(){return{cardCount:(await this.db.find({selector:{docType:`CARD`},limit:1e3})).docs.length,registeredUsers:0}}async getInexperiencedCards(t=2){return(await this.db.query(`cardsByInexperience`,{limit:t})).rows.map(t=>({courseId:this.id,cardId:t.id,count:t.key,elo:t.value}))}async getCardsByEloLimits(t={low:0,high:-(2**53-1),limit:25,page:0}){return(await this.db.query(`elo`,{startkey:t.low,endkey:t.high,limit:t.limit,skip:t.limit*t.page})).rows.map(t=>`${this.id}-${t.id}-${t.key}`)}async getCardEloData(t){let c=await this.db.allDocs({keys:t,include_docs:!0}),u=[];return c.rows.forEach(t=>{isSuccessRow(t)?t.doc&&t.doc.elo?u.push(toCourseElo(t.doc.elo)):(logger.warn(`no elo data for card: `+t.id),u.push(blankCourseElo())):(logger.warn(`no elo data for card: `+JSON.stringify(t)),u.push(blankCourseElo()))}),u}async getELOBounds(){let[t,c]=await Promise.all([(await this.db.query(`elo`,{startkey:0,limit:1,include_docs:!1})).rows[0].key,(await this.db.query(`elo`,{limit:1,descending:!0,startkey:1e5})).rows[0].key]);return{low:t,high:c}}async removeCard(t){let c=await this.remoteDB.get(t);if(!c.docType||c.docType!==`CARD`)throw Error(`failed to remove ${t} from course ${this.id}. id does not point to a card`);try{let c=await this.getAppliedTags(t);(await Promise.allSettled(c.rows.map(async c=>{let u=c.id;await this.removeTagFromCard(t,u)}))).forEach((u,d)=>{if(u.status===`rejected`){let m=c.rows[d].id;logger.error(`Failed to remove card ${t} from tag ${m}: ${u.reason}`)}})}catch(c){logger.error(`Error removing card ${t} from tags: ${c}`)}return this.remoteDB.remove(c)}async getCardDisplayableDataIDs(t){logger.debug(t.join(`, `));let c=await this.db.allDocs({keys:t,include_docs:!0}),u={};return c.rows.forEach(t=>{isSuccessRow(t)&&(u[t.id]=t.doc.id_displayable_data)}),u}async getCardsByELO(t,c){t=parseInt(t);let u=c||25,d=await this.db.query(`elo`,{limit:Math.ceil(u/2),startkey:t,descending:!0}),m=u-d.rows.length,g=await this.db.query(`elo`,{limit:m,startkey:t+1}),b=d.rows;b=b.concat(g.rows);let S=b.sort((c,u)=>{let d=Math.abs(c.key-t)-Math.abs(u.key-t);return d===0?Math.random()-.5:d}).map(t=>({courseID:this.id,cardID:t.id,elo:t.key})),C=`below:
|
|
352
355
|
${d.rows.map(t=>` ${t.id}-${t.key}
|
|
@@ -426,7 +429,7 @@ Example:
|
|
|
426
429
|
window.skuilder.mixer.showLastMix()
|
|
427
430
|
window.skuilder.mixer.explainSourceBalance()
|
|
428
431
|
window.skuilder.mixer.compareScores()
|
|
429
|
-
`)}},mountMixerDebugger(),init_logger(),init_PipelineDebugger(),init_logger(),activeController=null,OVERLAY_ID=`skuilder-session-overlay`,POLL_MS=300,INLINE_THRESHOLD=5,SPINNER_FRAMES=[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`],spinnerFrame=0,overlayEl=null,pollHandle=null,expanded={reviewQ:!1,newQ:!1,failedQ:!1},activeSession=null,sessionHistory=[],MAX_HISTORY=5,sessionDebugAPI={get sessions(){return[...sessionHistory]},get active(){return activeSession},showQueue(){showCurrentQueue()},dbgOverlay(){toggleSessionOverlay()},showHistory(t=0){showPresentationHistory(t)},showInterleaving(t=0){showInterleaving(t)},listSessions(){if(activeSession&&logger.info(`Active session: ${activeSession.sessionId} (${activeSession.presentations.length} cards presented)`),sessionHistory.length===0){logger.info(`[Session Debug] No completed sessions in history.`);return}console.table(sessionHistory.map((t,c)=>({index:c,id:t.sessionId.slice(-8),started:t.startTime.toLocaleTimeString(),ended:t.endTime?.toLocaleTimeString()||`incomplete`,cards:t.presentations.length})))},export(){let t={active:activeSession,history:sessionHistory},c=JSON.stringify(t,null,2);return logger.info(`[Session Debug] Session data exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.session.export())`),c},clear(){sessionHistory.length=0,logger.info(`[Session Debug] Session history cleared.`)},help(){logger.info(`
|
|
432
|
+
`)}},mountMixerDebugger(),init_logger(),init_PipelineDebugger(),init_logger(),activeController=null,OVERLAY_ID=`skuilder-session-overlay`,POLL_MS=300,INLINE_THRESHOLD=5,SPINNER_FRAMES=[`⠋`,`⠙`,`⠹`,`⠸`,`⠼`,`⠴`,`⠦`,`⠧`,`⠇`,`⠏`],spinnerFrame=0,overlayEl=null,pollHandle=null,lastSnapshot=null,copyFlashUntil=0,minified=!1,expanded={reviewQ:!1,newQ:!1,failedQ:!1,drawn:!1},activeSession=null,sessionHistory=[],MAX_HISTORY=5,sessionDebugAPI={get sessions(){return[...sessionHistory]},get active(){return activeSession},showQueue(){showCurrentQueue()},dbgOverlay(){toggleSessionOverlay()},showHistory(t=0){showPresentationHistory(t)},showInterleaving(t=0){showInterleaving(t)},listSessions(){if(activeSession&&logger.info(`Active session: ${activeSession.sessionId} (${activeSession.presentations.length} cards presented)`),sessionHistory.length===0){logger.info(`[Session Debug] No completed sessions in history.`);return}console.table(sessionHistory.map((t,c)=>({index:c,id:t.sessionId.slice(-8),started:t.startTime.toLocaleTimeString(),ended:t.endTime?.toLocaleTimeString()||`incomplete`,cards:t.presentations.length})))},export(){let t={active:activeSession,history:sessionHistory},c=JSON.stringify(t,null,2);return logger.info(`[Session Debug] Session data exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.session.export())`),c},clear(){sessionHistory.length=0,logger.info(`[Session Debug] Session history cleared.`)},help(){logger.info(`
|
|
430
433
|
🎯 Session Debug API
|
|
431
434
|
|
|
432
435
|
Commands:
|
|
@@ -447,16 +450,16 @@ Example:
|
|
|
447
450
|
window.skuilder.session.showQueue()
|
|
448
451
|
`)}},mountSessionDebugger(),init_logger(),SessionController=(_SessionController2=class _SessionController extends Loggable{set sessionRecord(t){this._sessionRecord=t}get secondsRemaining(){return this._secondsRemaining}get hasCardGuarantee(){return this._minCardsGuarantee>0}get report(){let t=this.reviewQ.dequeueCount,c=this.newQ.dequeueCount;return`${t} ${t===1?`review`:`reviews`}, ${c} ${c===1?`new card`:`new cards`}`}get detailedReport(){return this.newQ.toString+`
|
|
449
452
|
`+this.reviewQ.toString+`
|
|
450
|
-
`+this.failedQ.toString}constructor(t,c,u,d,m,g){super(),_defineProperty$2(this,`_className`,`SessionController`),_defineProperty$2(this,`services`,void 0),_defineProperty$2(this,`srsService`,void 0),_defineProperty$2(this,`eloService`,void 0),_defineProperty$2(this,`hydrationService`,void 0),_defineProperty$2(this,`mixer`,void 0),_defineProperty$2(this,`dataLayer`,void 0),_defineProperty$2(this,`courseNameCache`,new Map),_defineProperty$2(this,`_defaultBatchLimit`,20),_defineProperty$2(this,`_initialReviewCap`,200),_defineProperty$2(this,`sources`,void 0),_defineProperty$2(this,`_sessionRecord`,[]),_defineProperty$2(this,`_currentCard`,null),_defineProperty$2(this,`reviewQ`,new ItemQueue),_defineProperty$2(this,`newQ`,new ItemQueue),_defineProperty$2(this,`failedQ`,new ItemQueue),_defineProperty$2(this,`_replanPromise`,null),_defineProperty$2(this,`_activeReplanLabel`,null),_defineProperty$2(this,`_wellIndicatedRemaining`,0),_defineProperty$2(this,`_suppressQualityReplan`,!1),_defineProperty$2(this,`_minCardsGuarantee`,0),_defineProperty$2(this,`_sessionHints`,null),_defineProperty$2(this,`_outcomeObservers`,[]),_defineProperty$2(this,`_sessionControls`,null),_defineProperty$2(this,`startTime`,void 0),_defineProperty$2(this,`endTime`,void 0),_defineProperty$2(this,`_secondsRemaining`,void 0),_defineProperty$2(this,`_intervalHandle`,void 0),this.dataLayer=u,this.mixer=m||new QuotaRoundRobinMixer,this.srsService=new SrsService(u.getUserDB()),this.eloService=new EloService(u,u.getUserDB()),this.hydrationService=new CardHydrationService(d,t=>u.getCourseDB(t),()=>this._getItemsToHydrate()),this.services={response:new ResponseProcessor(this.srsService,this.eloService)},this.sources=t,this.startTime=new Date,this._secondsRemaining=c,this.endTime=new Date(this.startTime.valueOf()+1e3*this._secondsRemaining),g?.defaultBatchLimit!==void 0&&(this._defaultBatchLimit=g.defaultBatchLimit),g?.initialReviewCap!==void 0&&(this._initialReviewCap=g.initialReviewCap),g?.outcomeObservers?.length&&(this._outcomeObservers=[...g.outcomeObservers]),this.log(`Session constructed:
|
|
453
|
+
`+this.failedQ.toString}constructor(t,c,u,d,m,g){super(),_defineProperty$2(this,`_className`,`SessionController`),_defineProperty$2(this,`services`,void 0),_defineProperty$2(this,`srsService`,void 0),_defineProperty$2(this,`eloService`,void 0),_defineProperty$2(this,`hydrationService`,void 0),_defineProperty$2(this,`mixer`,void 0),_defineProperty$2(this,`dataLayer`,void 0),_defineProperty$2(this,`courseNameCache`,new Map),_defineProperty$2(this,`_defaultBatchLimit`,20),_defineProperty$2(this,`_initialReviewCap`,200),_defineProperty$2(this,`sources`,void 0),_defineProperty$2(this,`_sessionRecord`,[]),_defineProperty$2(this,`_currentCard`,null),_defineProperty$2(this,`reviewQ`,new ItemQueue),_defineProperty$2(this,`newQ`,new ItemQueue),_defineProperty$2(this,`failedQ`,new ItemQueue),_defineProperty$2(this,`_replanPromise`,null),_defineProperty$2(this,`_activeReplanLabel`,null),_defineProperty$2(this,`_wellIndicatedRemaining`,0),_defineProperty$2(this,`_suppressQualityReplan`,!1),_defineProperty$2(this,`_minCardsGuarantee`,0),_defineProperty$2(this,`_sessionHints`,null),_defineProperty$2(this,`_servedCardIds`,new Set),_defineProperty$2(this,`_outcomeObservers`,[]),_defineProperty$2(this,`_sessionControls`,null),_defineProperty$2(this,`startTime`,void 0),_defineProperty$2(this,`endTime`,void 0),_defineProperty$2(this,`_secondsRemaining`,void 0),_defineProperty$2(this,`_intervalHandle`,void 0),this.dataLayer=u,this.mixer=m||new QuotaRoundRobinMixer,this.srsService=new SrsService(u.getUserDB()),this.eloService=new EloService(u,u.getUserDB()),this.hydrationService=new CardHydrationService(d,t=>u.getCourseDB(t),()=>this._getItemsToHydrate()),this.services={response:new ResponseProcessor(this.srsService,this.eloService)},this.sources=t,this.startTime=new Date,this._secondsRemaining=c,this.endTime=new Date(this.startTime.valueOf()+1e3*this._secondsRemaining),g?.defaultBatchLimit!==void 0&&(this._defaultBatchLimit=g.defaultBatchLimit),g?.initialReviewCap!==void 0&&(this._initialReviewCap=g.initialReviewCap),g?.outcomeObservers?.length&&(this._outcomeObservers=[...g.outcomeObservers]),this.log(`Session constructed:
|
|
451
454
|
startTime: ${this.startTime}
|
|
452
455
|
endTime: ${this.endTime}
|
|
453
456
|
defaultBatchLimit: ${this._defaultBatchLimit}
|
|
454
|
-
initialReviewCap: ${this._initialReviewCap}`),registerActiveController(this)}tick(){this._secondsRemaining=Math.floor((this.endTime.valueOf()-Date.now())/1e3),this._secondsRemaining<=0&&clearInterval(this._intervalHandle)}estimateCleanupTime(){let t=0;for(let c=0;c<this.failedQ.length;c++){let u=this.failedQ.peek(c),d=this._sessionRecord.find(t=>t.item.cardID===u.cardID),m=0;if(d){for(let t=0;t<d.records.length;t++)m+=d.records[t].timeSpent;m/=d.records.length,t+=m}}let c=t/1e3;return this.log(`Failed card cleanup estimate: ${Math.round(c)}`),c}estimateReviewTime(){let t=5*this.reviewQ.length;return this.log(`Review card time estimate: ${t}`),t}async prepareSession(){if(this.sources.some(t=>typeof t.getWeightedCards!=`function`))throw Error(`[SessionController] All content sources must implement getWeightedCards().`);let t=await this.getWeightedContent();this._wellIndicatedRemaining=t,t>=0&&t<_SessionController.MIN_WELL_INDICATED&&this.log(`[Init] Only ${t}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards in initial load`),await this.hydrationService.ensureHydratedCards(),startSessionTracking(this.reviewQ.length,this.newQ.length,this.failedQ.length),this._intervalHandle=setInterval(()=>{this.tick()},1e3)}async requestReplan(t){let c=this.normalizeReplanOptions(t),u=this._replanHasIntent(c);if(this._replanPromise){if(!u)return this.log(`Replan already in progress, coalescing unhinted auto-replan`),this._replanPromise;let t=c.label?` [${c.label}]`:``;this.log(`Replan in progress; queueing hint-bearing replan${t} behind in-flight run`);let d=this._replanPromise.catch(()=>void 0).then(()=>this._runReplan(c)),m=d.finally(()=>{this._replanPromise===m&&(this._replanPromise=null,this._activeReplanLabel=null)});return this._replanPromise=m,d}let d=this._runReplan(c),m=d.finally(()=>{this._replanPromise===m&&(this._replanPromise=null,this._activeReplanLabel=null)});this._replanPromise=m,await d}_replanHasIntent(t){return!!(t.limit!==void 0||t.minFollowUpCards!==void 0||t.mode&&t.mode!==`replace`||t.hints&&Object.keys(t.hints).length>0||t.sessionHints!==void 0)}async _runReplan(t){this._activeReplanLabel=t.label??`(auto)`,t.hints||(t.hints={});let c=t.hints,u=new Set(c.excludeCards??[]);this._currentCard?.item.cardID&&u.add(this._currentCard.item.cardID);for(let t of this._sessionRecord)u.add(t.card.card_id);this.newQ.length>0&&u.add(this.newQ.peek(0).cardID),c.excludeCards=[...u],t.sessionHints!==void 0&&(this._sessionHints=t.sessionHints,this.log(`[Replan] Session hints ${t.sessionHints?`set`:`cleared`}: ${JSON.stringify(t.sessionHints)}`)),this._applyHintsToSources(t.hints,t.label);let d=t.label?` [${t.label}]`:``;this.log(`Mid-session replan requested${d} (limit: ${t.limit??`default`}, mode: ${t.mode??`replace`}${t.hints?`, with hints`:``})`),t.minFollowUpCards!==void 0&&t.minFollowUpCards>0&&(this._minCardsGuarantee=Math.max(this._minCardsGuarantee,t.minFollowUpCards),this.log(`[Replan] Card guarantee set to ${this._minCardsGuarantee}`)),await this._executeReplan(t)}setSessionHints(t){this._sessionHints=t,this.log(`Session hints ${t?`set`:`cleared`}: ${JSON.stringify(t)}`)}getSessionHints(){return this._sessionHints}getDebugSnapshot(){let describe=t=>{let c=[];for(let u=0;u<t.length;u++)c.push(t.peek(u).cardID);return{length:t.length,dequeueCount:t.dequeueCount,cards:c}};return{secondsRemaining:this.secondsRemaining,hasCardGuarantee:this.hasCardGuarantee,minCardsGuarantee:this._minCardsGuarantee,wellIndicatedRemaining:this._wellIndicatedRemaining,currentCard:this._currentCard?.item.cardID??null,sessionHints:this._sessionHints,replanActive:this._replanPromise!==null,replanLabel:this._activeReplanLabel,reviewQ:describe(this.reviewQ),newQ:describe(this.newQ),failedQ:describe(this.failedQ)}}mergeSessionHints(t){this._sessionHints=mergeHints2([this._sessionHints,t])??null,this.log(`Session hints merged: ${JSON.stringify(this._sessionHints)}`)}_applyHintsToSources(t,c){let u=t&&c?{...t,_label:c}:t,d=mergeHints2([this._sessionHints,u]);if(d)for(let t of this.sources)t.setEphemeralHints?.(d)}_getSessionControls(){return this._sessionControls||(this._sessionControls={getSessionHints:()=>this.getSessionHints(),setSessionHints:t=>this.setSessionHints(t),mergeSessionHints:t=>this.mergeSessionHints(t),requestReplan:t=>this.requestReplan(t)}),this._sessionControls}async _notifyOutcomeObservers(t,c,u){if(this._outcomeObservers.length===0||!isQuestionRecord(t))return;let d={record:t,card:c.card,result:u},m=this._getSessionControls();for(let t of this._outcomeObservers)try{await t(d,m)}catch(t){this.error(`[OutcomeObserver] observer threw; ignoring`,t)}}async _replanUncoalesced(t){let c=this._runReplan(t),u=c.finally(()=>{this._replanPromise===u&&(this._replanPromise=null,this._activeReplanLabel=null)});this._replanPromise=u,await c}normalizeReplanOptions(t){if(!t)return{};let c=[`hints`,`sessionHints`,`limit`,`mode`,`label`,`minFollowUpCards`];return Object.keys(t).some(t=>c.includes(t))?t:{hints:t}}async _executeReplan(t={}){let c=t.limit,u=t.mode??`replace`,d=await this.getWeightedContent({replan:!0,additive:u===`merge`,limit:c});this._wellIndicatedRemaining=d,c!==void 0&&c<this._defaultBatchLimit?(this._suppressQualityReplan=!0,this.log(`[Replan] Burst mode (limit=${c}): suppressing quality-based auto-replan`)):this._suppressQualityReplan=!1,d>=0&&d<_SessionController.MIN_WELL_INDICATED&&this.log(`[Replan] Only ${d}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards after replan`),await this.hydrationService.ensureHydratedCards();let m=t.label?` [${t.label}]`:``;this.log(`Replan complete${m}: newQ now has ${this.newQ.length} cards (mode=${u})`),snapshotQueues(this.reviewQ.length,this.newQ.length,this.failedQ.length)}addTime(t){this.endTime=new Date(this.endTime.valueOf()+1e3*t)}get failedCount(){return this.failedQ.length}toString(){return`Session: ${this.reviewQ.length} Reviews, ${this.newQ.length} New, ${this.failedQ.length} failed`}reportString(){return`${this.reviewQ.dequeueCount} Reviews, ${this.newQ.dequeueCount} New, ${this.failedQ.dequeueCount} failed`}getDebugInfo(){let t=this.sources.some(t=>typeof t.getWeightedCards==`function`),extractQueueItems=(t,c=10)=>{let u=[];for(let d=0;d<Math.min(t.length,c);d++){let c=t.peek(d);u.push({courseID:c.courseID||`unknown`,cardID:c.cardID||`unknown`,status:c.status||`unknown`})}return u};return{api:{mode:t?`weighted`:`legacy`,description:t?`Using getWeightedCards() API with scored candidates`:`ERROR: getWeightedCards() not a function.`},reviewQueue:{length:this.reviewQ.length,dequeueCount:this.reviewQ.dequeueCount,items:extractQueueItems(this.reviewQ)},newQueue:{length:this.newQ.length,dequeueCount:this.newQ.dequeueCount,items:extractQueueItems(this.newQ)},failedQueue:{length:this.failedQ.length,dequeueCount:this.failedQ.dequeueCount,items:extractQueueItems(this.failedQ)},hydratedCache:{count:this.hydrationService.hydratedCount,cardIds:this.hydrationService.getHydratedCardIds()},replan:{inProgress:this._replanPromise!==null,suppressQualityReplan:this._suppressQualityReplan,defaultBatchLimit:this._defaultBatchLimit,minCardsGuarantee:this._minCardsGuarantee}}}async getWeightedContent(t){let c=t?.replan??!1,u=t?.additive??!1,d=t?.limit??this._defaultBatchLimit,m=c?d:d+this._initialReviewCap;c||this._applyHintsToSources();let g=[];for(let t=0;t<this.sources.length;t++){let c=this.sources[t];try{let u=(await c.getWeightedCards(m)).cards;g.push({sourceIndex:t,weighted:u})}catch(c){if(this.error(`Failed to get content from source ${t}:`,c),this.sources.length===1)throw Error(`Cannot start session: failed to load content from source ${t}`)}}if(g.length===0){if(c)return this.log(`Replan: no content from any source, keeping existing newQ`),-1;throw Error(`Cannot start session: failed to load content from all ${this.sources.length} source(s). Check logs for details.`)}let b=this.mixer.mix(g,m*this.sources.length),S=g.map(t=>t.weighted[0]?.courseId||`source-${t.sourceIndex}`);await Promise.all(S.map(async t=>{if(!this.courseNameCache.has(t))try{let c=await this.dataLayer.getCoursesDB().getCourseConfig(t);this.courseNameCache.set(t,c.name)}catch{}}));let C=S.map(t=>this.courseNameCache.get(t)),w=this.mixer instanceof QuotaRoundRobinMixer?Math.ceil(m*this.sources.length/g.length):void 0;captureMixerRun(this.mixer.constructor.name,g,S,C,m*this.sources.length,w,b);let T=b.filter(t=>getCardOrigin(t)===`review`).slice(0,this._initialReviewCap),E=b.filter(t=>getCardOrigin(t)===`new
|
|
457
|
+
initialReviewCap: ${this._initialReviewCap}`),registerActiveController(this)}tick(){this._secondsRemaining=Math.floor((this.endTime.valueOf()-Date.now())/1e3),this._secondsRemaining<=0&&clearInterval(this._intervalHandle)}estimateCleanupTime(){let t=0;for(let c=0;c<this.failedQ.length;c++){let u=this.failedQ.peek(c),d=this._sessionRecord.find(t=>t.item.cardID===u.cardID),m=0;if(d){for(let t=0;t<d.records.length;t++)m+=d.records[t].timeSpent;m/=d.records.length,t+=m}}let c=t/1e3;return this.log(`Failed card cleanup estimate: ${Math.round(c)}`),c}estimateReviewTime(){let t=5*this.reviewQ.length;return this.log(`Review card time estimate: ${t}`),t}async prepareSession(){if(this.sources.some(t=>typeof t.getWeightedCards!=`function`))throw Error(`[SessionController] All content sources must implement getWeightedCards().`);let t=await this.getWeightedContent();this._wellIndicatedRemaining=t,t>=0&&t<_SessionController.MIN_WELL_INDICATED&&this.log(`[Init] Only ${t}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards in initial load`),await this.hydrationService.ensureHydratedCards(),startSessionTracking(this.reviewQ.length,this.newQ.length,this.failedQ.length),this._intervalHandle=setInterval(()=>{this.tick()},1e3)}async requestReplan(t){let c=this.normalizeReplanOptions(t),u=this._replanHasIntent(c);if(this._replanPromise){if(!u)return this.log(`Replan already in progress, coalescing unhinted auto-replan`),this._replanPromise;let t=c.label?` [${c.label}]`:``;this.log(`Replan in progress; queueing hint-bearing replan${t} behind in-flight run`);let d=this._replanPromise.catch(()=>void 0).then(()=>this._runReplan(c)),m=d.finally(()=>{this._replanPromise===m&&(this._replanPromise=null,this._activeReplanLabel=null)});return this._replanPromise=m,d}let d=this._runReplan(c),m=d.finally(()=>{this._replanPromise===m&&(this._replanPromise=null,this._activeReplanLabel=null)});this._replanPromise=m,await d}_replanHasIntent(t){return!!(t.limit!==void 0||t.minFollowUpCards!==void 0||t.mode&&t.mode!==`replace`||t.hints&&Object.keys(t.hints).length>0||t.sessionHints!==void 0||t.mergeSessionHints!==void 0)}async _runReplan(t){this._activeReplanLabel=t.label??`(auto)`,t.hints||(t.hints={});let c=t.hints,u=new Set(c.excludeCards??[]);this._currentCard?.item.cardID&&u.add(this._currentCard.item.cardID);for(let t of this._sessionRecord)u.add(t.card.card_id);this.newQ.length>0&&u.add(this.newQ.peek(0).cardID),c.excludeCards=[...u],t.sessionHints!==void 0&&(this._sessionHints=t.sessionHints,this.log(`[Replan] Session hints ${t.sessionHints?`set`:`cleared`}: ${JSON.stringify(t.sessionHints)}`)),t.mergeSessionHints!==void 0&&(this._sessionHints=mergeHints2([this._sessionHints,t.mergeSessionHints])??null,this.log(`[Replan] Session hints merged: ${JSON.stringify(this._sessionHints)}`)),this._applyHintsToSources(t.hints,t.label);let d=t.label?` [${t.label}]`:``;this.log(`Mid-session replan requested${d} (limit: ${t.limit??`default`}, mode: ${t.mode??`replace`}${t.hints?`, with hints`:``})`),t.minFollowUpCards!==void 0&&t.minFollowUpCards>0&&(this._minCardsGuarantee=Math.max(this._minCardsGuarantee,t.minFollowUpCards),this.log(`[Replan] Card guarantee set to ${this._minCardsGuarantee}`)),await this._executeReplan(t)}setSessionHints(t){this._sessionHints=t,this.log(`Session hints ${t?`set`:`cleared`}: ${JSON.stringify(t)}`)}getSessionHints(){return this._sessionHints}getDebugSnapshot(){let describe=t=>{let c=[];for(let u=0;u<t.length;u++)c.push(t.peek(u).cardID);return{length:t.length,dequeueCount:t.dequeueCount,cards:c}},t=this._sessionRecord.map(t=>{let c=t.records[t.records.length-1];return{cardID:t.item.cardID,status:t.item.status,attempts:t.records.length,correct:c&&isQuestionRecord(c)?c.isCorrect:null,timeSpentMs:t.records.reduce((t,c)=>t+c.timeSpent,0)}});return{secondsRemaining:this.secondsRemaining,hasCardGuarantee:this.hasCardGuarantee,minCardsGuarantee:this._minCardsGuarantee,wellIndicatedRemaining:this._wellIndicatedRemaining,currentCard:this._currentCard?.item.cardID??null,sessionHints:this._sessionHints,replanActive:this._replanPromise!==null,replanLabel:this._activeReplanLabel,reviewQ:describe(this.reviewQ),newQ:describe(this.newQ),failedQ:describe(this.failedQ),drawnCards:t}}mergeSessionHints(t){this._sessionHints=mergeHints2([this._sessionHints,t])??null,this.log(`Session hints merged: ${JSON.stringify(this._sessionHints)}`)}_applyHintsToSources(t,c){let u=t&&c?{...t,_label:c}:t,d=mergeHints2([this._sessionHints,u]);if(d)for(let t of this.sources)t.setEphemeralHints?.(d)}_getSessionControls(){return this._sessionControls||(this._sessionControls={getSessionHints:()=>this.getSessionHints(),setSessionHints:t=>this.setSessionHints(t),mergeSessionHints:t=>this.mergeSessionHints(t),requestReplan:t=>this.requestReplan(t)}),this._sessionControls}async _notifyOutcomeObservers(t,c,u){if(this._outcomeObservers.length===0||!isQuestionRecord(t))return;let d={record:t,card:c.card,result:u},m=this._getSessionControls();for(let t of this._outcomeObservers)try{await t(d,m)}catch(t){this.error(`[OutcomeObserver] observer threw; ignoring`,t)}}async _replanUncoalesced(t){let c=this._runReplan(t),u=c.finally(()=>{this._replanPromise===u&&(this._replanPromise=null,this._activeReplanLabel=null)});this._replanPromise=u,await c}normalizeReplanOptions(t){if(!t)return{};let c=[`hints`,`sessionHints`,`limit`,`mode`,`label`,`minFollowUpCards`];return Object.keys(t).some(t=>c.includes(t))?t:{hints:t}}async _executeReplan(t={}){let c=t.limit,u=t.mode??`replace`,d=await this.getWeightedContent({replan:!0,additive:u===`merge`,limit:c});this._wellIndicatedRemaining=d,c!==void 0&&c<this._defaultBatchLimit?(this._suppressQualityReplan=!0,this.log(`[Replan] Burst mode (limit=${c}): suppressing quality-based auto-replan`)):this._suppressQualityReplan=!1,d>=0&&d<_SessionController.MIN_WELL_INDICATED&&this.log(`[Replan] Only ${d}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards after replan`),await this.hydrationService.ensureHydratedCards();let m=t.label?` [${t.label}]`:``;this.log(`Replan complete${m}: newQ now has ${this.newQ.length} cards (mode=${u})`),snapshotQueues(this.reviewQ.length,this.newQ.length,this.failedQ.length)}addTime(t){this.endTime=new Date(this.endTime.valueOf()+1e3*t)}get failedCount(){return this.failedQ.length}toString(){return`Session: ${this.reviewQ.length} Reviews, ${this.newQ.length} New, ${this.failedQ.length} failed`}reportString(){return`${this.reviewQ.dequeueCount} Reviews, ${this.newQ.dequeueCount} New, ${this.failedQ.dequeueCount} failed`}getDebugInfo(){let t=this.sources.some(t=>typeof t.getWeightedCards==`function`),extractQueueItems=(t,c=10)=>{let u=[];for(let d=0;d<Math.min(t.length,c);d++){let c=t.peek(d);u.push({courseID:c.courseID||`unknown`,cardID:c.cardID||`unknown`,status:c.status||`unknown`})}return u};return{api:{mode:t?`weighted`:`legacy`,description:t?`Using getWeightedCards() API with scored candidates`:`ERROR: getWeightedCards() not a function.`},reviewQueue:{length:this.reviewQ.length,dequeueCount:this.reviewQ.dequeueCount,items:extractQueueItems(this.reviewQ)},newQueue:{length:this.newQ.length,dequeueCount:this.newQ.dequeueCount,items:extractQueueItems(this.newQ)},failedQueue:{length:this.failedQ.length,dequeueCount:this.failedQ.dequeueCount,items:extractQueueItems(this.failedQ)},hydratedCache:{count:this.hydrationService.hydratedCount,cardIds:this.hydrationService.getHydratedCardIds()},replan:{inProgress:this._replanPromise!==null,suppressQualityReplan:this._suppressQualityReplan,defaultBatchLimit:this._defaultBatchLimit,minCardsGuarantee:this._minCardsGuarantee}}}async getWeightedContent(t){let c=t?.replan??!1,u=t?.additive??!1,d=t?.limit??this._defaultBatchLimit,m=c?d:d+this._initialReviewCap;c||this._applyHintsToSources();let g=[];for(let t=0;t<this.sources.length;t++){let c=this.sources[t];try{let u=(await c.getWeightedCards(m)).cards;g.push({sourceIndex:t,weighted:u})}catch(c){if(this.error(`Failed to get content from source ${t}:`,c),this.sources.length===1)throw Error(`Cannot start session: failed to load content from source ${t}`)}}if(g.length===0){if(c)return this.log(`Replan: no content from any source, keeping existing newQ`),-1;throw Error(`Cannot start session: failed to load content from all ${this.sources.length} source(s). Check logs for details.`)}let b=this.mixer.mix(g,m*this.sources.length),S=g.map(t=>t.weighted[0]?.courseId||`source-${t.sourceIndex}`);await Promise.all(S.map(async t=>{if(!this.courseNameCache.has(t))try{let c=await this.dataLayer.getCoursesDB().getCourseConfig(t);this.courseNameCache.set(t,c.name)}catch{}}));let C=S.map(t=>this.courseNameCache.get(t)),w=this.mixer instanceof QuotaRoundRobinMixer?Math.ceil(m*this.sources.length/g.length):void 0;captureMixerRun(this.mixer.constructor.name,g,S,C,m*this.sources.length,w,b);let T=b.filter(t=>getCardOrigin(t)===`review`).slice(0,this._initialReviewCap),E=b.filter(t=>getCardOrigin(t)===`new`&&!this._servedCardIds.has(t.cardId)).slice(0,d);logger.debug(`[reviews] got ${T.length} reviews from mixer`);let D=c?`Replan content:
|
|
455
458
|
`:`Mixed content session created with:
|
|
456
459
|
`;if(!c)for(let t of T){let c={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,reviewID:t.reviewID,status:`review`};this.reviewQ.add(c,c.cardID),D+=`Review: ${t.courseId}::${t.cardId} (score: ${t.score.toFixed(2)})
|
|
457
460
|
`}let O=E.filter(t=>t.score>=_SessionController.WELL_INDICATED_SCORE).length,Or=[];for(let t of E){let c={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,status:`new`};Or.push(c),D+=`New: ${t.courseId}::${t.cardId} (score: ${t.score.toFixed(2)})
|
|
458
461
|
`}if(u){let t=this.newQ.mergeToFront(Or,t=>t.cardID);D+=`Additive merge: ${t} new cards added to front of newQ
|
|
459
|
-
`}else if(c)this.newQ.replaceAll(Or,t=>t.cardID);else for(let t of Or)this.newQ.add(t,t.cardID);return this.log(D),O}_getItemsToHydrate(){let t=[],c=2;for(let c=0;c<Math.min(2,this.reviewQ.length);c++)t.push(this.reviewQ.peek(c));for(let c=0;c<Math.min(2,this.newQ.length);c++)t.push(this.newQ.peek(c));for(let c=0;c<Math.min(2,this.failedQ.length);c++)t.push(this.failedQ.peek(c));return t}_selectNextItemToHydrate(){let t=Math.random(),c=.1,u=.75;if(this.reviewQ.length===0&&this.failedQ.length===0&&this.newQ.length===0||this._secondsRemaining<2&&this.failedQ.length===0&&this._minCardsGuarantee<=0)return null;if(this._secondsRemaining<=0&&this._minCardsGuarantee<=0)return this.failedQ.length>0?this.failedQ.peek(0):null;if(this.newQ.dequeueCount<this.sources.length&&this.newQ.length)return this.newQ.peek(0);let d=this.estimateCleanupTime(),m=this.estimateReviewTime();return this._secondsRemaining-(d+m)>20?(c=.5,u=.9):this._secondsRemaining-d>20?(c=.05,u=.9):(c=.01,u=.1),this.failedQ.length===0&&(u=1),this.reviewQ.length===0&&(c=u),t<c&&this.newQ.length?this.newQ.peek(0):t<u&&this.reviewQ.length?this.reviewQ.peek(0):this.failedQ.length?this.failedQ.peek(0):(this.log(`No more cards available for the session!`),null)}async nextCard(t=`dismiss-success`){if(this.dismissCurrentCard(t),this._minCardsGuarantee>0&&(this._minCardsGuarantee--,this.log(`[CardGuarantee] ${this._minCardsGuarantee} guaranteed cards remaining`)),this._replanPromise&&this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0&&(this.log(`nextCard: queues empty, awaiting in-flight replan before drawing`),await this._replanPromise),this.newQ.length<=_SessionController.DEPLETION_PREFETCH_THRESHOLD&&this._secondsRemaining>0&&!this._replanPromise){this._suppressQualityReplan=!1;let t=this.reviewQ.length+this.failedQ.length;this.log(`[AutoReplan:depletion] newQ has ${this.newQ.length} card(s) (${t} in other queues) with ${this._secondsRemaining}s remaining. Triggering background replan.`),this.requestReplan({label:`auto:depletion`})}if(!this._suppressQualityReplan&&this._wellIndicatedRemaining<=3&&this.newQ.length>0&&!this._replanPromise&&(this.log(`[AutoReplan:quality] ${this._wellIndicatedRemaining} well-indicated cards remaining (newQ: ${this.newQ.length}). Triggering background replan.`),this.requestReplan({label:`auto:quality`})),this._secondsRemaining<=0&&this.failedQ.length===0&&this._minCardsGuarantee<=0)return this._currentCard=null,endSessionTracking(),null;let c=3,u=250,d=0;for(;this._secondsRemaining>0&&this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0;)if(this.log(`[WedgeBreaker] All queues empty with ${this._secondsRemaining}s remaining. Running pipeline (attempt ${d+1}/3).`),await this._replanUncoalesced({label:`wedge-breaker`}),this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0){if(d++,d>=3){this.log(`[WedgeBreaker] Pipeline returned no content 3 consecutive times. Giving up; session will end.`);break}await new Promise(t=>setTimeout(t,250))}else d=0;let m=20;for(let t=0;t<20;t++){let t=this._selectNextItemToHydrate();if(!t)return this._currentCard=null,endSessionTracking(),null;let c=this.hydrationService.getHydratedCard(t.cardID);if(c||(c=await this.hydrationService.waitForCard(t.cardID)),this.removeItemFromQueue(t),c){await this.hydrationService.ensureHydratedCards(),this._currentCard=c;let u=t.status===`review`||t.status===`failed-review`?`review`:t.status===`new`||t.status===`failed-new`?`new`:`failed`,d=t.status.startsWith(`failed`)?`failedQ`:t.status===`review`?`reviewQ`:`newQ`;return recordCardPresentation(t.cardID,t.courseID,this.courseNameCache.get(t.courseID),u,d),snapshotQueues(this.reviewQ.length,this.newQ.length,this.failedQ.length),c}this.log(`Skipping card ${t.cardID}: hydration failed, trying next`),isReview(t)&&this.srsService.removeReview(t.reviewID)}return this.log(`Exhausted 20 skip attempts finding a hydratable card`),this._currentCard=null,endSessionTracking(),null}async submitResponse(t,c,u,d,m,g,b,S,C){let w={...d.item},T=await this.services.response.processResponse(t,c,w,u,d,m,g,b,S,C);return await this._notifyOutcomeObservers(t,d,T),T}dismissCurrentCard(t=`dismiss-success`){if(this._currentCard)if(t===`dismiss-success`)this.hydrationService.removeCard(this._currentCard.item.cardID);else if(t===`marked-failed`){let t;t=isReview(this._currentCard.item)?{cardID:this._currentCard.item.cardID,courseID:this._currentCard.item.courseID,contentSourceID:this._currentCard.item.contentSourceID,contentSourceType:this._currentCard.item.contentSourceType,status:`failed-review`,reviewID:this._currentCard.item.reviewID}:{cardID:this._currentCard.item.cardID,courseID:this._currentCard.item.courseID,contentSourceID:this._currentCard.item.contentSourceID,contentSourceType:this._currentCard.item.contentSourceType,status:`failed-new`},this.failedQ.add(t,t.cardID)}else (t===`dismiss-error`||t===`dismiss-failed`)&&this.hydrationService.removeCard(this._currentCard.item.cardID)}removeItemFromQueue(t){this.reviewQ.peek(0)?.cardID===t.cardID?this.reviewQ.dequeue(t=>t.cardID):this.newQ.peek(0)?.cardID===t.cardID?(this.newQ.dequeue(t=>t.cardID),this._wellIndicatedRemaining>0&&this._wellIndicatedRemaining--):this.failedQ.peek(0)?.cardID===t.cardID&&this.failedQ.dequeue(t=>t.cardID)}async endSession(){if(!this._sessionRecord||this._sessionRecord.length===0)return;let t=this._sessionRecord.flatMap(t=>t.records).filter(t=>t.userAnswer!==void 0);if(t.length===0)return;let c=null,u=[];for(let t of this.sources)if(t.getOrchestrationContext){try{c=await t.getOrchestrationContext(),t.getStrategyIds&&u.push(...t.getStrategyIds())}catch(t){logger.warn(`[SessionController] Failed to get orchestration context: ${t}`)}if(c)break}if(!c){logger.debug(`[SessionController] No orchestration context available, skipping outcome recording`);return}let d=new Date().toISOString(),m=new Date(this.startTime).toISOString();await recordUserOutcome(c,m,d,t,u)}},_defineProperty$2(_SessionController2,`MIN_WELL_INDICATED`,5),_defineProperty$2(_SessionController2,`WELL_INDICATED_SCORE`,.1),_defineProperty$2(_SessionController2,`DEPLETION_PREFETCH_THRESHOLD`,3),_SessionController2),init_TagFilteredContentSource(),init_factory()}));function useRouter(){return inject(routerKey)}function useRoute(t){return inject(routeLocationKey)}var isArray,NavigationType,NavigationDirection,NavigationFailureSymbol,NavigationFailureType,matchedRouteKey,viewDepthKey,routerKey,routeLocationKey,routerViewLocationKey,init_vue_router=__esmMin((()=>{init_vue_runtime_esm_bundler(),Array.isArray,(function(t){t.pop=`pop`,t.push=`push`})(NavigationType||(NavigationType={})),(function(t){t.back=`back`,t.forward=`forward`,t.unknown=``})(NavigationDirection||(NavigationDirection={})),Symbol(process.env.NODE_ENV===`production`?``:`navigation failure`),(function(t){t[t.aborted=4]=`aborted`,t[t.cancelled=8]=`cancelled`,t[t.duplicated=16]=`duplicated`})(NavigationFailureType||(NavigationFailureType={})),Symbol(process.env.NODE_ENV===`production`?``:`router view location matched`),Symbol(process.env.NODE_ENV===`production`?``:`router view depth`),routerKey=Symbol(process.env.NODE_ENV===`production`?``:`router`),routeLocationKey=Symbol(process.env.NODE_ENV===`production`?``:`route location`),Symbol(process.env.NODE_ENV===`production`?``:`router view location`)})),init_style=__esmMin((()=>{}));function registerRuntimeHelpers(t){Object.getOwnPropertySymbols(t).forEach(c=>{helperNameMap[c]=t[c]})}function createRoot(t,c=``){return{type:0,source:c,children:t,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:locStub}}function createVNodeCall(t,c,u,d,m,g,b,S=!1,C=!1,w=!1,T=locStub){return t&&(S?(t.helper(OPEN_BLOCK),t.helper(getVNodeBlockHelper(t.inSSR,w))):t.helper(getVNodeHelper(t.inSSR,w)),b&&t.helper(WITH_DIRECTIVES)),{type:13,tag:c,props:u,children:d,patchFlag:m,dynamicProps:g,directives:b,isBlock:S,disableTracking:C,isComponent:w,loc:T}}function createArrayExpression(t,c=locStub){return{type:17,loc:c,elements:t}}function createObjectExpression(t,c=locStub){return{type:15,loc:c,properties:t}}function createObjectProperty(t,c){return{type:16,loc:locStub,key:isString$1(t)?createSimpleExpression(t,!0):t,value:c}}function createSimpleExpression(t,c=!1,u=locStub,d=0){return{type:4,loc:u,content:t,isStatic:c,constType:c?3:d}}function createInterpolation(t,c){return{type:5,loc:c,content:isString$1(t)?createSimpleExpression(t,!1,c):t}}function createCompoundExpression(t,c=locStub){return{type:8,loc:c,children:t}}function createCallExpression(t,c=[],u=locStub){return{type:14,loc:u,callee:t,arguments:c}}function createFunctionExpression(t,c=void 0,u=!1,d=!1,m=locStub){return{type:18,params:t,returns:c,newline:u,isSlot:d,loc:m}}function createConditionalExpression(t,c,u,d=!0){return{type:19,test:t,consequent:c,alternate:u,newline:d,loc:locStub}}function createCacheExpression(t,c,u=!1,d=!1){return{type:20,index:t,value:c,needPauseTracking:u,inVOnce:d,needArraySpread:!1,loc:locStub}}function createBlockStatement(t){return{type:21,body:t,loc:locStub}}function createTemplateLiteral(t){return{type:22,elements:t,loc:locStub}}function createIfStatement(t,c,u){return{type:23,test:t,consequent:c,alternate:u,loc:locStub}}function createAssignmentExpression(t,c){return{type:24,left:t,right:c,loc:locStub}}function createSequenceExpression(t){return{type:25,expressions:t,loc:locStub}}function createReturnStatement(t){return{type:26,returns:t,loc:locStub}}function getVNodeHelper(t,c){return t||c?CREATE_VNODE:CREATE_ELEMENT_VNODE}function getVNodeBlockHelper(t,c){return t||c?CREATE_BLOCK:CREATE_ELEMENT_BLOCK}function convertToBlock(t,{helper:c,removeHelper:u,inSSR:d}){t.isBlock||(t.isBlock=!0,u(getVNodeHelper(d,t.isComponent)),c(OPEN_BLOCK),c(getVNodeBlockHelper(d,t.isComponent)))}function isTagStartChar(t){return t>=97&&t<=122||t>=65&&t<=90}function isWhitespace(t){return t===32||t===10||t===9||t===12||t===13}function isEndOfTagSection(t){return t===47||t===62||isWhitespace(t)}function toCharCodes(t){let c=new Uint8Array(t.length);for(let u=0;u<t.length;u++)c[u]=t.charCodeAt(u);return c}function getCompatValue(t,{compatConfig:c}){let u=c&&c[t];return t===`MODE`?u||3:u}function isCompatEnabled(t,c){let u=getCompatValue(`MODE`,c),d=getCompatValue(t,c);return u===3?d===!0:d!==!1}function checkCompatEnabled(t,c,u,...d){let m=isCompatEnabled(t,c);return process.env.NODE_ENV!==`production`&&m&&warnDeprecation(t,c,u,...d),m}function warnDeprecation(t,c,u,...d){if(getCompatValue(t,c)===`suppress-warning`)return;let{message:m,link:g}=deprecationData[t],b=`(deprecation ${t}) ${typeof m==`function`?m(...d):m}${g?`
|
|
462
|
+
`}else if(c)this.newQ.replaceAll(Or,t=>t.cardID);else for(let t of Or)this.newQ.add(t,t.cardID);return this.log(D),O}_getItemsToHydrate(){let t=[],c=2;for(let c=0;c<Math.min(2,this.reviewQ.length);c++)t.push(this.reviewQ.peek(c));for(let c=0;c<Math.min(2,this.newQ.length);c++)t.push(this.newQ.peek(c));for(let c=0;c<Math.min(2,this.failedQ.length);c++)t.push(this.failedQ.peek(c));return t}_selectNextItemToHydrate(){let t=Math.random(),c=.1,u=.75;if(this.reviewQ.length===0&&this.failedQ.length===0&&this.newQ.length===0||this._secondsRemaining<2&&this.failedQ.length===0&&this._minCardsGuarantee<=0)return null;if(this._secondsRemaining<=0&&this._minCardsGuarantee<=0)return this.failedQ.length>0?this.failedQ.peek(0):null;if(this.newQ.dequeueCount<this.sources.length&&this.newQ.length)return this.newQ.peek(0);let d=this.estimateCleanupTime(),m=this.estimateReviewTime();return this._secondsRemaining-(d+m)>20?(c=.5,u=.9):this._secondsRemaining-d>20?(c=.05,u=.9):(c=.01,u=.1),this.failedQ.length===0&&(u=1),this.reviewQ.length===0&&(c=u),t<c&&this.newQ.length?this.newQ.peek(0):t<u&&this.reviewQ.length?this.reviewQ.peek(0):this.failedQ.length?this.failedQ.peek(0):(this.log(`No more cards available for the session!`),null)}async nextCard(t=`dismiss-success`){if(this.dismissCurrentCard(t),this._minCardsGuarantee>0&&(this._minCardsGuarantee--,this.log(`[CardGuarantee] ${this._minCardsGuarantee} guaranteed cards remaining`)),this._replanPromise&&this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0&&(this.log(`nextCard: queues empty, awaiting in-flight replan before drawing`),await this._replanPromise),this.newQ.length<=_SessionController.DEPLETION_PREFETCH_THRESHOLD&&this._secondsRemaining>0&&!this._replanPromise){this._suppressQualityReplan=!1;let t=this.reviewQ.length+this.failedQ.length;this.log(`[AutoReplan:depletion] newQ has ${this.newQ.length} card(s) (${t} in other queues) with ${this._secondsRemaining}s remaining. Triggering background replan.`),this.requestReplan({label:`auto:depletion`,mode:`merge`})}if(!this._suppressQualityReplan&&this._wellIndicatedRemaining<=3&&this.newQ.length>0&&!this._replanPromise&&(this.log(`[AutoReplan:quality] ${this._wellIndicatedRemaining} well-indicated cards remaining (newQ: ${this.newQ.length}). Triggering background replan.`),this.requestReplan({label:`auto:quality`})),this._secondsRemaining<=0&&this.failedQ.length===0&&this._minCardsGuarantee<=0)return this._currentCard=null,endSessionTracking(),null;let c=3,u=250,d=0;for(;this._secondsRemaining>0&&this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0;)if(this.log(`[WedgeBreaker] All queues empty with ${this._secondsRemaining}s remaining. Running pipeline (attempt ${d+1}/3).`),await this._replanUncoalesced({label:`wedge-breaker`}),this.newQ.length===0&&this.reviewQ.length===0&&this.failedQ.length===0){if(d++,d>=3){this.log(`[WedgeBreaker] Pipeline returned no content 3 consecutive times. Giving up; session will end.`);break}await new Promise(t=>setTimeout(t,250))}else d=0;let m=20;for(let t=0;t<20;t++){let t=this._selectNextItemToHydrate();if(!t)return this._currentCard=null,endSessionTracking(),null;let c=this.hydrationService.getHydratedCard(t.cardID);if(c||(c=await this.hydrationService.waitForCard(t.cardID)),this.removeItemFromQueue(t),c){await this.hydrationService.ensureHydratedCards(),this._currentCard=c;let u=t.status===`review`||t.status===`failed-review`?`review`:t.status===`new`||t.status===`failed-new`?`new`:`failed`,d=t.status.startsWith(`failed`)?`failedQ`:t.status===`review`?`reviewQ`:`newQ`;return recordCardPresentation(t.cardID,t.courseID,this.courseNameCache.get(t.courseID),u,d),snapshotQueues(this.reviewQ.length,this.newQ.length,this.failedQ.length),c}this.log(`Skipping card ${t.cardID}: hydration failed, trying next`),isReview(t)&&this.srsService.removeReview(t.reviewID)}return this.log(`Exhausted 20 skip attempts finding a hydratable card`),this._currentCard=null,endSessionTracking(),null}async submitResponse(t,c,u,d,m,g,b,S,C){let w={...d.item},T=await this.services.response.processResponse(t,c,w,u,d,m,g,b,S,C);return await this._notifyOutcomeObservers(t,d,T),T}dismissCurrentCard(t=`dismiss-success`){if(this._currentCard)if(t===`dismiss-success`)this.hydrationService.removeCard(this._currentCard.item.cardID);else if(t===`marked-failed`){let t;t=isReview(this._currentCard.item)?{cardID:this._currentCard.item.cardID,courseID:this._currentCard.item.courseID,contentSourceID:this._currentCard.item.contentSourceID,contentSourceType:this._currentCard.item.contentSourceType,status:`failed-review`,reviewID:this._currentCard.item.reviewID}:{cardID:this._currentCard.item.cardID,courseID:this._currentCard.item.courseID,contentSourceID:this._currentCard.item.contentSourceID,contentSourceType:this._currentCard.item.contentSourceType,status:`failed-new`},this.failedQ.add(t,t.cardID)}else (t===`dismiss-error`||t===`dismiss-failed`)&&this.hydrationService.removeCard(this._currentCard.item.cardID)}removeItemFromQueue(t){this._clearDurableRequirement(t.cardID),this._servedCardIds.add(t.cardID),this.reviewQ.peek(0)?.cardID===t.cardID?this.reviewQ.dequeue(t=>t.cardID):this.newQ.peek(0)?.cardID===t.cardID?(this.newQ.dequeue(t=>t.cardID),this._wellIndicatedRemaining>0&&this._wellIndicatedRemaining--):this.failedQ.peek(0)?.cardID===t.cardID&&this.failedQ.dequeue(t=>t.cardID)}_clearDurableRequirement(t){let c=this._sessionHints?.requireCards;if(!c||c.length===0)return;let u=c.filter(c=>c!==t);u.length!==c.length&&(this._sessionHints={...this._sessionHints,requireCards:u.length>0?u:void 0},this.log(`[Replan] Durable requirement satisfied & cleared on draw: ${t}`))}async endSession(){if(!this._sessionRecord||this._sessionRecord.length===0)return;let t=this._sessionRecord.flatMap(t=>t.records).filter(t=>t.userAnswer!==void 0);if(t.length===0)return;let c=null,u=[];for(let t of this.sources)if(t.getOrchestrationContext){try{c=await t.getOrchestrationContext(),t.getStrategyIds&&u.push(...t.getStrategyIds())}catch(t){logger.warn(`[SessionController] Failed to get orchestration context: ${t}`)}if(c)break}if(!c){logger.debug(`[SessionController] No orchestration context available, skipping outcome recording`);return}let d=new Date().toISOString(),m=new Date(this.startTime).toISOString();await recordUserOutcome(c,m,d,t,u)}},_defineProperty$2(_SessionController2,`MIN_WELL_INDICATED`,5),_defineProperty$2(_SessionController2,`WELL_INDICATED_SCORE`,.1),_defineProperty$2(_SessionController2,`DEPLETION_PREFETCH_THRESHOLD`,3),_SessionController2),init_TagFilteredContentSource(),init_factory()}));function useRouter(){return inject(routerKey)}function useRoute(t){return inject(routeLocationKey)}var isArray,NavigationType,NavigationDirection,NavigationFailureSymbol,NavigationFailureType,matchedRouteKey,viewDepthKey,routerKey,routeLocationKey,routerViewLocationKey,init_vue_router=__esmMin((()=>{init_vue_runtime_esm_bundler(),Array.isArray,(function(t){t.pop=`pop`,t.push=`push`})(NavigationType||(NavigationType={})),(function(t){t.back=`back`,t.forward=`forward`,t.unknown=``})(NavigationDirection||(NavigationDirection={})),Symbol(process.env.NODE_ENV===`production`?``:`navigation failure`),(function(t){t[t.aborted=4]=`aborted`,t[t.cancelled=8]=`cancelled`,t[t.duplicated=16]=`duplicated`})(NavigationFailureType||(NavigationFailureType={})),Symbol(process.env.NODE_ENV===`production`?``:`router view location matched`),Symbol(process.env.NODE_ENV===`production`?``:`router view depth`),routerKey=Symbol(process.env.NODE_ENV===`production`?``:`router`),routeLocationKey=Symbol(process.env.NODE_ENV===`production`?``:`route location`),Symbol(process.env.NODE_ENV===`production`?``:`router view location`)})),init_style=__esmMin((()=>{}));function registerRuntimeHelpers(t){Object.getOwnPropertySymbols(t).forEach(c=>{helperNameMap[c]=t[c]})}function createRoot(t,c=``){return{type:0,source:c,children:t,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:locStub}}function createVNodeCall(t,c,u,d,m,g,b,S=!1,C=!1,w=!1,T=locStub){return t&&(S?(t.helper(OPEN_BLOCK),t.helper(getVNodeBlockHelper(t.inSSR,w))):t.helper(getVNodeHelper(t.inSSR,w)),b&&t.helper(WITH_DIRECTIVES)),{type:13,tag:c,props:u,children:d,patchFlag:m,dynamicProps:g,directives:b,isBlock:S,disableTracking:C,isComponent:w,loc:T}}function createArrayExpression(t,c=locStub){return{type:17,loc:c,elements:t}}function createObjectExpression(t,c=locStub){return{type:15,loc:c,properties:t}}function createObjectProperty(t,c){return{type:16,loc:locStub,key:isString$1(t)?createSimpleExpression(t,!0):t,value:c}}function createSimpleExpression(t,c=!1,u=locStub,d=0){return{type:4,loc:u,content:t,isStatic:c,constType:c?3:d}}function createInterpolation(t,c){return{type:5,loc:c,content:isString$1(t)?createSimpleExpression(t,!1,c):t}}function createCompoundExpression(t,c=locStub){return{type:8,loc:c,children:t}}function createCallExpression(t,c=[],u=locStub){return{type:14,loc:u,callee:t,arguments:c}}function createFunctionExpression(t,c=void 0,u=!1,d=!1,m=locStub){return{type:18,params:t,returns:c,newline:u,isSlot:d,loc:m}}function createConditionalExpression(t,c,u,d=!0){return{type:19,test:t,consequent:c,alternate:u,newline:d,loc:locStub}}function createCacheExpression(t,c,u=!1,d=!1){return{type:20,index:t,value:c,needPauseTracking:u,inVOnce:d,needArraySpread:!1,loc:locStub}}function createBlockStatement(t){return{type:21,body:t,loc:locStub}}function createTemplateLiteral(t){return{type:22,elements:t,loc:locStub}}function createIfStatement(t,c,u){return{type:23,test:t,consequent:c,alternate:u,loc:locStub}}function createAssignmentExpression(t,c){return{type:24,left:t,right:c,loc:locStub}}function createSequenceExpression(t){return{type:25,expressions:t,loc:locStub}}function createReturnStatement(t){return{type:26,returns:t,loc:locStub}}function getVNodeHelper(t,c){return t||c?CREATE_VNODE:CREATE_ELEMENT_VNODE}function getVNodeBlockHelper(t,c){return t||c?CREATE_BLOCK:CREATE_ELEMENT_BLOCK}function convertToBlock(t,{helper:c,removeHelper:u,inSSR:d}){t.isBlock||(t.isBlock=!0,u(getVNodeHelper(d,t.isComponent)),c(OPEN_BLOCK),c(getVNodeBlockHelper(d,t.isComponent)))}function isTagStartChar(t){return t>=97&&t<=122||t>=65&&t<=90}function isWhitespace(t){return t===32||t===10||t===9||t===12||t===13}function isEndOfTagSection(t){return t===47||t===62||isWhitespace(t)}function toCharCodes(t){let c=new Uint8Array(t.length);for(let u=0;u<t.length;u++)c[u]=t.charCodeAt(u);return c}function getCompatValue(t,{compatConfig:c}){let u=c&&c[t];return t===`MODE`?u||3:u}function isCompatEnabled(t,c){let u=getCompatValue(`MODE`,c),d=getCompatValue(t,c);return u===3?d===!0:d!==!1}function checkCompatEnabled(t,c,u,...d){let m=isCompatEnabled(t,c);return process.env.NODE_ENV!==`production`&&m&&warnDeprecation(t,c,u,...d),m}function warnDeprecation(t,c,u,...d){if(getCompatValue(t,c)===`suppress-warning`)return;let{message:m,link:g}=deprecationData[t],b=`(deprecation ${t}) ${typeof m==`function`?m(...d):m}${g?`
|
|
460
463
|
Details: ${g}`:``}`,S=SyntaxError(b);S.code=t,u&&(S.loc=u),c.onWarn(S)}function defaultOnError(t){throw t}function defaultOnWarn(t){process.env.NODE_ENV!==`production`&&console.warn(`[Vue warn] ${t.message}`)}function createCompilerError(t,c,u,d){let m=process.env.NODE_ENV===`production`?`https://vuejs.org/error-reference/#compiler-${t}`:(u||errorMessages)[t]+(d||``),g=SyntaxError(String(m));return g.code=t,g.loc=c,g}function walkIdentifiers(t,c,u=!1,d=[],m=Object.create(null)){}function isReferencedIdentifier(t,c,u){return!1}function isInDestructureAssignment(t,c){if(t&&(t.type===`ObjectProperty`||t.type===`ArrayPattern`)){let t=c.length;for(;t--;){let u=c[t];if(u.type===`AssignmentExpression`)return!0;if(u.type!==`ObjectProperty`&&!u.type.endsWith(`Pattern`))break}}return!1}function isInNewExpression(t){let c=t.length;for(;c--;){let u=t[c];if(u.type===`NewExpression`)return!0;if(u.type!==`MemberExpression`)break}return!1}function walkFunctionParams(t,c){for(let u of t.params)for(let t of extractIdentifiers(u))c(t)}function walkBlockDeclarations(t,c){for(let u of t.body)if(u.type===`VariableDeclaration`){if(u.declare)continue;for(let t of u.declarations)for(let u of extractIdentifiers(t.id))c(u)}else if(u.type===`FunctionDeclaration`||u.type===`ClassDeclaration`){if(u.declare||!u.id)continue;c(u.id)}else isForStatement(u)&&walkForStatement(u,!0,c)}function isForStatement(t){return t.type===`ForOfStatement`||t.type===`ForInStatement`||t.type===`ForStatement`}function walkForStatement(t,c,u){let d=t.type===`ForStatement`?t.init:t.left;if(d&&d.type===`VariableDeclaration`&&(d.kind===`var`?c:!c))for(let t of d.declarations)for(let c of extractIdentifiers(t.id))u(c)}function extractIdentifiers(t,c=[]){switch(t.type){case`Identifier`:c.push(t);break;case`MemberExpression`:let u=t;for(;u.type===`MemberExpression`;)u=u.object;c.push(u);break;case`ObjectPattern`:for(let u of t.properties)u.type===`RestElement`?extractIdentifiers(u.argument,c):extractIdentifiers(u.value,c);break;case`ArrayPattern`:t.elements.forEach(t=>{t&&extractIdentifiers(t,c)});break;case`RestElement`:extractIdentifiers(t.argument,c);break;case`AssignmentPattern`:extractIdentifiers(t.left,c);break}return c}function unwrapTSNode(t){return TS_NODE_TYPES.includes(t.type)?unwrapTSNode(t.expression):t}function isCoreComponent(t){switch(t){case`Teleport`:case`teleport`:return TELEPORT;case`Suspense`:case`suspense`:return SUSPENSE;case`KeepAlive`:case`keep-alive`:return KEEP_ALIVE;case`BaseTransition`:case`base-transition`:return BASE_TRANSITION}}function advancePositionWithClone(t,c,u=c.length){return advancePositionWithMutation({offset:t.offset,line:t.line,column:t.column},c,u)}function advancePositionWithMutation(t,c,u=c.length){let d=0,m=-1;for(let t=0;t<u;t++)c.charCodeAt(t)===10&&(d++,m=t);return t.offset+=u,t.line+=d,t.column=m===-1?t.column+u:u-m,t}function assert(t,c){if(!t)throw Error(c||`unexpected compiler condition`)}function findDir(t,c,u=!1){for(let d=0;d<t.props.length;d++){let m=t.props[d];if(m.type===7&&(u||m.exp)&&(isString$1(c)?m.name===c:c.test(m.name)))return m}}function findProp(t,c,u=!1,d=!1){for(let m=0;m<t.props.length;m++){let g=t.props[m];if(g.type===6){if(u)continue;if(g.name===c&&(g.value||d))return g}else if(g.name===`bind`&&(g.exp||d)&&isStaticArgOf(g.arg,c))return g}}function isStaticArgOf(t,c){return!!(t&&isStaticExp(t)&&t.content===c)}function hasDynamicKeyVBind(t){return t.props.some(t=>t.type===7&&t.name===`bind`&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function isText$1(t){return t.type===5||t.type===2}function isVSlot(t){return t.type===7&&t.name===`slot`}function isTemplateNode(t){return t.type===1&&t.tagType===3}function isSlotOutlet(t){return t.type===1&&t.tagType===2}function getUnnormalizedProps(t,c=[]){if(t&&!isString$1(t)&&t.type===14){let u=t.callee;if(!isString$1(u)&&propsHelperSet.has(u))return getUnnormalizedProps(t.arguments[0],c.concat(t))}return[t,c]}function injectProp(t,c,u){let d,m=t.type===13?t.props:t.arguments[2],g=[],b;if(m&&!isString$1(m)&&m.type===14){let t=getUnnormalizedProps(m);m=t[0],g=t[1],b=g[g.length-1]}if(m==null||isString$1(m))d=createObjectExpression([c]);else if(m.type===14){let t=m.arguments[0];!isString$1(t)&&t.type===15?hasProp(c,t)||t.properties.unshift(c):m.callee===TO_HANDLERS?d=createCallExpression(u.helper(MERGE_PROPS),[createObjectExpression([c]),m]):m.arguments.unshift(createObjectExpression([c])),!d&&(d=m)}else m.type===15?(hasProp(c,m)||m.properties.unshift(c),d=m):(d=createCallExpression(u.helper(MERGE_PROPS),[createObjectExpression([c]),m]),b&&b.callee===GUARD_REACTIVE_PROPS&&(b=g[g.length-2]));t.type===13?b?b.arguments[0]=d:t.props=d:b?b.arguments[0]=d:t.arguments[2]=d}function hasProp(t,c){let u=!1;if(t.key.type===4){let d=t.key.content;u=c.properties.some(t=>t.key.type===4&&t.key.content===d)}return u}function toValidAssetId(t,c){return`_${c}_${t.replace(/[^\w]/g,(c,u)=>c===`-`?`_`:t.charCodeAt(u).toString())}`}function hasScopeRef(t,c){if(!t||Object.keys(c).length===0)return!1;switch(t.type){case 1:for(let u=0;u<t.props.length;u++){let d=t.props[u];if(d.type===7&&(hasScopeRef(d.arg,c)||hasScopeRef(d.exp,c)))return!0}return t.children.some(t=>hasScopeRef(t,c));case 11:return hasScopeRef(t.source,c)?!0:t.children.some(t=>hasScopeRef(t,c));case 9:return t.branches.some(t=>hasScopeRef(t,c));case 10:return hasScopeRef(t.condition,c)?!0:t.children.some(t=>hasScopeRef(t,c));case 4:return!t.isStatic&&isSimpleIdentifier(t.content)&&!!c[t.content];case 8:return t.children.some(t=>isObject$1(t)&&hasScopeRef(t,c));case 5:case 12:return hasScopeRef(t.content,c);case 2:case 3:case 20:return!1;default:return process.env.NODE_ENV,!1}}function getMemoedVNodeCall(t){return t.type===14&&t.callee===WITH_MEMO?t.arguments[1].returns:t}function parseForExpression(t){let c=t.loc,u=t.content,d=u.match(forAliasRE);if(!d)return;let[,m,g]=d,createAliasExpression=(t,u,d=!1)=>{let m=c.start.offset+u;return createExp(t,!1,getLoc(m,m+t.length),0,d?1:0)},b={source:createAliasExpression(g.trim(),u.indexOf(g,m.length)),value:void 0,key:void 0,index:void 0,finalized:!1},S=m.trim().replace(stripParensRE,``).trim(),C=m.indexOf(S),w=S.match(forIteratorRE);if(w){S=S.replace(forIteratorRE,``).trim();let t=w[1].trim(),c;if(t&&(c=u.indexOf(t,C+S.length),b.key=createAliasExpression(t,c,!0)),w[2]){let d=w[2].trim();d&&(b.index=createAliasExpression(d,u.indexOf(d,b.key?c+t.length:C+S.length),!0))}}return S&&(b.value=createAliasExpression(S,C,!0)),b}function getSlice(t,c){return currentInput.slice(t,c)}function endOpenTag(t){tokenizer.inSFCRoot&&(currentOpenTag.innerLoc=getLoc(t+1,t+1)),addNode(currentOpenTag);let{tag:c,ns:u}=currentOpenTag;u===0&¤tOptions.isPreTag(c)&&inPre++,currentOptions.isVoidTag(c)?onCloseTag(currentOpenTag,t):(stack.unshift(currentOpenTag),(u===1||u===2)&&(tokenizer.inXML=!0)),currentOpenTag=null}function onText(t,c,u){{let c=stack[0]&&stack[0].tag;c!==`script`&&c!==`style`&&t.includes(`&`)&&(t=currentOptions.decodeEntities(t,!1))}let d=stack[0]||currentRoot,m=d.children[d.children.length-1];m&&m.type===2?(m.content+=t,setLocEnd(m.loc,u)):d.children.push({type:2,content:t,loc:getLoc(c,u)})}function onCloseTag(t,c,u=!1){u?setLocEnd(t.loc,backTrack(c,60)):setLocEnd(t.loc,lookAhead(c,62)+1),tokenizer.inSFCRoot&&(t.children.length?t.innerLoc.end=extend$2({},t.children[t.children.length-1].loc.end):t.innerLoc.end=extend$2({},t.innerLoc.start),t.innerLoc.source=getSlice(t.innerLoc.start.offset,t.innerLoc.end.offset));let{tag:d,ns:m,children:g}=t;if(inVPre||(d===`slot`?t.tagType=2:isFragmentTemplate(t)?t.tagType=3:isComponent(t)&&(t.tagType=1)),tokenizer.inRCDATA||(t.children=condenseWhitespace(g)),m===0&¤tOptions.isIgnoreNewlineTag(d)){let t=g[0];t&&t.type===2&&(t.content=t.content.replace(/^\r?\n/,``))}m===0&¤tOptions.isPreTag(d)&&inPre--,currentVPreBoundary===t&&(inVPre=tokenizer.inVPre=!1,currentVPreBoundary=null),tokenizer.inXML&&(stack[0]?stack[0].ns:currentOptions.ns)===0&&(tokenizer.inXML=!1);{let c=t.props;if(process.env.NODE_ENV!==`production`&&isCompatEnabled(`COMPILER_V_IF_V_FOR_PRECEDENCE`,currentOptions)){let u=!1,d=!1;for(let m=0;m<c.length;m++){let g=c[m];if(g.type===7&&(g.name===`if`?u=!0:g.name===`for`&&(d=!0)),u&&d){warnDeprecation(`COMPILER_V_IF_V_FOR_PRECEDENCE`,currentOptions,t.loc);break}}}if(!tokenizer.inSFCRoot&&isCompatEnabled(`COMPILER_NATIVE_TEMPLATE`,currentOptions)&&t.tag===`template`&&!isFragmentTemplate(t)){process.env.NODE_ENV!==`production`&&warnDeprecation(`COMPILER_NATIVE_TEMPLATE`,currentOptions,t.loc);let c=stack[0]||currentRoot,u=c.children.indexOf(t);c.children.splice(u,1,...t.children)}let u=c.find(t=>t.type===6&&t.name===`inline-template`);u&&checkCompatEnabled(`COMPILER_INLINE_TEMPLATE`,currentOptions,u.loc)&&t.children.length&&(u.value={type:2,content:getSlice(t.children[0].loc.start.offset,t.children[t.children.length-1].loc.end.offset),loc:u.loc})}}function lookAhead(t,c){let u=t;for(;currentInput.charCodeAt(u)!==c&&u<currentInput.length-1;)u++;return u}function backTrack(t,c){let u=t;for(;currentInput.charCodeAt(u)!==c&&u>=0;)u--;return u}function isFragmentTemplate({tag:t,props:c}){if(t===`template`){for(let t=0;t<c.length;t++)if(c[t].type===7&&specialTemplateDir.has(c[t].name))return!0}return!1}function isComponent({tag:t,props:c}){if(currentOptions.isCustomElement(t))return!1;if(t===`component`||isUpperCase(t.charCodeAt(0))||isCoreComponent(t)||currentOptions.isBuiltInComponent&¤tOptions.isBuiltInComponent(t)||currentOptions.isNativeTag&&!currentOptions.isNativeTag(t))return!0;for(let t=0;t<c.length;t++){let u=c[t];if(u.type===6){if(u.name===`is`&&u.value&&(u.value.content.startsWith(`vue:`)||checkCompatEnabled(`COMPILER_IS_ON_ELEMENT`,currentOptions,u.loc)))return!0}else if(u.name===`bind`&&isStaticArgOf(u.arg,`is`)&&checkCompatEnabled(`COMPILER_IS_ON_ELEMENT`,currentOptions,u.loc))return!0}return!1}function isUpperCase(t){return t>64&&t<91}function condenseWhitespace(t,c){let u=currentOptions.whitespace!==`preserve`,d=!1;for(let c=0;c<t.length;c++){let m=t[c];if(m.type===2)if(inPre)m.content=m.content.replace(windowsNewlineRE,`
|
|
461
464
|
`);else if(isAllWhitespace(m.content)){let g=t[c-1]&&t[c-1].type,b=t[c+1]&&t[c+1].type;!g||!b||u&&(g===3&&(b===3||b===1)||g===1&&(b===3||b===1&&hasNewlineChar(m.content)))?(d=!0,t[c]=null):m.content=` `}else u&&(m.content=condense(m.content))}return d?t.filter(Boolean):t}function isAllWhitespace(t){for(let c=0;c<t.length;c++)if(!isWhitespace(t.charCodeAt(c)))return!1;return!0}function hasNewlineChar(t){for(let c=0;c<t.length;c++){let u=t.charCodeAt(c);if(u===10||u===13)return!0}return!1}function condense(t){let c=``,u=!1;for(let d=0;d<t.length;d++)isWhitespace(t.charCodeAt(d))?u||(c+=` `,u=!0):(c+=t[d],u=!1);return c}function addNode(t){(stack[0]||currentRoot).children.push(t)}function getLoc(t,c){return{start:tokenizer.getPos(t),end:c==null?c:tokenizer.getPos(c),source:c==null?c:getSlice(t,c)}}function cloneLoc(t){return getLoc(t.start.offset,t.end.offset)}function setLocEnd(t,c){t.end=tokenizer.getPos(c),t.source=getSlice(t.start.offset,c)}function dirToAttr(t){let c={type:6,name:t.rawName,nameLoc:getLoc(t.loc.start.offset,t.loc.start.offset+t.rawName.length),value:void 0,loc:t.loc};if(t.exp){let u=t.exp.loc;u.end.offset<t.loc.end.offset&&(u.start.offset--,u.start.column--,u.end.offset++,u.end.column++),c.value={type:2,content:t.exp.content,loc:u}}return c}function createExp(t,c=!1,u,d=0,m=0){return createSimpleExpression(t,c,u,d)}function emitError(t,c,u){currentOptions.onError(createCompilerError(t,getLoc(c,c),void 0,u))}function reset(){tokenizer.reset(),currentOpenTag=null,currentProp=null,currentAttrValue=``,currentAttrStartIndex=-1,currentAttrEndIndex=-1,stack.length=0}function baseParse(t,c){if(reset(),currentInput=t,currentOptions=extend$2({},defaultParserOptions),c){let t;for(t in c)c[t]!=null&&(currentOptions[t]=c[t])}if(process.env.NODE_ENV!==`production`&&!currentOptions.decodeEntities)throw Error(`[@vue/compiler-core] decodeEntities option is required in browser builds.`);tokenizer.mode=currentOptions.parseMode===`html`?1:currentOptions.parseMode===`sfc`?2:0,tokenizer.inXML=currentOptions.ns===1||currentOptions.ns===2;let u=c&&c.delimiters;u&&(tokenizer.delimiterOpen=toCharCodes(u[0]),tokenizer.delimiterClose=toCharCodes(u[1]));let d=currentRoot=createRoot([],t);return tokenizer.parse(currentInput),d.loc=getLoc(0,t.length),d.children=condenseWhitespace(d.children),currentRoot=null,d}function cacheStatic(t,c){walk(t,void 0,c,isSingleElementRoot(t,t.children[0]))}function isSingleElementRoot(t,c){let{children:u}=t;return u.length===1&&c.type===1&&!isSlotOutlet(c)}function walk(t,c,u,d=!1,m=!1){let{children:g}=t,b=[];for(let c=0;c<g.length;c++){let S=g[c];if(S.type===1&&S.tagType===0){let t=d?0:getConstantType(S,u);if(t>0){if(t>=2){S.codegenNode.patchFlag=-1,b.push(S);continue}}else{let t=S.codegenNode;if(t.type===13){let c=t.patchFlag;if((c===void 0||c===512||c===1)&&getGeneratedPropsConstantType(S,u)>=2){let c=getNodeProps(S);c&&(t.props=u.hoist(c))}t.dynamicProps&&(t.dynamicProps=u.hoist(t.dynamicProps))}}}else if(S.type===12&&(d?0:getConstantType(S,u))>=2){b.push(S);continue}if(S.type===1){let c=S.tagType===1;c&&u.scopes.vSlot++,walk(S,t,u,!1,m),c&&u.scopes.vSlot--}else if(S.type===11)walk(S,t,u,S.children.length===1,!0);else if(S.type===9)for(let c=0;c<S.branches.length;c++)walk(S.branches[c],t,u,S.branches[c].children.length===1,m)}let S=!1;if(b.length===g.length&&t.type===1){if(t.tagType===0&&t.codegenNode&&t.codegenNode.type===13&&isArray$3(t.codegenNode.children))t.codegenNode.children=getCacheExpression(createArrayExpression(t.codegenNode.children)),S=!0;else if(t.tagType===1&&t.codegenNode&&t.codegenNode.type===13&&t.codegenNode.children&&!isArray$3(t.codegenNode.children)&&t.codegenNode.children.type===15){let c=getSlotNode(t.codegenNode,`default`);c&&(c.returns=getCacheExpression(createArrayExpression(c.returns)),S=!0)}else if(t.tagType===3&&c&&c.type===1&&c.tagType===1&&c.codegenNode&&c.codegenNode.type===13&&c.codegenNode.children&&!isArray$3(c.codegenNode.children)&&c.codegenNode.children.type===15){let u=findDir(t,`slot`,!0),d=u&&u.arg&&getSlotNode(c.codegenNode,u.arg);d&&(d.returns=getCacheExpression(createArrayExpression(d.returns)),S=!0)}}if(!S)for(let t of b)t.codegenNode=u.cache(t.codegenNode);function getCacheExpression(t){let c=u.cache(t);return m&&u.hmr&&(c.needArraySpread=!0),c}function getSlotNode(t,c){if(t.children&&!isArray$3(t.children)&&t.children.type===15){let u=t.children.properties.find(t=>t.key===c||t.key.content===c);return u&&u.value}}b.length&&u.transformHoist&&u.transformHoist(g,u,t)}function getConstantType(t,c){let{constantCache:u}=c;switch(t.type){case 1:if(t.tagType!==0)return 0;let d=u.get(t);if(d!==void 0)return d;let m=t.codegenNode;if(m.type!==13||m.isBlock&&t.tag!==`svg`&&t.tag!==`foreignObject`&&t.tag!==`math`)return 0;if(m.patchFlag===void 0){let d=3,g=getGeneratedPropsConstantType(t,c);if(g===0)return u.set(t,0),0;g<d&&(d=g);for(let m=0;m<t.children.length;m++){let g=getConstantType(t.children[m],c);if(g===0)return u.set(t,0),0;g<d&&(d=g)}if(d>1)for(let m=0;m<t.props.length;m++){let g=t.props[m];if(g.type===7&&g.name===`bind`&&g.exp){let m=getConstantType(g.exp,c);if(m===0)return u.set(t,0),0;m<d&&(d=m)}}if(m.isBlock){for(let c=0;c<t.props.length;c++)if(t.props[c].type===7)return u.set(t,0),0;c.removeHelper(OPEN_BLOCK),c.removeHelper(getVNodeBlockHelper(c.inSSR,m.isComponent)),m.isBlock=!1,c.helper(getVNodeHelper(c.inSSR,m.isComponent))}return u.set(t,d),d}else return u.set(t,0),0;case 2:case 3:return 3;case 9:case 11:case 10:return 0;case 5:case 12:return getConstantType(t.content,c);case 4:return t.constType;case 8:let g=3;for(let u=0;u<t.children.length;u++){let d=t.children[u];if(isString$1(d)||isSymbol(d))continue;let m=getConstantType(d,c);if(m===0)return 0;m<g&&(g=m)}return g;case 20:return 2;default:return process.env.NODE_ENV,0}}function getConstantTypeOfHelperCall(t,c){if(t.type===14&&!isString$1(t.callee)&&allowHoistedHelperSet.has(t.callee)){let u=t.arguments[0];if(u.type===4)return getConstantType(u,c);if(u.type===14)return getConstantTypeOfHelperCall(u,c)}return 0}function getGeneratedPropsConstantType(t,c){let u=3,d=getNodeProps(t);if(d&&d.type===15){let{properties:t}=d;for(let d=0;d<t.length;d++){let{key:m,value:g}=t[d],b=getConstantType(m,c);if(b===0)return b;b<u&&(u=b);let S;if(S=g.type===4?getConstantType(g,c):g.type===14?getConstantTypeOfHelperCall(g,c):0,S===0)return S;S<u&&(u=S)}}return u}function getNodeProps(t){let c=t.codegenNode;if(c.type===13)return c.props}function createTransformContext(t,{filename:c=``,prefixIdentifiers:u=!1,hoistStatic:d=!1,hmr:m=!1,cacheHandlers:g=!1,nodeTransforms:b=[],directiveTransforms:S={},transformHoist:C=null,isBuiltInComponent:w=NOOP,isCustomElement:T=NOOP,expressionPlugins:E=[],scopeId:D=null,slotted:O=!0,ssr:Or=!1,inSSR:kr=!1,ssrCssVars:Ar=``,bindingMetadata:jr=EMPTY_OBJ,inline:Mr=!1,isTS:Nr=!1,onError:Pr=defaultOnError,onWarn:Fr=defaultOnWarn,compatConfig:Ir}){let Lr=c.replace(/\?.*$/,``).match(/([^/\\]+)\.\w+$/),Rr={filename:c,selfName:Lr&&capitalize(camelize(Lr[1])),prefixIdentifiers:u,hoistStatic:d,hmr:m,cacheHandlers:g,nodeTransforms:b,directiveTransforms:S,transformHoist:C,isBuiltInComponent:w,isCustomElement:T,expressionPlugins:E,scopeId:D,slotted:O,ssr:Or,inSSR:kr,ssrCssVars:Ar,bindingMetadata:jr,inline:Mr,isTS:Nr,onError:Pr,onWarn:Fr,compatConfig:Ir,root:t,helpers:new Map,components:new Set,directives:new Set,hoists:[],imports:[],cached:[],constantCache:new WeakMap,temps:0,identifiers:Object.create(null),scopes:{vFor:0,vSlot:0,vPre:0,vOnce:0},parent:null,grandParent:null,currentNode:t,childIndex:0,inVOnce:!1,helper(t){let c=Rr.helpers.get(t)||0;return Rr.helpers.set(t,c+1),t},removeHelper(t){let c=Rr.helpers.get(t);if(c){let u=c-1;u?Rr.helpers.set(t,u):Rr.helpers.delete(t)}},helperString(t){return`_${helperNameMap[Rr.helper(t)]}`},replaceNode(t){if(process.env.NODE_ENV!==`production`){if(!Rr.currentNode)throw Error(`Node being replaced is already removed.`);if(!Rr.parent)throw Error(`Cannot replace root node.`)}Rr.parent.children[Rr.childIndex]=Rr.currentNode=t},removeNode(t){if(process.env.NODE_ENV!==`production`&&!Rr.parent)throw Error(`Cannot remove root node.`);let c=Rr.parent.children,u=t?c.indexOf(t):Rr.currentNode?Rr.childIndex:-1;if(process.env.NODE_ENV!==`production`&&u<0)throw Error(`node being removed is not a child of current parent`);!t||t===Rr.currentNode?(Rr.currentNode=null,Rr.onNodeRemoved()):Rr.childIndex>u&&(Rr.childIndex--,Rr.onNodeRemoved()),Rr.parent.children.splice(u,1)},onNodeRemoved:NOOP,addIdentifiers(t){},removeIdentifiers(t){},hoist(t){isString$1(t)&&(t=createSimpleExpression(t)),Rr.hoists.push(t);let c=createSimpleExpression(`_hoisted_${Rr.hoists.length}`,!1,t.loc,2);return c.hoisted=t,c},cache(t,c=!1,u=!1){let d=createCacheExpression(Rr.cached.length,t,c,u);return Rr.cached.push(d),d}};return Rr.filters=new Set,Rr}function transform(t,c){let u=createTransformContext(t,c);traverseNode(t,u),c.hoistStatic&&cacheStatic(t,u),c.ssr||createRootCodegen(t,u),t.helpers=new Set([...u.helpers.keys()]),t.components=[...u.components],t.directives=[...u.directives],t.imports=u.imports,t.hoists=u.hoists,t.temps=u.temps,t.cached=u.cached,t.transformed=!0,t.filters=[...u.filters]}function createRootCodegen(t,c){let{helper:u}=c,{children:d}=t;if(d.length===1){let u=d[0];if(isSingleElementRoot(t,u)&&u.codegenNode){let d=u.codegenNode;d.type===13&&convertToBlock(d,c),t.codegenNode=d}else t.codegenNode=u}else if(d.length>1){let m=64;process.env.NODE_ENV!==`production`&&d.filter(t=>t.type!==3).length===1&&(m|=2048),t.codegenNode=createVNodeCall(c,u(FRAGMENT),void 0,t.children,m,void 0,void 0,!0,void 0,!1)}}function traverseChildren(t,c){let u=0,nodeRemoved=()=>{u--};for(;u<t.children.length;u++){let d=t.children[u];isString$1(d)||(c.grandParent=c.parent,c.parent=t,c.childIndex=u,c.onNodeRemoved=nodeRemoved,traverseNode(d,c))}}function traverseNode(t,c){c.currentNode=t;let{nodeTransforms:u}=c,d=[];for(let m=0;m<u.length;m++){let g=u[m](t,c);if(g&&(isArray$3(g)?d.push(...g):d.push(g)),c.currentNode)t=c.currentNode;else return}switch(t.type){case 3:c.ssr||c.helper(CREATE_COMMENT);break;case 5:c.ssr||c.helper(TO_DISPLAY_STRING);break;case 9:for(let u=0;u<t.branches.length;u++)traverseNode(t.branches[u],c);break;case 10:case 11:case 1:case 0:traverseChildren(t,c);break}c.currentNode=t;let m=d.length;for(;m--;)d[m]()}function createStructuralDirectiveTransform(t,c){let u=isString$1(t)?c=>c===t:c=>t.test(c);return(t,d)=>{if(t.type===1){let{props:m}=t;if(t.tagType===3&&m.some(isVSlot))return;let g=[];for(let b=0;b<m.length;b++){let S=m[b];if(S.type===7&&u(S.name)){m.splice(b,1),b--;let u=c(t,S,d);u&&g.push(u)}}return g}}}function createCodegenContext(t,{mode:c=`function`,prefixIdentifiers:u=c===`module`,sourceMap:d=!1,filename:m=`template.vue.html`,scopeId:g=null,optimizeImports:b=!1,runtimeGlobalName:S=`Vue`,runtimeModuleName:C=`vue`,ssrRuntimeModuleName:w=`vue/server-renderer`,ssr:T=!1,isTS:E=!1,inSSR:D=!1}){let O={mode:c,prefixIdentifiers:u,sourceMap:d,filename:m,scopeId:g,optimizeImports:b,runtimeGlobalName:S,runtimeModuleName:C,ssrRuntimeModuleName:w,ssr:T,isTS:E,inSSR:D,source:t.source,code:``,column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(t){return`_${helperNameMap[t]}`},push(t,c=-2,u){O.code+=t},indent(){newline(++O.indentLevel)},deindent(t=!1){t?--O.indentLevel:newline(--O.indentLevel)},newline(){newline(O.indentLevel)}};function newline(t){O.push(`
|
|
462
465
|
`+` `.repeat(t),0)}return O}function generate(t,c={}){let u=createCodegenContext(t,c);c.onContextCreated&&c.onContextCreated(u);let{mode:d,push:m,prefixIdentifiers:g,indent:b,deindent:S,newline:C,scopeId:w,ssr:T}=u,E=Array.from(t.helpers),D=E.length>0,O=!g&&d!==`module`;if(genFunctionPreamble(t,u),m(`function ${T?`ssrRender`:`render`}(${(T?[`_ctx`,`_push`,`_parent`,`_attrs`]:[`_ctx`,`_cache`]).join(`, `)}) {`),b(),O&&(m(`with (_ctx) {`),b(),D&&(m(`const { ${E.map(aliasHelper).join(`, `)} } = _Vue
|
|
@@ -469,7 +472,7 @@ ${b}`:g)}let E=Function(`Vue`,T)(m);return E._rc=!0,g[S]=E}u.registerRuntimeComp
|
|
|
469
472
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function userAgent(t){if(typeof window<`u`&&window.navigator)return!!navigator.userAgent.match(t)}function on$1(t,c,u){t.addEventListener(c,u,!IE11OrLess&&captureMode)}function off(t,c,u){t.removeEventListener(c,u,!IE11OrLess&&captureMode)}function matches(t,c){if(c){if(c[0]===`>`&&(c=c.substring(1)),t)try{if(t.matches)return t.matches(c);if(t.msMatchesSelector)return t.msMatchesSelector(c);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(c)}catch{return!1}return!1}}function getParentOrHost(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function closest(t,c,u,d){if(t){u=u||document;do{if(c!=null&&(c[0]===`>`?t.parentNode===u&&matches(t,c):matches(t,c))||d&&t===u)return t;if(t===u)break}while(t=getParentOrHost(t))}return null}function toggleClass(t,c,u){t&&c&&(t.classList?t.classList[u?`add`:`remove`](c):t.className=((` `+t.className+` `).replace(R_SPACE,` `).replace(` `+c+` `,` `)+(u?` `+c:``)).replace(R_SPACE,` `))}function css(t,c,u){var d=t&&t.style;if(d){if(u===void 0)return document.defaultView&&document.defaultView.getComputedStyle?u=document.defaultView.getComputedStyle(t,``):t.currentStyle&&(u=t.currentStyle),c===void 0?u:u[c];!(c in d)&&c.indexOf(`webkit`)===-1&&(c=`-webkit-`+c),d[c]=u+(typeof u==`string`?``:`px`)}}function matrix(t,c){var u=``;if(typeof t==`string`)u=t;else do{var d=css(t,`transform`);d&&d!==`none`&&(u=d+` `+u)}while(!c&&(t=t.parentNode));var m=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return m&&new m(u)}function find(t,c,u){if(t){var d=t.getElementsByTagName(c),m=0,g=d.length;if(u)for(;m<g;m++)u(d[m],m);return d}return[]}function getWindowScrollingElement(){return document.scrollingElement||document.documentElement}function getRect(t,c,u,d,m){if(!(!t.getBoundingClientRect&&t!==window)){var g,b,S,C,w,T,E;if(t!==window&&t.parentNode&&t!==getWindowScrollingElement()?(g=t.getBoundingClientRect(),b=g.top,S=g.left,C=g.bottom,w=g.right,T=g.height,E=g.width):(b=0,S=0,C=window.innerHeight,w=window.innerWidth,T=window.innerHeight,E=window.innerWidth),(c||u)&&t!==window&&(m=m||t.parentNode,!IE11OrLess))do if(m&&m.getBoundingClientRect&&(css(m,`transform`)!==`none`||u&&css(m,`position`)!==`static`)){var D=m.getBoundingClientRect();b-=D.top+parseInt(css(m,`border-top-width`)),S-=D.left+parseInt(css(m,`border-left-width`)),C=b+g.height,w=S+g.width;break}while(m=m.parentNode);if(d&&t!==window){var O=matrix(m||t),Or=O&&O.a,kr=O&&O.d;O&&(b/=kr,S/=Or,E/=Or,T/=kr,C=b+T,w=S+E)}return{top:b,left:S,bottom:C,right:w,width:E,height:T}}}function isScrolledPast(t,c,u){for(var d=getParentAutoScrollElement(t,!0),m=getRect(t)[c];d;){var g=getRect(d)[u],b=void 0;if(b=u===`top`||u===`left`?m>=g:m<=g,!b)return d;if(d===getWindowScrollingElement())break;d=getParentAutoScrollElement(d,!1)}return!1}function getChild(t,c,u,d){for(var m=0,g=0,b=t.children;g<b.length;){if(b[g].style.display!==`none`&&b[g]!==Sortable.ghost&&(d||b[g]!==Sortable.dragged)&&closest(b[g],u.draggable,t,!1)){if(m===c)return b[g];m++}g++}return null}function lastChild(t,c){for(var u=t.lastElementChild;u&&(u===Sortable.ghost||css(u,`display`)===`none`||c&&!matches(u,c));)u=u.previousElementSibling;return u||null}function index(t,c){var u=0;if(!t||!t.parentNode)return-1;for(;t=t.previousElementSibling;)t.nodeName.toUpperCase()!==`TEMPLATE`&&t!==Sortable.clone&&(!c||matches(t,c))&&u++;return u}function getRelativeScrollOffset(t){var c=0,u=0,d=getWindowScrollingElement();if(t)do{var m=matrix(t),g=m.a,b=m.d;c+=t.scrollLeft*g,u+=t.scrollTop*b}while(t!==d&&(t=t.parentNode));return[c,u]}function indexOfObject(t,c){for(var u in t)if(t.hasOwnProperty(u)){for(var d in c)if(c.hasOwnProperty(d)&&c[d]===t[u][d])return Number(u)}return-1}function getParentAutoScrollElement(t,c){if(!t||!t.getBoundingClientRect)return getWindowScrollingElement();var u=t,d=!1;do if(u.clientWidth<u.scrollWidth||u.clientHeight<u.scrollHeight){var m=css(u);if(u.clientWidth<u.scrollWidth&&(m.overflowX==`auto`||m.overflowX==`scroll`)||u.clientHeight<u.scrollHeight&&(m.overflowY==`auto`||m.overflowY==`scroll`)){if(!u.getBoundingClientRect||u===document.body)return getWindowScrollingElement();if(d||c)return u;d=!0}}while(u=u.parentNode);return getWindowScrollingElement()}function extend(t,c){if(t&&c)for(var u in c)c.hasOwnProperty(u)&&(t[u]=c[u]);return t}function isRectEqual(t,c){return Math.round(t.top)===Math.round(c.top)&&Math.round(t.left)===Math.round(c.left)&&Math.round(t.height)===Math.round(c.height)&&Math.round(t.width)===Math.round(c.width)}function throttle(t,c){return function(){if(!_throttleTimeout){var u=arguments,d=this;u.length===1?t.call(d,u[0]):t.apply(d,u),_throttleTimeout=setTimeout(function(){_throttleTimeout=void 0},c)}}}function cancelThrottle(){clearTimeout(_throttleTimeout),_throttleTimeout=void 0}function scrollBy(t,c,u){t.scrollLeft+=c,t.scrollTop+=u}function clone(t){var c=window.Polymer,u=window.jQuery||window.Zepto;return c&&c.dom?c.dom(t).cloneNode(!0):u?u(t).clone(!0)[0]:t.cloneNode(!0)}function setRect(t,c){css(t,`position`,`absolute`),css(t,`top`,c.top),css(t,`left`,c.left),css(t,`width`,c.width),css(t,`height`,c.height)}function unsetRect(t){css(t,`position`,``),css(t,`top`,``),css(t,`left`,``),css(t,`width`,``),css(t,`height`,``)}function AnimationStateManager(){var t=[],c;return{captureAnimationState:function captureAnimationState(){t=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(c){if(!(css(c,`display`)===`none`||c===Sortable.ghost)){t.push({target:c,rect:getRect(c)});var u=_objectSpread2({},t[t.length-1].rect);if(c.thisAnimationDuration){var d=matrix(c,!0);d&&(u.top-=d.f,u.left-=d.e)}c.fromRect=u}})},addAnimationState:function addAnimationState(c){t.push(c)},removeAnimationState:function removeAnimationState(c){t.splice(indexOfObject(t,{target:c}),1)},animateAll:function animateAll(u){var d=this;if(!this.options.animation){clearTimeout(c),typeof u==`function`&&u();return}var m=!1,g=0;t.forEach(function(t){var c=0,u=t.target,b=u.fromRect,S=getRect(u),C=u.prevFromRect,w=u.prevToRect,T=t.rect,E=matrix(u,!0);E&&(S.top-=E.f,S.left-=E.e),u.toRect=S,u.thisAnimationDuration&&isRectEqual(C,S)&&!isRectEqual(b,S)&&(T.top-S.top)/(T.left-S.left)===(b.top-S.top)/(b.left-S.left)&&(c=calculateRealTime(T,C,w,d.options)),isRectEqual(S,b)||(u.prevFromRect=b,u.prevToRect=S,c||(c=d.options.animation),d.animate(u,T,S,c)),c&&(m=!0,g=Math.max(g,c),clearTimeout(u.animationResetTimer),u.animationResetTimer=setTimeout(function(){u.animationTime=0,u.prevFromRect=null,u.fromRect=null,u.prevToRect=null,u.thisAnimationDuration=null},c),u.thisAnimationDuration=c)}),clearTimeout(c),m?c=setTimeout(function(){typeof u==`function`&&u()},g):typeof u==`function`&&u(),t=[]},animate:function animate(t,c,u,d){if(d){css(t,`transition`,``),css(t,`transform`,``);var m=matrix(this.el),g=m&&m.a,b=m&&m.d,S=(c.left-u.left)/(g||1),C=(c.top-u.top)/(b||1);t.animatingX=!!S,t.animatingY=!!C,css(t,`transform`,`translate3d(`+S+`px,`+C+`px,0)`),this.forRepaintDummy=repaint(t),css(t,`transition`,`transform `+d+`ms`+(this.options.easing?` `+this.options.easing:``)),css(t,`transform`,`translate3d(0,0,0)`),typeof t.animated==`number`&&clearTimeout(t.animated),t.animated=setTimeout(function(){css(t,`transition`,``),css(t,`transform`,``),t.animated=!1,t.animatingX=!1,t.animatingY=!1},d)}}}}function repaint(t){return t.offsetWidth}function calculateRealTime(t,c,u,d){return Math.sqrt((c.top-t.top)**2+(c.left-t.left)**2)/Math.sqrt((c.top-u.top)**2+(c.left-u.left)**2)*d.animation}function dispatchEvent(t){var c=t.sortable,u=t.rootEl,d=t.name,m=t.targetEl,g=t.cloneEl,b=t.toEl,S=t.fromEl,C=t.oldIndex,w=t.newIndex,T=t.oldDraggableIndex,E=t.newDraggableIndex,D=t.originalEvent,O=t.putSortable,Or=t.extraEventProperties;if(c=c||u&&u[expando],c){var kr,Ar=c.options,jr=`on`+d.charAt(0).toUpperCase()+d.substr(1);window.CustomEvent&&!IE11OrLess&&!Edge?kr=new CustomEvent(d,{bubbles:!0,cancelable:!0}):(kr=document.createEvent(`Event`),kr.initEvent(d,!0,!0)),kr.to=b||u,kr.from=S||u,kr.item=m||u,kr.clone=g,kr.oldIndex=C,kr.newIndex=w,kr.oldDraggableIndex=T,kr.newDraggableIndex=E,kr.originalEvent=D,kr.pullMode=O?O.lastPutMode:void 0;var Mr=_objectSpread2(_objectSpread2({},Or),PluginManager.getEventProperties(d,c));for(var Nr in Mr)kr[Nr]=Mr[Nr];u&&u.dispatchEvent(kr),Ar[jr]&&Ar[jr].call(c,kr)}}function _dispatchEvent(t){dispatchEvent(_objectSpread2({putSortable,cloneEl,targetEl:dragEl,rootEl,oldIndex,oldDraggableIndex,newIndex,newDraggableIndex},t))}function Sortable(t,c){if(!(t&&t.nodeType&&t.nodeType===1))throw`Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(t)}`;this.el=t,this.options=c=_extends({},c),t[expando]=this;var u={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?`>li`:`>*`,swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function direction(){return _detectDirection(t,this.options)},ghostClass:`sortable-ghost`,chosenClass:`sortable-chosen`,dragClass:`sortable-drag`,ignore:`a, img`,filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function setData(t,c){t.setData(`Text`,c.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:`data-id`,delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:`sortable-fallback`,fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:Sortable.supportPointer!==!1&&`PointerEvent`in window&&!Safari,emptyInsertThreshold:5};for(var d in PluginManager.initializePlugins(this,t,u),u)!(d in c)&&(c[d]=u[d]);for(var m in _prepareGroup(c),this)m.charAt(0)===`_`&&typeof this[m]==`function`&&(this[m]=this[m].bind(this));this.nativeDraggable=c.forceFallback?!1:supportDraggable,this.nativeDraggable&&(this.options.touchStartThreshold=1),c.supportPointer?on$1(t,`pointerdown`,this._onTapStart):(on$1(t,`mousedown`,this._onTapStart),on$1(t,`touchstart`,this._onTapStart)),this.nativeDraggable&&(on$1(t,`dragover`,this),on$1(t,`dragenter`,this)),sortables.push(this.el),c.store&&c.store.get&&this.sort(c.store.get(this)||[]),_extends(this,AnimationStateManager())}function _globalDragOver(t){t.dataTransfer&&(t.dataTransfer.dropEffect=`move`),t.cancelable&&t.preventDefault()}function _onMove(t,c,u,d,m,g,b,S){var C,w=t[expando],T=w.options.onMove,E;return window.CustomEvent&&!IE11OrLess&&!Edge?C=new CustomEvent(`move`,{bubbles:!0,cancelable:!0}):(C=document.createEvent(`Event`),C.initEvent(`move`,!0,!0)),C.to=c,C.from=t,C.dragged=u,C.draggedRect=d,C.related=m||c,C.relatedRect=g||getRect(c),C.willInsertAfter=S,C.originalEvent=b,t.dispatchEvent(C),T&&(E=T.call(w,C,b)),E}function _disableDraggable(t){t.draggable=!1}function _unsilent(){_silent=!1}function _ghostIsFirst(t,c,u){var d=getRect(getChild(u.el,0,u.options,!0)),m=10;return c?t.clientX<d.left-m||t.clientY<d.top&&t.clientX<d.right:t.clientY<d.top-m||t.clientY<d.bottom&&t.clientX<d.left}function _ghostIsLast(t,c,u){var d=getRect(lastChild(u.el,u.options.draggable)),m=10;return c?t.clientX>d.right+m||t.clientX<=d.right&&t.clientY>d.bottom&&t.clientX>=d.left:t.clientX>d.right&&t.clientY>d.top||t.clientX<=d.right&&t.clientY>d.bottom+m}function _getSwapDirection(t,c,u,d,m,g,b,S){var C=d?t.clientY:t.clientX,w=d?u.height:u.width,T=d?u.top:u.left,E=d?u.bottom:u.right,D=!1;if(!b){if(S&&targetMoveDistance<w*m){if(!pastFirstInvertThresh&&(lastDirection===1?C>T+w*g/2:C<E-w*g/2)&&(pastFirstInvertThresh=!0),pastFirstInvertThresh)D=!0;else if(lastDirection===1?C<T+targetMoveDistance:C>E-targetMoveDistance)return-lastDirection}else if(C>T+w*(1-m)/2&&C<E-w*(1-m)/2)return _getInsertDirection(c)}return D=D||b,D&&(C<T+w*g/2||C>E-w*g/2)?C>T+w/2?1:-1:0}function _getInsertDirection(t){return index(dragEl)<index(t)?1:-1}function _generateId(t){for(var c=t.tagName+t.className+t.src+t.href+t.textContent,u=c.length,d=0;u--;)d+=c.charCodeAt(u);return d.toString(36)}function _saveInputCheckedState(t){savedInputChecked.length=0;for(var c=t.getElementsByTagName(`input`),u=c.length;u--;){var d=c[u];d.checked&&savedInputChecked.push(d)}}function _nextTick(t){return setTimeout(t,0)}function _cancelNextTick(t){return clearTimeout(t)}function AutoScrollPlugin(){function AutoScroll(){for(var t in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)t.charAt(0)===`_`&&typeof this[t]==`function`&&(this[t]=this[t].bind(this))}return AutoScroll.prototype={dragStarted:function dragStarted(t){var c=t.originalEvent;this.sortable.nativeDraggable?on$1(document,`dragover`,this._handleAutoScroll):this.options.supportPointer?on$1(document,`pointermove`,this._handleFallbackAutoScroll):c.touches?on$1(document,`touchmove`,this._handleFallbackAutoScroll):on$1(document,`mousemove`,this._handleFallbackAutoScroll)},dragOverCompleted:function dragOverCompleted(t){var c=t.originalEvent;!this.options.dragOverBubble&&!c.rootEl&&this._handleAutoScroll(c)},drop:function drop(){this.sortable.nativeDraggable?off(document,`dragover`,this._handleAutoScroll):(off(document,`pointermove`,this._handleFallbackAutoScroll),off(document,`touchmove`,this._handleFallbackAutoScroll),off(document,`mousemove`,this._handleFallbackAutoScroll)),clearPointerElemChangedInterval(),clearAutoScrolls(),cancelThrottle()},nulling:function nulling(){touchEvt$1=scrollRootEl=scrollEl=scrolling=pointerElemChangedInterval=lastAutoScrollX=lastAutoScrollY=null,autoScrolls.length=0},_handleFallbackAutoScroll:function _handleFallbackAutoScroll(t){this._handleAutoScroll(t,!0)},_handleAutoScroll:function _handleAutoScroll(t,c){var u=this,d=(t.touches?t.touches[0]:t).clientX,m=(t.touches?t.touches[0]:t).clientY,g=document.elementFromPoint(d,m);if(touchEvt$1=t,c||this.options.forceAutoScrollFallback||Edge||IE11OrLess||Safari){autoScroll(t,this.options,g,c);var b=getParentAutoScrollElement(g,!0);scrolling&&(!pointerElemChangedInterval||d!==lastAutoScrollX||m!==lastAutoScrollY)&&(pointerElemChangedInterval&&clearPointerElemChangedInterval(),pointerElemChangedInterval=setInterval(function(){var g=getParentAutoScrollElement(document.elementFromPoint(d,m),!0);g!==b&&(b=g,clearAutoScrolls()),autoScroll(t,u.options,g,c)},10),lastAutoScrollX=d,lastAutoScrollY=m)}else{if(!this.options.bubbleScroll||getParentAutoScrollElement(g,!0)===getWindowScrollingElement()){clearAutoScrolls();return}autoScroll(t,this.options,getParentAutoScrollElement(g,!1),!1)}}},_extends(AutoScroll,{pluginName:`scroll`,initializeByDefault:!0})}function clearAutoScrolls(){autoScrolls.forEach(function(t){clearInterval(t.pid)}),autoScrolls=[]}function clearPointerElemChangedInterval(){clearInterval(pointerElemChangedInterval)}function Revert(){}function Remove(){}function SwapPlugin(){function Swap(){this.defaults={swapClass:`sortable-swap-highlight`}}return Swap.prototype={dragStart:function dragStart(t){lastSwapEl=t.dragEl},dragOverValid:function dragOverValid(t){var c=t.completed,u=t.target,d=t.onMove,m=t.activeSortable,g=t.changed,b=t.cancel;if(m.options.swap){var S=this.sortable.el,C=this.options;if(u&&u!==S){var w=lastSwapEl;d(u)===!1?lastSwapEl=null:(toggleClass(u,C.swapClass,!0),lastSwapEl=u),w&&w!==lastSwapEl&&toggleClass(w,C.swapClass,!1)}g(),c(!0),b()}},drop:function drop(t){var c=t.activeSortable,u=t.putSortable,d=t.dragEl,m=u||this.sortable,g=this.options;lastSwapEl&&toggleClass(lastSwapEl,g.swapClass,!1),lastSwapEl&&(g.swap||u&&u.options.swap)&&d!==lastSwapEl&&(m.captureAnimationState(),m!==c&&c.captureAnimationState(),swapNodes(d,lastSwapEl),m.animateAll(),m!==c&&c.animateAll())},nulling:function nulling(){lastSwapEl=null}},_extends(Swap,{pluginName:`swap`,eventProperties:function eventProperties(){return{swapItem:lastSwapEl}}})}function swapNodes(t,c){var u=t.parentNode,d=c.parentNode,m,g;!u||!d||u.isEqualNode(c)||d.isEqualNode(t)||(m=index(t),g=index(c),u.isEqualNode(d)&&m<g&&g++,u.insertBefore(c,u.children[m]),d.insertBefore(t,d.children[g]))}function MultiDragPlugin(){function MultiDrag(t){for(var c in this)c.charAt(0)===`_`&&typeof this[c]==`function`&&(this[c]=this[c].bind(this));t.options.supportPointer?on$1(document,`pointerup`,this._deselectMultiDrag):(on$1(document,`mouseup`,this._deselectMultiDrag),on$1(document,`touchend`,this._deselectMultiDrag)),on$1(document,`keydown`,this._checkKeyDown),on$1(document,`keyup`,this._checkKeyUp),this.defaults={selectedClass:`sortable-selected`,multiDragKey:null,setData:function setData(c,u){var d=``;multiDragElements.length&&multiDragSortable===t?multiDragElements.forEach(function(t,c){d+=(c?`, `:``)+t.textContent}):d=u.textContent,c.setData(`Text`,d)}}}return MultiDrag.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function delayStartGlobal(t){dragEl$1=t.dragEl},delayEnded:function delayEnded(){this.isMultiDrag=~multiDragElements.indexOf(dragEl$1)},setupClone:function setupClone(t){var c=t.sortable,u=t.cancel;if(this.isMultiDrag){for(var d=0;d<multiDragElements.length;d++)multiDragClones.push(clone(multiDragElements[d])),multiDragClones[d].sortableIndex=multiDragElements[d].sortableIndex,multiDragClones[d].draggable=!1,multiDragClones[d].style[`will-change`]=``,toggleClass(multiDragClones[d],this.options.selectedClass,!1),multiDragElements[d]===dragEl$1&&toggleClass(multiDragClones[d],this.options.chosenClass,!1);c._hideClone(),u()}},clone:function clone(t){var c=t.sortable,u=t.rootEl,d=t.dispatchSortableEvent,m=t.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||multiDragElements.length&&multiDragSortable===c&&(insertMultiDragClones(!0,u),d(`clone`),m()))},showClone:function showClone(t){var c=t.cloneNowShown,u=t.rootEl,d=t.cancel;this.isMultiDrag&&(insertMultiDragClones(!1,u),multiDragClones.forEach(function(t){css(t,`display`,``)}),c(),clonesHidden=!1,d())},hideClone:function hideClone(t){var c=this;t.sortable;var u=t.cloneNowHidden,d=t.cancel;this.isMultiDrag&&(multiDragClones.forEach(function(t){css(t,`display`,`none`),c.options.removeCloneOnHide&&t.parentNode&&t.parentNode.removeChild(t)}),u(),clonesHidden=!0,d())},dragStartGlobal:function dragStartGlobal(t){t.sortable,!this.isMultiDrag&&multiDragSortable&&multiDragSortable.multiDrag._deselectMultiDrag(),multiDragElements.forEach(function(t){t.sortableIndex=index(t)}),multiDragElements=multiDragElements.sort(function(t,c){return t.sortableIndex-c.sortableIndex}),dragStarted=!0},dragStarted:function dragStarted(t){var c=this,u=t.sortable;if(this.isMultiDrag){if(this.options.sort&&(u.captureAnimationState(),this.options.animation)){multiDragElements.forEach(function(t){t!==dragEl$1&&css(t,`position`,`absolute`)});var d=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(function(t){t!==dragEl$1&&setRect(t,d)}),folding=!0,initialFolding=!0}u.animateAll(function(){folding=!1,initialFolding=!1,c.options.animation&&multiDragElements.forEach(function(t){unsetRect(t)}),c.options.sort&&removeMultiDragElements()})}},dragOver:function dragOver(t){var c=t.target,u=t.completed,d=t.cancel;folding&&~multiDragElements.indexOf(c)&&(u(!1),d())},revert:function revert(t){var c=t.fromSortable,u=t.rootEl,d=t.sortable,m=t.dragRect;multiDragElements.length>1&&(multiDragElements.forEach(function(t){d.addAnimationState({target:t,rect:folding?getRect(t):m}),unsetRect(t),t.fromRect=m,c.removeAnimationState(t)}),folding=!1,insertMultiDragElements(!this.options.removeCloneOnHide,u))},dragOverCompleted:function dragOverCompleted(t){var c=t.sortable,u=t.isOwner,d=t.insertion,m=t.activeSortable,g=t.parentEl,b=t.putSortable,S=this.options;if(d){if(u&&m._hideClone(),initialFolding=!1,S.animation&&multiDragElements.length>1&&(folding||!u&&!m.options.sort&&!b)){var C=getRect(dragEl$1,!1,!0,!0);multiDragElements.forEach(function(t){t!==dragEl$1&&(setRect(t,C),g.appendChild(t))}),folding=!0}if(!u)if(folding||removeMultiDragElements(),multiDragElements.length>1){var w=clonesHidden;m._showClone(c),m.options.animation&&!clonesHidden&&w&&multiDragClones.forEach(function(t){m.addAnimationState({target:t,rect:clonesFromRect}),t.fromRect=clonesFromRect,t.thisAnimationDuration=null})}else m._showClone(c)}},dragOverAnimationCapture:function dragOverAnimationCapture(t){var c=t.dragRect,u=t.isOwner,d=t.activeSortable;if(multiDragElements.forEach(function(t){t.thisAnimationDuration=null}),d.options.animation&&!u&&d.multiDrag.isMultiDrag){clonesFromRect=_extends({},c);var m=matrix(dragEl$1,!0);clonesFromRect.top-=m.f,clonesFromRect.left-=m.e}},dragOverAnimationComplete:function dragOverAnimationComplete(){folding&&(folding=!1,removeMultiDragElements())},drop:function drop(t){var c=t.originalEvent,u=t.rootEl,d=t.parentEl,m=t.sortable,g=t.dispatchSortableEvent,b=t.oldIndex,S=t.putSortable,C=S||this.sortable;if(c){var w=this.options,T=d.children;if(!dragStarted)if(w.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),toggleClass(dragEl$1,w.selectedClass,!~multiDragElements.indexOf(dragEl$1)),~multiDragElements.indexOf(dragEl$1))multiDragElements.splice(multiDragElements.indexOf(dragEl$1),1),lastMultiDragSelect=null,dispatchEvent({sortable:m,rootEl:u,name:`deselect`,targetEl:dragEl$1,originalEvt:c});else{if(multiDragElements.push(dragEl$1),dispatchEvent({sortable:m,rootEl:u,name:`select`,targetEl:dragEl$1,originalEvt:c}),c.shiftKey&&lastMultiDragSelect&&m.el.contains(lastMultiDragSelect)){var E=index(lastMultiDragSelect),D=index(dragEl$1);if(~E&&~D&&E!==D){var O,Or;for(D>E?(Or=E,O=D):(Or=D,O=E+1);Or<O;Or++)~multiDragElements.indexOf(T[Or])||(toggleClass(T[Or],w.selectedClass,!0),multiDragElements.push(T[Or]),dispatchEvent({sortable:m,rootEl:u,name:`select`,targetEl:T[Or],originalEvt:c}))}}else lastMultiDragSelect=dragEl$1;multiDragSortable=C}if(dragStarted&&this.isMultiDrag){if(folding=!1,(d[expando].options.sort||d!==u)&&multiDragElements.length>1){var kr=getRect(dragEl$1),Ar=index(dragEl$1,`:not(.`+this.options.selectedClass+`)`);if(!initialFolding&&w.animation&&(dragEl$1.thisAnimationDuration=null),C.captureAnimationState(),!initialFolding&&(w.animation&&(dragEl$1.fromRect=kr,multiDragElements.forEach(function(t){if(t.thisAnimationDuration=null,t!==dragEl$1){var c=folding?getRect(t):kr;t.fromRect=c,C.addAnimationState({target:t,rect:c})}})),removeMultiDragElements(),multiDragElements.forEach(function(t){T[Ar]?d.insertBefore(t,T[Ar]):d.appendChild(t),Ar++}),b===index(dragEl$1))){var jr=!1;multiDragElements.forEach(function(t){if(t.sortableIndex!==index(t)){jr=!0;return}}),jr&&g(`update`)}multiDragElements.forEach(function(t){unsetRect(t)}),C.animateAll()}multiDragSortable=C}(u===d||S&&S.lastPutMode!==`clone`)&&multiDragClones.forEach(function(t){t.parentNode&&t.parentNode.removeChild(t)})}},nullingGlobal:function nullingGlobal(){this.isMultiDrag=dragStarted=!1,multiDragClones.length=0},destroyGlobal:function destroyGlobal(){this._deselectMultiDrag(),off(document,`pointerup`,this._deselectMultiDrag),off(document,`mouseup`,this._deselectMultiDrag),off(document,`touchend`,this._deselectMultiDrag),off(document,`keydown`,this._checkKeyDown),off(document,`keyup`,this._checkKeyUp)},_deselectMultiDrag:function _deselectMultiDrag(t){if(!(dragStarted!==void 0&&dragStarted)&&multiDragSortable===this.sortable&&!(t&&closest(t.target,this.options.draggable,this.sortable.el,!1))&&!(t&&t.button!==0))for(;multiDragElements.length;){var c=multiDragElements[0];toggleClass(c,this.options.selectedClass,!1),multiDragElements.shift(),dispatchEvent({sortable:this.sortable,rootEl:this.sortable.el,name:`deselect`,targetEl:c,originalEvt:t})}},_checkKeyDown:function _checkKeyDown(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function _checkKeyUp(t){t.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},_extends(MultiDrag,{pluginName:`multiDrag`,utils:{select:function select(t){var c=t.parentNode[expando];!c||!c.options.multiDrag||~multiDragElements.indexOf(t)||(multiDragSortable&&multiDragSortable!==c&&(multiDragSortable.multiDrag._deselectMultiDrag(),multiDragSortable=c),toggleClass(t,c.options.selectedClass,!0),multiDragElements.push(t))},deselect:function deselect(t){var c=t.parentNode[expando],u=multiDragElements.indexOf(t);!c||!c.options.multiDrag||!~u||(toggleClass(t,c.options.selectedClass,!1),multiDragElements.splice(u,1))}},eventProperties:function eventProperties(){var t=this,c=[],u=[];return multiDragElements.forEach(function(d){c.push({multiDragElement:d,index:d.sortableIndex});var m=folding&&d!==dragEl$1?-1:folding?index(d,`:not(.`+t.options.selectedClass+`)`):index(d);u.push({multiDragElement:d,index:m})}),{items:_toConsumableArray(multiDragElements),clones:[].concat(multiDragClones),oldIndicies:c,newIndicies:u}},optionListeners:{multiDragKey:function multiDragKey(t){return t=t.toLowerCase(),t===`ctrl`?t=`Control`:t.length>1&&(t=t.charAt(0).toUpperCase()+t.substr(1)),t}}})}function insertMultiDragElements(t,c){multiDragElements.forEach(function(u,d){var m=c.children[u.sortableIndex+(t?Number(d):0)];m?c.insertBefore(u,m):c.appendChild(u)})}function insertMultiDragClones(t,c){multiDragClones.forEach(function(u,d){var m=c.children[u.sortableIndex+(t?Number(d):0)];m?c.insertBefore(u,m):c.appendChild(u)})}function removeMultiDragElements(){multiDragElements.forEach(function(t){t!==dragEl$1&&t.parentNode&&t.parentNode.removeChild(t)})}var version,IE11OrLess,Edge,FireFox,Safari,IOS,ChromeForAndroid,captureMode,R_SPACE,_throttleTimeout,expando,plugins,defaults,PluginManager,_excluded,pluginEvent,dragEl,parentEl,ghostEl,rootEl,nextEl,lastDownEl,cloneEl,cloneHidden,oldIndex,newIndex,oldDraggableIndex,newDraggableIndex,activeGroup,putSortable,awaitingDragStarted,ignoreNextClick,sortables,tapEvt,touchEvt,lastDx,lastDy,tapDistanceLeft,tapDistanceTop,moved,lastTarget,lastDirection,pastFirstInvertThresh,isCircumstantialInvert,targetMoveDistance,ghostRelativeParent,ghostRelativeParentInitialScroll,_silent,savedInputChecked,documentExists,PositionGhostAbsolutely,CSSFloatProperty,supportDraggable,supportCssPointerEvents,_detectDirection,_dragElInRowColumn,_detectNearestEmptySortable,_prepareGroup,_hideGhostForTarget,_unhideGhostForTarget,nearestEmptyInsertDetectEvent,_checkOutsideTargetEl,autoScrolls,scrollEl,scrollRootEl,scrolling,lastAutoScrollX,lastAutoScrollY,touchEvt$1,pointerElemChangedInterval,autoScroll,drop,lastSwapEl,multiDragElements,multiDragClones,lastMultiDragSelect,multiDragSortable,initialFolding,folding,dragStarted,dragEl$1,clonesFromRect,clonesHidden,init_sortable_esm=__esmMin((()=>{version=`1.14.0`,IE11OrLess=userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),Edge=userAgent(/Edge/i),FireFox=userAgent(/firefox/i),Safari=userAgent(/safari/i)&&!userAgent(/chrome/i)&&!userAgent(/android/i),IOS=userAgent(/iP(ad|od|hone)/i),ChromeForAndroid=userAgent(/chrome/i)&&userAgent(/android/i),captureMode={capture:!1,passive:!1},__name$2(on$1,`on`),R_SPACE=/\s+/g,expando=`Sortable`+new Date().getTime(),plugins=[],defaults={initializeByDefault:!0},PluginManager={mount:function mount(t){for(var c in defaults)defaults.hasOwnProperty(c)&&!(c in t)&&(t[c]=defaults[c]);plugins.forEach(function(c){if(c.pluginName===t.pluginName)throw`Sortable: Cannot mount plugin ${t.pluginName} more than once`}),plugins.push(t)},pluginEvent:function pluginEvent(t,c,u){var d=this;this.eventCanceled=!1,u.cancel=function(){d.eventCanceled=!0};var m=t+`Global`;plugins.forEach(function(d){c[d.pluginName]&&(c[d.pluginName][m]&&c[d.pluginName][m](_objectSpread2({sortable:c},u)),c.options[d.pluginName]&&c[d.pluginName][t]&&c[d.pluginName][t](_objectSpread2({sortable:c},u)))})},initializePlugins:function initializePlugins(t,c,u,d){for(var m in plugins.forEach(function(d){var m=d.pluginName;if(!(!t.options[m]&&!d.initializeByDefault)){var g=new d(t,c,t.options);g.sortable=t,g.options=t.options,t[m]=g,_extends(u,g.defaults)}}),t.options)if(t.options.hasOwnProperty(m)){var g=this.modifyOption(t,m,t.options[m]);g!==void 0&&(t.options[m]=g)}},getEventProperties:function getEventProperties(t,c){var u={};return plugins.forEach(function(d){typeof d.eventProperties==`function`&&_extends(u,d.eventProperties.call(c[d.pluginName],t))}),u},modifyOption:function modifyOption(t,c,u){var d;return plugins.forEach(function(m){t[m.pluginName]&&m.optionListeners&&typeof m.optionListeners[c]==`function`&&(d=m.optionListeners[c].call(t[m.pluginName],u))}),d}},_excluded=[`evt`],pluginEvent=function pluginEvent(t,c){var u=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},d=u.evt,m=_objectWithoutProperties(u,_excluded);PluginManager.pluginEvent.bind(Sortable)(t,c,_objectSpread2({dragEl,parentEl,ghostEl,rootEl,nextEl,lastDownEl,cloneEl,cloneHidden,dragStarted:moved,putSortable,activeSortable:Sortable.active,originalEvent:d,oldIndex,oldDraggableIndex,newIndex,newDraggableIndex,hideGhostForTarget:_hideGhostForTarget,unhideGhostForTarget:_unhideGhostForTarget,cloneNowHidden:function cloneNowHidden(){cloneHidden=!0},cloneNowShown:function cloneNowShown(){cloneHidden=!1},dispatchSortableEvent:function dispatchSortableEvent(t){_dispatchEvent({sortable:c,name:t,originalEvent:d})}},m))},awaitingDragStarted=!1,ignoreNextClick=!1,sortables=[],pastFirstInvertThresh=!1,isCircumstantialInvert=!1,ghostRelativeParentInitialScroll=[],_silent=!1,savedInputChecked=[],documentExists=typeof document<`u`,PositionGhostAbsolutely=IOS,CSSFloatProperty=Edge||IE11OrLess?`cssFloat`:`float`,supportDraggable=documentExists&&!ChromeForAndroid&&!IOS&&`draggable`in document.createElement(`div`),supportCssPointerEvents=function(){if(documentExists){if(IE11OrLess)return!1;var t=document.createElement(`x`);return t.style.cssText=`pointer-events:auto`,t.style.pointerEvents===`auto`}}(),_detectDirection=function _detectDirection(t,c){var u=css(t),d=parseInt(u.width)-parseInt(u.paddingLeft)-parseInt(u.paddingRight)-parseInt(u.borderLeftWidth)-parseInt(u.borderRightWidth),m=getChild(t,0,c),g=getChild(t,1,c),b=m&&css(m),S=g&&css(g),C=b&&parseInt(b.marginLeft)+parseInt(b.marginRight)+getRect(m).width,w=S&&parseInt(S.marginLeft)+parseInt(S.marginRight)+getRect(g).width;if(u.display===`flex`)return u.flexDirection===`column`||u.flexDirection===`column-reverse`?`vertical`:`horizontal`;if(u.display===`grid`)return u.gridTemplateColumns.split(` `).length<=1?`vertical`:`horizontal`;if(m&&b.float&&b.float!==`none`){var T=b.float===`left`?`left`:`right`;return g&&(S.clear===`both`||S.clear===T)?`vertical`:`horizontal`}return m&&(b.display===`block`||b.display===`flex`||b.display===`table`||b.display===`grid`||C>=d&&u[CSSFloatProperty]===`none`||g&&u[CSSFloatProperty]===`none`&&C+w>d)?`vertical`:`horizontal`},_dragElInRowColumn=function _dragElInRowColumn(t,c,u){var d=u?t.left:t.top,m=u?t.right:t.bottom,g=u?t.width:t.height,b=u?c.left:c.top,S=u?c.right:c.bottom,C=u?c.width:c.height;return d===b||m===S||d+g/2===b+C/2},_detectNearestEmptySortable=function _detectNearestEmptySortable(t,c){var u;return sortables.some(function(d){var m=d[expando].options.emptyInsertThreshold;if(!(!m||lastChild(d))){var g=getRect(d),b=t>=g.left-m&&t<=g.right+m,S=c>=g.top-m&&c<=g.bottom+m;if(b&&S)return u=d}}),u},_prepareGroup=function _prepareGroup(t){function toFn(t,c){return function(u,d,m,g){var b=u.options.group.name&&d.options.group.name&&u.options.group.name===d.options.group.name;if(t==null&&(c||b))return!0;if(t==null||t===!1)return!1;if(c&&t===`clone`)return t;if(typeof t==`function`)return toFn(t(u,d,m,g),c)(u,d,m,g);var S=(c?u:d).options.group.name;return t===!0||typeof t==`string`&&t===S||t.join&&t.indexOf(S)>-1}}var c={},u=t.group;(!u||_typeof(u)!=`object`)&&(u={name:u}),c.name=u.name,c.checkPull=toFn(u.pull,!0),c.checkPut=toFn(u.put),c.revertClone=u.revertClone,t.group=c},_hideGhostForTarget=function _hideGhostForTarget(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,`display`,`none`)},_unhideGhostForTarget=function _unhideGhostForTarget(){!supportCssPointerEvents&&ghostEl&&css(ghostEl,`display`,``)},documentExists&&document.addEventListener(`click`,function(t){if(ignoreNextClick)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ignoreNextClick=!1,!1},!0),nearestEmptyInsertDetectEvent=function nearestEmptyInsertDetectEvent(t){if(dragEl){t=t.touches?t.touches[0]:t;var c=_detectNearestEmptySortable(t.clientX,t.clientY);if(c){var u={};for(var d in t)t.hasOwnProperty(d)&&(u[d]=t[d]);u.target=u.rootEl=c,u.preventDefault=void 0,u.stopPropagation=void 0,c[expando]._onDragOver(u)}}},_checkOutsideTargetEl=function _checkOutsideTargetEl(t){dragEl&&dragEl.parentNode[expando]._isOutsideThisEl(t.target)},Sortable.prototype={constructor:Sortable,_isOutsideThisEl:function _isOutsideThisEl(t){!this.el.contains(t)&&t!==this.el&&(lastTarget=null)},_getDirection:function _getDirection(t,c){return typeof this.options.direction==`function`?this.options.direction.call(this,t,c,dragEl):this.options.direction},_onTapStart:function _onTapStart(t){if(t.cancelable){var c=this,u=this.el,d=this.options,m=d.preventOnFilter,g=t.type,b=t.touches&&t.touches[0]||t.pointerType&&t.pointerType===`touch`&&t,S=(b||t).target,C=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||S,w=d.filter;if(_saveInputCheckedState(u),!dragEl&&!(/mousedown|pointerdown/.test(g)&&t.button!==0||d.disabled)&&!C.isContentEditable&&!(!this.nativeDraggable&&Safari&&S&&S.tagName.toUpperCase()===`SELECT`)&&(S=closest(S,d.draggable,u,!1),!(S&&S.animated)&&lastDownEl!==S)){if(oldIndex=index(S),oldDraggableIndex=index(S,d.draggable),typeof w==`function`){if(w.call(this,t,S,this)){_dispatchEvent({sortable:c,rootEl:C,name:`filter`,targetEl:S,toEl:u,fromEl:u}),pluginEvent(`filter`,c,{evt:t}),m&&t.cancelable&&t.preventDefault();return}}else if(w&&(w=w.split(`,`).some(function(d){if(d=closest(C,d.trim(),u,!1),d)return _dispatchEvent({sortable:c,rootEl:d,name:`filter`,targetEl:S,fromEl:u,toEl:u}),pluginEvent(`filter`,c,{evt:t}),!0}),w)){m&&t.cancelable&&t.preventDefault();return}d.handle&&!closest(C,d.handle,u,!1)||this._prepareDragStart(t,b,S)}}},_prepareDragStart:function _prepareDragStart(t,c,u){var d=this,m=d.el,g=d.options,b=m.ownerDocument,S;if(u&&!dragEl&&u.parentNode===m){var C=getRect(u);if(rootEl=m,dragEl=u,parentEl=dragEl.parentNode,nextEl=dragEl.nextSibling,lastDownEl=u,activeGroup=g.group,Sortable.dragged=dragEl,tapEvt={target:dragEl,clientX:(c||t).clientX,clientY:(c||t).clientY},tapDistanceLeft=tapEvt.clientX-C.left,tapDistanceTop=tapEvt.clientY-C.top,this._lastX=(c||t).clientX,this._lastY=(c||t).clientY,dragEl.style[`will-change`]=`all`,S=function dragStartFn(){if(pluginEvent(`delayEnded`,d,{evt:t}),Sortable.eventCanceled){d._onDrop();return}d._disableDelayedDragEvents(),!FireFox&&d.nativeDraggable&&(dragEl.draggable=!0),d._triggerDragStart(t,c),_dispatchEvent({sortable:d,name:`choose`,originalEvent:t}),toggleClass(dragEl,g.chosenClass,!0)},g.ignore.split(`,`).forEach(function(t){find(dragEl,t.trim(),_disableDraggable)}),on$1(b,`dragover`,nearestEmptyInsertDetectEvent),on$1(b,`mousemove`,nearestEmptyInsertDetectEvent),on$1(b,`touchmove`,nearestEmptyInsertDetectEvent),on$1(b,`mouseup`,d._onDrop),on$1(b,`touchend`,d._onDrop),on$1(b,`touchcancel`,d._onDrop),FireFox&&this.nativeDraggable&&(this.options.touchStartThreshold=4,dragEl.draggable=!0),pluginEvent(`delayStart`,this,{evt:t}),g.delay&&(!g.delayOnTouchOnly||c)&&(!this.nativeDraggable||!(Edge||IE11OrLess))){if(Sortable.eventCanceled){this._onDrop();return}on$1(b,`mouseup`,d._disableDelayedDrag),on$1(b,`touchend`,d._disableDelayedDrag),on$1(b,`touchcancel`,d._disableDelayedDrag),on$1(b,`mousemove`,d._delayedDragTouchMoveHandler),on$1(b,`touchmove`,d._delayedDragTouchMoveHandler),g.supportPointer&&on$1(b,`pointermove`,d._delayedDragTouchMoveHandler),d._dragStartTimer=setTimeout(S,g.delay)}else S()}},_delayedDragTouchMoveHandler:function _delayedDragTouchMoveHandler(t){var c=t.touches?t.touches[0]:t;Math.max(Math.abs(c.clientX-this._lastX),Math.abs(c.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function _disableDelayedDrag(){dragEl&&_disableDraggable(dragEl),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function _disableDelayedDragEvents(){var t=this.el.ownerDocument;off(t,`mouseup`,this._disableDelayedDrag),off(t,`touchend`,this._disableDelayedDrag),off(t,`touchcancel`,this._disableDelayedDrag),off(t,`mousemove`,this._delayedDragTouchMoveHandler),off(t,`touchmove`,this._delayedDragTouchMoveHandler),off(t,`pointermove`,this._delayedDragTouchMoveHandler)},_triggerDragStart:function _triggerDragStart(t,c){c=c||t.pointerType==`touch`&&t,!this.nativeDraggable||c?this.options.supportPointer?on$1(document,`pointermove`,this._onTouchMove):c?on$1(document,`touchmove`,this._onTouchMove):on$1(document,`mousemove`,this._onTouchMove):(on$1(dragEl,`dragend`,this),on$1(rootEl,`dragstart`,this._onDragStart));try{document.selection?_nextTick(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch{}},_dragStarted:function _dragStarted(t,c){if(awaitingDragStarted=!1,rootEl&&dragEl){pluginEvent(`dragStarted`,this,{evt:c}),this.nativeDraggable&&on$1(document,`dragover`,_checkOutsideTargetEl);var u=this.options;!t&&toggleClass(dragEl,u.dragClass,!1),toggleClass(dragEl,u.ghostClass,!0),Sortable.active=this,t&&this._appendGhost(),_dispatchEvent({sortable:this,name:`start`,originalEvent:c})}else this._nulling()},_emulateDragOver:function _emulateDragOver(){if(touchEvt){this._lastX=touchEvt.clientX,this._lastY=touchEvt.clientY,_hideGhostForTarget();for(var t=document.elementFromPoint(touchEvt.clientX,touchEvt.clientY),c=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(touchEvt.clientX,touchEvt.clientY),t!==c);)c=t;if(dragEl.parentNode[expando]._isOutsideThisEl(t),c)do{if(c[expando]){var u=void 0;if(u=c[expando]._onDragOver({clientX:touchEvt.clientX,clientY:touchEvt.clientY,target:t,rootEl:c}),u&&!this.options.dragoverBubble)break}t=c}while(c=c.parentNode);_unhideGhostForTarget()}},_onTouchMove:function _onTouchMove(t){if(tapEvt){var c=this.options,u=c.fallbackTolerance,d=c.fallbackOffset,m=t.touches?t.touches[0]:t,g=ghostEl&&matrix(ghostEl,!0),b=ghostEl&&g&&g.a,S=ghostEl&&g&&g.d,C=PositionGhostAbsolutely&&ghostRelativeParent&&getRelativeScrollOffset(ghostRelativeParent),w=(m.clientX-tapEvt.clientX+d.x)/(b||1)+(C?C[0]-ghostRelativeParentInitialScroll[0]:0)/(b||1),T=(m.clientY-tapEvt.clientY+d.y)/(S||1)+(C?C[1]-ghostRelativeParentInitialScroll[1]:0)/(S||1);if(!Sortable.active&&!awaitingDragStarted){if(u&&Math.max(Math.abs(m.clientX-this._lastX),Math.abs(m.clientY-this._lastY))<u)return;this._onDragStart(t,!0)}if(ghostEl){g?(g.e+=w-(lastDx||0),g.f+=T-(lastDy||0)):g={a:1,b:0,c:0,d:1,e:w,f:T};var E=`matrix(${g.a},${g.b},${g.c},${g.d},${g.e},${g.f})`;css(ghostEl,`webkitTransform`,E),css(ghostEl,`mozTransform`,E),css(ghostEl,`msTransform`,E),css(ghostEl,`transform`,E),lastDx=w,lastDy=T,touchEvt=m}t.cancelable&&t.preventDefault()}},_appendGhost:function _appendGhost(){if(!ghostEl){var t=this.options.fallbackOnBody?document.body:rootEl,c=getRect(dragEl,!0,PositionGhostAbsolutely,!0,t),u=this.options;if(PositionGhostAbsolutely){for(ghostRelativeParent=t;css(ghostRelativeParent,`position`)===`static`&&css(ghostRelativeParent,`transform`)===`none`&&ghostRelativeParent!==document;)ghostRelativeParent=ghostRelativeParent.parentNode;ghostRelativeParent!==document.body&&ghostRelativeParent!==document.documentElement?(ghostRelativeParent===document&&(ghostRelativeParent=getWindowScrollingElement()),c.top+=ghostRelativeParent.scrollTop,c.left+=ghostRelativeParent.scrollLeft):ghostRelativeParent=getWindowScrollingElement(),ghostRelativeParentInitialScroll=getRelativeScrollOffset(ghostRelativeParent)}ghostEl=dragEl.cloneNode(!0),toggleClass(ghostEl,u.ghostClass,!1),toggleClass(ghostEl,u.fallbackClass,!0),toggleClass(ghostEl,u.dragClass,!0),css(ghostEl,`transition`,``),css(ghostEl,`transform`,``),css(ghostEl,`box-sizing`,`border-box`),css(ghostEl,`margin`,0),css(ghostEl,`top`,c.top),css(ghostEl,`left`,c.left),css(ghostEl,`width`,c.width),css(ghostEl,`height`,c.height),css(ghostEl,`opacity`,`0.8`),css(ghostEl,`position`,PositionGhostAbsolutely?`absolute`:`fixed`),css(ghostEl,`zIndex`,`100000`),css(ghostEl,`pointerEvents`,`none`),Sortable.ghost=ghostEl,t.appendChild(ghostEl),css(ghostEl,`transform-origin`,tapDistanceLeft/parseInt(ghostEl.style.width)*100+`% `+tapDistanceTop/parseInt(ghostEl.style.height)*100+`%`)}},_onDragStart:function _onDragStart(t,c){var u=this,d=t.dataTransfer,m=u.options;if(pluginEvent(`dragStart`,this,{evt:t}),Sortable.eventCanceled){this._onDrop();return}pluginEvent(`setupClone`,this),Sortable.eventCanceled||(cloneEl=clone(dragEl),cloneEl.draggable=!1,cloneEl.style[`will-change`]=``,this._hideClone(),toggleClass(cloneEl,this.options.chosenClass,!1),Sortable.clone=cloneEl),u.cloneId=_nextTick(function(){pluginEvent(`clone`,u),!Sortable.eventCanceled&&(u.options.removeCloneOnHide||rootEl.insertBefore(cloneEl,dragEl),u._hideClone(),_dispatchEvent({sortable:u,name:`clone`}))}),!c&&toggleClass(dragEl,m.dragClass,!0),c?(ignoreNextClick=!0,u._loopId=setInterval(u._emulateDragOver,50)):(off(document,`mouseup`,u._onDrop),off(document,`touchend`,u._onDrop),off(document,`touchcancel`,u._onDrop),d&&(d.effectAllowed=`move`,m.setData&&m.setData.call(u,d,dragEl)),on$1(document,`drop`,u),css(dragEl,`transform`,`translateZ(0)`)),awaitingDragStarted=!0,u._dragStartId=_nextTick(u._dragStarted.bind(u,c,t)),on$1(document,`selectstart`,u),moved=!0,Safari&&css(document.body,`user-select`,`none`)},_onDragOver:function _onDragOver(t){var c=this.el,u=t.target,d,m,g,b=this.options,S=b.group,C=Sortable.active,w=activeGroup===S,T=b.sort,E=putSortable||C,D,O=this,Or=!1;if(_silent)return;function dragOverEvent(b,S){pluginEvent(b,O,_objectSpread2({evt:t,isOwner:w,axis:D?`vertical`:`horizontal`,revert:g,dragRect:d,targetRect:m,canSort:T,fromSortable:E,target:u,completed,onMove:function onMove(u,m){return _onMove(rootEl,c,dragEl,d,u,getRect(u),t,m)},changed},S))}function capture(){dragOverEvent(`dragOverAnimationCapture`),O.captureAnimationState(),O!==E&&E.captureAnimationState()}function completed(d){return dragOverEvent(`dragOverCompleted`,{insertion:d}),d&&(w?C._hideClone():C._showClone(O),O!==E&&(toggleClass(dragEl,putSortable?putSortable.options.ghostClass:C.options.ghostClass,!1),toggleClass(dragEl,b.ghostClass,!0)),putSortable!==O&&O!==Sortable.active?putSortable=O:O===Sortable.active&&putSortable&&(putSortable=null),E===O&&(O._ignoreWhileAnimating=u),O.animateAll(function(){dragOverEvent(`dragOverAnimationComplete`),O._ignoreWhileAnimating=null}),O!==E&&(E.animateAll(),E._ignoreWhileAnimating=null)),(u===dragEl&&!dragEl.animated||u===c&&!u.animated)&&(lastTarget=null),!b.dragoverBubble&&!t.rootEl&&u!==document&&(dragEl.parentNode[expando]._isOutsideThisEl(t.target),!d&&nearestEmptyInsertDetectEvent(t)),!b.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),Or=!0}function changed(){newIndex=index(dragEl),newDraggableIndex=index(dragEl,b.draggable),_dispatchEvent({sortable:O,name:`change`,toEl:c,newIndex,newDraggableIndex,originalEvent:t})}if(t.preventDefault!==void 0&&t.cancelable&&t.preventDefault(),u=closest(u,b.draggable,c,!0),dragOverEvent(`dragOver`),Sortable.eventCanceled)return Or;if(dragEl.contains(t.target)||u.animated&&u.animatingX&&u.animatingY||O._ignoreWhileAnimating===u)return completed(!1);if(ignoreNextClick=!1,C&&!b.disabled&&(w?T||(g=parentEl!==rootEl):putSortable===this||(this.lastPutMode=activeGroup.checkPull(this,C,dragEl,t))&&S.checkPut(this,C,dragEl,t))){if(D=this._getDirection(t,u)===`vertical`,d=getRect(dragEl),dragOverEvent(`dragOverValid`),Sortable.eventCanceled)return Or;if(g)return parentEl=rootEl,capture(),this._hideClone(),dragOverEvent(`revert`),Sortable.eventCanceled||(nextEl?rootEl.insertBefore(dragEl,nextEl):rootEl.appendChild(dragEl)),completed(!0);var kr=lastChild(c,b.draggable);if(!kr||_ghostIsLast(t,D,this)&&!kr.animated){if(kr===dragEl)return completed(!1);if(kr&&c===t.target&&(u=kr),u&&(m=getRect(u)),_onMove(rootEl,c,dragEl,d,u,m,t,!!u)!==!1)return capture(),c.appendChild(dragEl),parentEl=c,changed(),completed(!0)}else if(kr&&_ghostIsFirst(t,D,this)){var Ar=getChild(c,0,b,!0);if(Ar===dragEl)return completed(!1);if(u=Ar,m=getRect(u),_onMove(rootEl,c,dragEl,d,u,m,t,!1)!==!1)return capture(),c.insertBefore(dragEl,Ar),parentEl=c,changed(),completed(!0)}else if(u.parentNode===c){m=getRect(u);var jr=0,Mr,Nr=dragEl.parentNode!==c,Pr=!_dragElInRowColumn(dragEl.animated&&dragEl.toRect||d,u.animated&&u.toRect||m,D),Fr=D?`top`:`left`,Ir=isScrolledPast(u,`top`,`top`)||isScrolledPast(dragEl,`top`,`top`),Lr=Ir?Ir.scrollTop:void 0;lastTarget!==u&&(Mr=m[Fr],pastFirstInvertThresh=!1,isCircumstantialInvert=!Pr&&b.invertSwap||Nr),jr=_getSwapDirection(t,u,m,D,Pr?1:b.swapThreshold,b.invertedSwapThreshold==null?b.swapThreshold:b.invertedSwapThreshold,isCircumstantialInvert,lastTarget===u);var Rr;if(jr!==0){var zr=index(dragEl);do zr-=jr,Rr=parentEl.children[zr];while(Rr&&(css(Rr,`display`)===`none`||Rr===ghostEl))}if(jr===0||Rr===u)return completed(!1);lastTarget=u,lastDirection=jr;var Br=u.nextElementSibling,Vr=!1;Vr=jr===1;var Hr=_onMove(rootEl,c,dragEl,d,u,m,t,Vr);if(Hr!==!1)return(Hr===1||Hr===-1)&&(Vr=Hr===1),_silent=!0,setTimeout(_unsilent,30),capture(),Vr&&!Br?c.appendChild(dragEl):u.parentNode.insertBefore(dragEl,Vr?Br:u),Ir&&scrollBy(Ir,0,Lr-Ir.scrollTop),parentEl=dragEl.parentNode,Mr!==void 0&&!isCircumstantialInvert&&(targetMoveDistance=Math.abs(Mr-getRect(u)[Fr])),changed(),completed(!0)}if(c.contains(dragEl))return completed(!1)}return!1},_ignoreWhileAnimating:null,_offMoveEvents:function _offMoveEvents(){off(document,`mousemove`,this._onTouchMove),off(document,`touchmove`,this._onTouchMove),off(document,`pointermove`,this._onTouchMove),off(document,`dragover`,nearestEmptyInsertDetectEvent),off(document,`mousemove`,nearestEmptyInsertDetectEvent),off(document,`touchmove`,nearestEmptyInsertDetectEvent)},_offUpEvents:function _offUpEvents(){var t=this.el.ownerDocument;off(t,`mouseup`,this._onDrop),off(t,`touchend`,this._onDrop),off(t,`pointerup`,this._onDrop),off(t,`touchcancel`,this._onDrop),off(document,`selectstart`,this)},_onDrop:function _onDrop(t){var c=this.el,u=this.options;if(newIndex=index(dragEl),newDraggableIndex=index(dragEl,u.draggable),pluginEvent(`drop`,this,{evt:t}),parentEl=dragEl&&dragEl.parentNode,newIndex=index(dragEl),newDraggableIndex=index(dragEl,u.draggable),Sortable.eventCanceled){this._nulling();return}awaitingDragStarted=!1,isCircumstantialInvert=!1,pastFirstInvertThresh=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),_cancelNextTick(this.cloneId),_cancelNextTick(this._dragStartId),this.nativeDraggable&&(off(document,`drop`,this),off(c,`dragstart`,this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),Safari&&css(document.body,`user-select`,``),css(dragEl,`transform`,``),t&&(moved&&(t.cancelable&&t.preventDefault(),!u.dropBubble&&t.stopPropagation()),ghostEl&&ghostEl.parentNode&&ghostEl.parentNode.removeChild(ghostEl),(rootEl===parentEl||putSortable&&putSortable.lastPutMode!==`clone`)&&cloneEl&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),dragEl&&(this.nativeDraggable&&off(dragEl,`dragend`,this),_disableDraggable(dragEl),dragEl.style[`will-change`]=``,moved&&!awaitingDragStarted&&toggleClass(dragEl,putSortable?putSortable.options.ghostClass:this.options.ghostClass,!1),toggleClass(dragEl,this.options.chosenClass,!1),_dispatchEvent({sortable:this,name:`unchoose`,toEl:parentEl,newIndex:null,newDraggableIndex:null,originalEvent:t}),rootEl===parentEl?newIndex!==oldIndex&&newIndex>=0&&(_dispatchEvent({sortable:this,name:`update`,toEl:parentEl,originalEvent:t}),_dispatchEvent({sortable:this,name:`sort`,toEl:parentEl,originalEvent:t})):(newIndex>=0&&(_dispatchEvent({rootEl:parentEl,name:`add`,toEl:parentEl,fromEl:rootEl,originalEvent:t}),_dispatchEvent({sortable:this,name:`remove`,toEl:parentEl,originalEvent:t}),_dispatchEvent({rootEl:parentEl,name:`sort`,toEl:parentEl,fromEl:rootEl,originalEvent:t}),_dispatchEvent({sortable:this,name:`sort`,toEl:parentEl,originalEvent:t})),putSortable&&putSortable.save()),Sortable.active&&((newIndex==null||newIndex===-1)&&(newIndex=oldIndex,newDraggableIndex=oldDraggableIndex),_dispatchEvent({sortable:this,name:`end`,toEl:parentEl,originalEvent:t}),this.save()))),this._nulling()},_nulling:function _nulling(){pluginEvent(`nulling`,this),rootEl=dragEl=parentEl=ghostEl=nextEl=cloneEl=lastDownEl=cloneHidden=tapEvt=touchEvt=moved=newIndex=newDraggableIndex=oldIndex=oldDraggableIndex=lastTarget=lastDirection=putSortable=activeGroup=Sortable.dragged=Sortable.ghost=Sortable.clone=Sortable.active=null,savedInputChecked.forEach(function(t){t.checked=!0}),savedInputChecked.length=lastDx=lastDy=0},handleEvent:function handleEvent(t){switch(t.type){case`drop`:case`dragend`:this._onDrop(t);break;case`dragenter`:case`dragover`:dragEl&&(this._onDragOver(t),_globalDragOver(t));break;case`selectstart`:t.preventDefault();break}},toArray:function toArray(){for(var t=[],c,u=this.el.children,d=0,m=u.length,g=this.options;d<m;d++)c=u[d],closest(c,g.draggable,this.el,!1)&&t.push(c.getAttribute(g.dataIdAttr)||_generateId(c));return t},sort:function sort(t,c){var u={},d=this.el;this.toArray().forEach(function(t,c){var m=d.children[c];closest(m,this.options.draggable,d,!1)&&(u[t]=m)},this),c&&this.captureAnimationState(),t.forEach(function(t){u[t]&&(d.removeChild(u[t]),d.appendChild(u[t]))}),c&&this.animateAll()},save:function save(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function closest$1(t,c){return closest(t,c||this.options.draggable,this.el,!1)},option:function option(t,c){var u=this.options;if(c===void 0)return u[t];var d=PluginManager.modifyOption(this,t,c);d===void 0?u[t]=c:u[t]=d,t===`group`&&_prepareGroup(u)},destroy:function destroy(){pluginEvent(`destroy`,this);var t=this.el;t[expando]=null,off(t,`mousedown`,this._onTapStart),off(t,`touchstart`,this._onTapStart),off(t,`pointerdown`,this._onTapStart),this.nativeDraggable&&(off(t,`dragover`,this),off(t,`dragenter`,this)),Array.prototype.forEach.call(t.querySelectorAll(`[draggable]`),function(t){t.removeAttribute(`draggable`)}),this._onDrop(),this._disableDelayedDragEvents(),sortables.splice(sortables.indexOf(this.el),1),this.el=t=null},_hideClone:function _hideClone(){if(!cloneHidden){if(pluginEvent(`hideClone`,this),Sortable.eventCanceled)return;css(cloneEl,`display`,`none`),this.options.removeCloneOnHide&&cloneEl.parentNode&&cloneEl.parentNode.removeChild(cloneEl),cloneHidden=!0}},_showClone:function _showClone(t){if(t.lastPutMode!==`clone`){this._hideClone();return}if(cloneHidden){if(pluginEvent(`showClone`,this),Sortable.eventCanceled)return;dragEl.parentNode==rootEl&&!this.options.group.revertClone?rootEl.insertBefore(cloneEl,dragEl):nextEl?rootEl.insertBefore(cloneEl,nextEl):rootEl.appendChild(cloneEl),this.options.group.revertClone&&this.animate(dragEl,cloneEl),css(cloneEl,`display`,``),cloneHidden=!1}}},documentExists&&on$1(document,`touchmove`,function(t){(Sortable.active||awaitingDragStarted)&&t.cancelable&&t.preventDefault()}),Sortable.utils={on:on$1,off,css,find,is:function is(t,c){return!!closest(t,c,t,!1)},extend,throttle,closest,toggleClass,clone,index,nextTick:_nextTick,cancelNextTick:_cancelNextTick,detectDirection:_detectDirection,getChild},Sortable.get=function(t){return t[expando]},Sortable.mount=function(){for(var t=arguments.length,c=Array(t),u=0;u<t;u++)c[u]=arguments[u];c[0].constructor===Array&&(c=c[0]),c.forEach(function(t){if(!t.prototype||!t.prototype.constructor)throw`Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(t)}`;t.utils&&(Sortable.utils=_objectSpread2(_objectSpread2({},Sortable.utils),t.utils)),PluginManager.mount(t)})},Sortable.create=function(t,c){return new Sortable(t,c)},Sortable.version=version,autoScrolls=[],scrolling=!1,autoScroll=throttle(function(t,c,u,d){if(c.scroll){var m=(t.touches?t.touches[0]:t).clientX,g=(t.touches?t.touches[0]:t).clientY,b=c.scrollSensitivity,S=c.scrollSpeed,C=getWindowScrollingElement(),w=!1,T;scrollRootEl!==u&&(scrollRootEl=u,clearAutoScrolls(),scrollEl=c.scroll,T=c.scrollFn,scrollEl===!0&&(scrollEl=getParentAutoScrollElement(u,!0)));var E=0,D=scrollEl;do{var O=D,Or=getRect(O),kr=Or.top,Ar=Or.bottom,jr=Or.left,Mr=Or.right,Nr=Or.width,Pr=Or.height,Fr=void 0,Ir=void 0,Lr=O.scrollWidth,Rr=O.scrollHeight,zr=css(O),Br=O.scrollLeft,Vr=O.scrollTop;O===C?(Fr=Nr<Lr&&(zr.overflowX===`auto`||zr.overflowX===`scroll`||zr.overflowX===`visible`),Ir=Pr<Rr&&(zr.overflowY===`auto`||zr.overflowY===`scroll`||zr.overflowY===`visible`)):(Fr=Nr<Lr&&(zr.overflowX===`auto`||zr.overflowX===`scroll`),Ir=Pr<Rr&&(zr.overflowY===`auto`||zr.overflowY===`scroll`));var Hr=Fr&&(Math.abs(Mr-m)<=b&&Br+Nr<Lr)-(Math.abs(jr-m)<=b&&!!Br),Ur=Ir&&(Math.abs(Ar-g)<=b&&Vr+Pr<Rr)-(Math.abs(kr-g)<=b&&!!Vr);if(!autoScrolls[E])for(var Wr=0;Wr<=E;Wr++)autoScrolls[Wr]||(autoScrolls[Wr]={});(autoScrolls[E].vx!=Hr||autoScrolls[E].vy!=Ur||autoScrolls[E].el!==O)&&(autoScrolls[E].el=O,autoScrolls[E].vx=Hr,autoScrolls[E].vy=Ur,clearInterval(autoScrolls[E].pid),(Hr!=0||Ur!=0)&&(w=!0,autoScrolls[E].pid=setInterval(function(){d&&this.layer===0&&Sortable.active._onTouchMove(touchEvt$1);var c=autoScrolls[this.layer].vy?autoScrolls[this.layer].vy*S:0,u=autoScrolls[this.layer].vx?autoScrolls[this.layer].vx*S:0;typeof T==`function`&&T.call(Sortable.dragged.parentNode[expando],u,c,t,touchEvt$1,autoScrolls[this.layer].el)!==`continue`||scrollBy(autoScrolls[this.layer].el,u,c)}.bind({layer:E}),24))),E++}while(c.bubbleScroll&&D!==C&&(D=getParentAutoScrollElement(D,!1)));scrolling=w}},30),drop=function drop(t){var c=t.originalEvent,u=t.putSortable,d=t.dragEl,m=t.activeSortable,g=t.dispatchSortableEvent,b=t.hideGhostForTarget,S=t.unhideGhostForTarget;if(c){var C=u||m;b();var w=c.changedTouches&&c.changedTouches.length?c.changedTouches[0]:c,T=document.elementFromPoint(w.clientX,w.clientY);S(),C&&!C.el.contains(T)&&(g(`spill`),this.onSpill({dragEl:d,putSortable:u}))}},Revert.prototype={startIndex:null,dragStart:function dragStart(t){this.startIndex=t.oldDraggableIndex},onSpill:function onSpill(t){var c=t.dragEl,u=t.putSortable;this.sortable.captureAnimationState(),u&&u.captureAnimationState();var d=getChild(this.sortable.el,this.startIndex,this.options);d?this.sortable.el.insertBefore(c,d):this.sortable.el.appendChild(c),this.sortable.animateAll(),u&&u.animateAll()},drop},_extends(Revert,{pluginName:`revertOnSpill`}),Remove.prototype={onSpill:function onSpill(t){var c=t.dragEl,u=t.putSortable||this.sortable;u.captureAnimationState(),c.parentNode&&c.parentNode.removeChild(c),u.animateAll()},drop},_extends(Remove,{pluginName:`removeOnSpill`}),multiDragElements=[],multiDragClones=[],initialFolding=!1,folding=!1,dragStarted=!1,Sortable.mount(new AutoScrollPlugin),Sortable.mount(Remove,Revert)})),require_vuedraggable_umd=__commonJSMin$2(((t,c)=>{(function webpackUniversalModuleDefinition(u,d){typeof t==`object`&&typeof c==`object`?c.exports=d(require_vue(),(init_sortable_esm(),__toCommonJS(sortable_esm_exports))):typeof define==`function`&&define.amd?define([,`sortablejs`],d):typeof t==`object`?t.vuedraggable=d(require_vue(),(init_sortable_esm(),__toCommonJS(sortable_esm_exports))):u.vuedraggable=d(u.Vue,u.Sortable)})(typeof self<`u`?self:t,function(t,c){return(function(t){var c={};function __webpack_require__(u){if(c[u])return c[u].exports;var d=c[u]={i:u,l:!1,exports:{}};return t[u].call(d.exports,d,d.exports,__webpack_require__),d.l=!0,d.exports}return __webpack_require__.m=t,__webpack_require__.c=c,__webpack_require__.d=function(t,c,u){__webpack_require__.o(t,c)||Object.defineProperty(t,c,{enumerable:!0,get:u})},__webpack_require__.r=function(t){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(t,`__esModule`,{value:!0})},__webpack_require__.t=function(t,c){if(c&1&&(t=__webpack_require__(t)),c&8||c&4&&typeof t==`object`&&t&&t.__esModule)return t;var u=Object.create(null);if(__webpack_require__.r(u),Object.defineProperty(u,`default`,{enumerable:!0,value:t}),c&2&&typeof t!=`string`)for(var d in t)__webpack_require__.d(u,d,function(c){return t[c]}.bind(null,d));return u},__webpack_require__.n=function(t){var c=t&&t.__esModule?function getDefault(){return t.default}:function getModuleExports(){return t};return __webpack_require__.d(c,`a`,c),c},__webpack_require__.o=function(t,c){return Object.prototype.hasOwnProperty.call(t,c)},__webpack_require__.p=``,__webpack_require__(__webpack_require__.s=`fb15`)})({"00ee":(function(t,c,u){var d=u(`b622`)(`toStringTag`),m={};m[d]=`z`,t.exports=String(m)===`[object z]`}),"0366":(function(t,c,u){var d=u(`1c0b`);t.exports=function(t,c,u){if(d(t),c===void 0)return t;switch(u){case 0:return function(){return t.call(c)};case 1:return function(u){return t.call(c,u)};case 2:return function(u,d){return t.call(c,u,d)};case 3:return function(u,d,m){return t.call(c,u,d,m)}}return function(){return t.apply(c,arguments)}}}),"057f":(function(t,c,u){var d=u(`fc6a`),m=u(`241c`).f,g={}.toString,b=typeof window==`object`&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],getWindowNames=function(t){try{return m(t)}catch{return b.slice()}};t.exports.f=function getOwnPropertyNames(t){return b&&g.call(t)==`[object Window]`?getWindowNames(t):m(d(t))}}),"06cf":(function(t,c,u){var d=u(`83ab`),m=u(`d1e7`),g=u(`5c6c`),b=u(`fc6a`),S=u(`c04e`),C=u(`5135`),w=u(`0cfb`),T=Object.getOwnPropertyDescriptor;c.f=d?T:function getOwnPropertyDescriptor(t,c){if(t=b(t),c=S(c,!0),w)try{return T(t,c)}catch{}if(C(t,c))return g(!m.f.call(t,c),t[c])}}),"0cfb":(function(t,c,u){var d=u(`83ab`),m=u(`d039`),g=u(`cc12`);t.exports=!d&&!m(function(){return Object.defineProperty(g(`div`),`a`,{get:function(){return 7}}).a!=7})}),"13d5":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`d58f`).left,g=u(`a640`),b=u(`ae40`),S=g(`reduce`),C=b(`reduce`,{1:0});d({target:`Array`,proto:!0,forced:!S||!C},{reduce:function reduce(t){return m(this,t,arguments.length,arguments.length>1?arguments[1]:void 0)}})}),"14c3":(function(t,c,u){var d=u(`c6b6`),m=u(`9263`);t.exports=function(t,c){var u=t.exec;if(typeof u==`function`){var g=u.call(t,c);if(typeof g!=`object`)throw TypeError(`RegExp exec method returned something other than an Object or null`);return g}if(d(t)!==`RegExp`)throw TypeError(`RegExp#exec called on incompatible receiver`);return m.call(t,c)}}),"159b":(function(t,c,u){var d=u(`da84`),m=u(`fdbc`),g=u(`17c2`),b=u(`9112`);for(var S in m){var C=d[S],w=C&&C.prototype;if(w&&w.forEach!==g)try{b(w,`forEach`,g)}catch{w.forEach=g}}}),"17c2":(function(t,c,u){"use strict";var d=u(`b727`).forEach,m=u(`a640`),g=u(`ae40`),b=m(`forEach`),S=g(`forEach`);t.exports=!b||!S?function forEach(t){return d(this,t,arguments.length>1?arguments[1]:void 0)}:[].forEach}),"1be4":(function(t,c,u){t.exports=u(`d066`)(`document`,`documentElement`)}),"1c0b":(function(t,c){t.exports=function(t){if(typeof t!=`function`)throw TypeError(String(t)+` is not a function`);return t}}),"1c7e":(function(t,c,u){var d=u(`b622`)(`iterator`),m=!1;try{var g=0,b={next:function(){return{done:!!g++}},return:function(){m=!0}};b[d]=function(){return this},Array.from(b,function(){throw 2})}catch{}t.exports=function(t,c){if(!c&&!m)return!1;var u=!1;try{var g={};g[d]=function(){return{next:function(){return{done:u=!0}}}},t(g)}catch{}return u}}),"1d80":(function(t,c){t.exports=function(t){if(t==null)throw TypeError(`Can't call method on `+t);return t}}),"1dde":(function(t,c,u){var d=u(`d039`),m=u(`b622`),g=u(`2d00`),b=m(`species`);t.exports=function(t){return g>=51||!d(function(){var c=[],u=c.constructor={};return u[b]=function(){return{foo:1}},c[t](Boolean).foo!==1})}}),"23cb":(function(t,c,u){var d=u(`a691`),m=Math.max,g=Math.min;t.exports=function(t,c){var u=d(t);return u<0?m(u+c,0):g(u,c)}}),"23e7":(function(t,c,u){var d=u(`da84`),m=u(`06cf`).f,g=u(`9112`),b=u(`6eeb`),S=u(`ce4e`),C=u(`e893`),w=u(`94ca`);t.exports=function(t,c){var u=t.target,T=t.global,E=t.stat,D,O=T?d:E?d[u]||S(u,{}):(d[u]||{}).prototype,Or,kr,Ar,jr;if(O)for(Or in c){if(Ar=c[Or],t.noTargetGet?(jr=m(O,Or),kr=jr&&jr.value):kr=O[Or],D=w(T?Or:u+(E?`.`:`#`)+Or,t.forced),!D&&kr!==void 0){if(typeof Ar==typeof kr)continue;C(Ar,kr)}(t.sham||kr&&kr.sham)&&g(Ar,`sham`,!0),b(O,Or,Ar,t)}}}),"241c":(function(t,c,u){var d=u(`ca84`),m=u(`7839`).concat(`length`,`prototype`);c.f=Object.getOwnPropertyNames||function getOwnPropertyNames(t){return d(t,m)}}),"25f0":(function(t,c,u){"use strict";var d=u(`6eeb`),m=u(`825a`),g=u(`d039`),b=u(`ad6d`),S=`toString`,C=RegExp.prototype,w=C[S],T=g(function(){return w.call({source:`a`,flags:`b`})!=`/a/b`}),E=w.name!=S;(T||E)&&d(RegExp.prototype,S,function toString(){var t=m(this),c=String(t.source),u=t.flags,d=String(u===void 0&&t instanceof RegExp&&!(`flags`in C)?b.call(t):u);return`/`+c+`/`+d},{unsafe:!0})}),"2ca0":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`06cf`).f,g=u(`50c4`),b=u(`5a34`),S=u(`1d80`),C=u(`ab13`),w=u(`c430`),T=``.startsWith,E=Math.min,D=C(`startsWith`);d({target:`String`,proto:!0,forced:!(!w&&!D&&function(){var t=m(String.prototype,`startsWith`);return t&&!t.writable}())&&!D},{startsWith:function startsWith(t){var c=String(S(this));b(t);var u=g(E(arguments.length>1?arguments[1]:void 0,c.length)),d=String(t);return T?T.call(c,d,u):c.slice(u,u+d.length)===d}})}),"2d00":(function(t,c,u){var d=u(`da84`),m=u(`342f`),g=d.process,b=g&&g.versions,S=b&&b.v8,C,w;S?(C=S.split(`.`),w=C[0]+C[1]):m&&(C=m.match(/Edge\/(\d+)/),(!C||C[1]>=74)&&(C=m.match(/Chrome\/(\d+)/),C&&(w=C[1]))),t.exports=w&&+w}),"342f":(function(t,c,u){t.exports=u(`d066`)(`navigator`,`userAgent`)||``}),"35a1":(function(t,c,u){var d=u(`f5df`),m=u(`3f8c`),g=u(`b622`)(`iterator`);t.exports=function(t){if(t!=null)return t[g]||t[`@@iterator`]||m[d(t)]}}),"37e8":(function(t,c,u){var d=u(`83ab`),m=u(`9bf2`),g=u(`825a`),b=u(`df75`);t.exports=d?Object.defineProperties:function defineProperties(t,c){g(t);for(var u=b(c),d=u.length,S=0,C;d>S;)m.f(t,C=u[S++],c[C]);return t}}),"3bbe":(function(t,c,u){var d=u(`861d`);t.exports=function(t){if(!d(t)&&t!==null)throw TypeError(`Can't set `+String(t)+` as a prototype`);return t}}),"3ca3":(function(t,c,u){"use strict";var d=u(`6547`).charAt,m=u(`69f3`),g=u(`7dd0`),b=`String Iterator`,S=m.set,C=m.getterFor(b);g(String,`String`,function(t){S(this,{type:b,string:String(t),index:0})},function next(){var t=C(this),c=t.string,u=t.index,m;return u>=c.length?{value:void 0,done:!0}:(m=d(c,u),t.index+=m.length,{value:m,done:!1})})}),"3f8c":(function(t,c){t.exports={}}),4160:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`17c2`);d({target:`Array`,proto:!0,forced:[].forEach!=m},{forEach:m})}),"428f":(function(t,c,u){t.exports=u(`da84`)}),"44ad":(function(t,c,u){var d=u(`d039`),m=u(`c6b6`),g=``.split;t.exports=d(function(){return!Object(`z`).propertyIsEnumerable(0)})?function(t){return m(t)==`String`?g.call(t,``):Object(t)}:Object}),"44d2":(function(t,c,u){var d=u(`b622`),m=u(`7c73`),g=u(`9bf2`),b=d(`unscopables`),S=Array.prototype;S[b]??g.f(S,b,{configurable:!0,value:m(null)}),t.exports=function(t){S[b][t]=!0}}),"44e7":(function(t,c,u){var d=u(`861d`),m=u(`c6b6`),g=u(`b622`)(`match`);t.exports=function(t){var c;return d(t)&&((c=t[g])===void 0?m(t)==`RegExp`:!!c)}}),4930:(function(t,c,u){var d=u(`d039`);t.exports=!!Object.getOwnPropertySymbols&&!d(function(){return!String(Symbol())})}),"4d64":(function(t,c,u){var d=u(`fc6a`),m=u(`50c4`),g=u(`23cb`),createMethod=function(t){return function(c,u,b){var S=d(c),C=m(S.length),w=g(b,C),T;if(t&&u!=u){for(;C>w;)if(T=S[w++],T!=T)return!0}else for(;C>w;w++)if((t||w in S)&&S[w]===u)return t||w||0;return!t&&-1}};t.exports={includes:createMethod(!0),indexOf:createMethod(!1)}}),"4de4":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`b727`).filter,g=u(`1dde`),b=u(`ae40`),S=g(`filter`),C=b(`filter`);d({target:`Array`,proto:!0,forced:!S||!C},{filter:function filter(t){return m(this,t,arguments.length>1?arguments[1]:void 0)}})}),"4df4":(function(t,c,u){"use strict";var d=u(`0366`),m=u(`7b0b`),g=u(`9bdd`),b=u(`e95a`),S=u(`50c4`),C=u(`8418`),w=u(`35a1`);t.exports=function from(t){var c=m(t),u=typeof this==`function`?this:Array,T=arguments.length,E=T>1?arguments[1]:void 0,D=E!==void 0,O=w(c),Or=0,kr,Ar,jr,Mr,Nr,Pr;if(D&&(E=d(E,T>2?arguments[2]:void 0,2)),O!=null&&!(u==Array&&b(O)))for(Mr=O.call(c),Nr=Mr.next,Ar=new u;!(jr=Nr.call(Mr)).done;Or++)Pr=D?g(Mr,E,[jr.value,Or],!0):jr.value,C(Ar,Or,Pr);else for(kr=S(c.length),Ar=new u(kr);kr>Or;Or++)Pr=D?E(c[Or],Or):c[Or],C(Ar,Or,Pr);return Ar.length=Or,Ar}}),"4fad":(function(t,c,u){var d=u(`23e7`),m=u(`6f53`).entries;d({target:`Object`,stat:!0},{entries:function entries(t){return m(t)}})}),"50c4":(function(t,c,u){var d=u(`a691`),m=Math.min;t.exports=function(t){return t>0?m(d(t),9007199254740991):0}}),5135:(function(t,c){var u={}.hasOwnProperty;t.exports=function(t,c){return u.call(t,c)}}),5319:(function(t,c,u){"use strict";var d=u(`d784`),m=u(`825a`),g=u(`7b0b`),b=u(`50c4`),S=u(`a691`),C=u(`1d80`),w=u(`8aa5`),T=u(`14c3`),E=Math.max,D=Math.min,O=Math.floor,Or=/\$([$&'`]|\d\d?|<[^>]*>)/g,kr=/\$([$&'`]|\d\d?)/g,maybeToString=function(t){return t===void 0?t:String(t)};d(`replace`,2,function(t,c,u,d){var Ar=d.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,jr=d.REPLACE_KEEPS_$0,Mr=Ar?`$`:`$0`;return[function replace(u,d){var m=C(this),g=u?.[t];return g===void 0?c.call(String(m),u,d):g.call(u,m,d)},function(t,d){if(!Ar&&jr||typeof d==`string`&&d.indexOf(Mr)===-1){var g=u(c,t,this,d);if(g.done)return g.value}var C=m(t),O=String(this),Or=typeof d==`function`;Or||(d=String(d));var kr=C.global;if(kr){var Nr=C.unicode;C.lastIndex=0}for(var Pr=[];;){var Fr=T(C,O);if(Fr===null||(Pr.push(Fr),!kr))break;String(Fr[0])===``&&(C.lastIndex=w(O,b(C.lastIndex),Nr))}for(var Ir=``,Lr=0,Rr=0;Rr<Pr.length;Rr++){Fr=Pr[Rr];for(var zr=String(Fr[0]),Br=E(D(S(Fr.index),O.length),0),Vr=[],Hr=1;Hr<Fr.length;Hr++)Vr.push(maybeToString(Fr[Hr]));var Ur=Fr.groups;if(Or){var Wr=[zr].concat(Vr,Br,O);Ur!==void 0&&Wr.push(Ur);var Gr=String(d.apply(void 0,Wr))}else Gr=getSubstitution(zr,O,Br,Vr,Ur,d);Br>=Lr&&(Ir+=O.slice(Lr,Br)+Gr,Lr=Br+zr.length)}return Ir+O.slice(Lr)}];function getSubstitution(t,u,d,m,b,S){var C=d+t.length,w=m.length,T=kr;return b!==void 0&&(b=g(b),T=Or),c.call(S,T,function(c,g){var S;switch(g.charAt(0)){case`$`:return`$`;case`&`:return t;case"`":return u.slice(0,d);case`'`:return u.slice(C);case`<`:S=b[g.slice(1,-1)];break;default:var T=+g;if(T===0)return c;if(T>w){var E=O(T/10);return E===0?c:E<=w?m[E-1]===void 0?g.charAt(1):m[E-1]+g.charAt(1):c}S=m[T-1]}return S===void 0?``:S})}})}),5692:(function(t,c,u){var d=u(`c430`),m=u(`c6cd`);(t.exports=function(t,c){return m[t]||(m[t]=c===void 0?{}:c)})(`versions`,[]).push({version:`3.6.5`,mode:d?`pure`:`global`,copyright:`© 2020 Denis Pushkarev (zloirock.ru)`})}),"56ef":(function(t,c,u){var d=u(`d066`),m=u(`241c`),g=u(`7418`),b=u(`825a`);t.exports=d(`Reflect`,`ownKeys`)||function ownKeys(t){var c=m.f(b(t)),u=g.f;return u?c.concat(u(t)):c}}),"5a34":(function(t,c,u){var d=u(`44e7`);t.exports=function(t){if(d(t))throw TypeError(`The method doesn't accept regular expressions`);return t}}),"5c6c":(function(t,c){t.exports=function(t,c){return{enumerable:!(t&1),configurable:!(t&2),writable:!(t&4),value:c}}}),"5db7":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`a2bf`),g=u(`7b0b`),b=u(`50c4`),S=u(`1c0b`),C=u(`65f0`);d({target:`Array`,proto:!0},{flatMap:function flatMap(t){var c=g(this),u=b(c.length),d;return S(t),d=C(c,0),d.length=m(d,c,c,u,0,1,t,arguments.length>1?arguments[1]:void 0),d}})}),6547:(function(t,c,u){var d=u(`a691`),m=u(`1d80`),createMethod=function(t){return function(c,u){var g=String(m(c)),b=d(u),S=g.length,C,w;return b<0||b>=S?t?``:void 0:(C=g.charCodeAt(b),C<55296||C>56319||b+1===S||(w=g.charCodeAt(b+1))<56320||w>57343?t?g.charAt(b):C:t?g.slice(b,b+2):(C-55296<<10)+(w-56320)+65536)}};t.exports={codeAt:createMethod(!1),charAt:createMethod(!0)}}),"65f0":(function(t,c,u){var d=u(`861d`),m=u(`e8b5`),g=u(`b622`)(`species`);t.exports=function(t,c){var u;return m(t)&&(u=t.constructor,typeof u==`function`&&(u===Array||m(u.prototype))?u=void 0:d(u)&&(u=u[g],u===null&&(u=void 0))),new(u===void 0?Array:u)(c===0?0:c)}}),"69f3":(function(t,c,u){var d=u(`7f9a`),m=u(`da84`),g=u(`861d`),b=u(`9112`),S=u(`5135`),C=u(`f772`),w=u(`d012`),T=m.WeakMap,set,get,has,enforce=function(t){return has(t)?get(t):set(t,{})},getterFor=function(t){return function(c){var u;if(!g(c)||(u=get(c)).type!==t)throw TypeError(`Incompatible receiver, `+t+` required`);return u}};if(d){var E=new T,D=E.get,O=E.has,Or=E.set;set=function(t,c){return Or.call(E,t,c),c},get=function(t){return D.call(E,t)||{}},has=function(t){return O.call(E,t)}}else{var kr=C(`state`);w[kr]=!0,set=function(t,c){return b(t,kr,c),c},get=function(t){return S(t,kr)?t[kr]:{}},has=function(t){return S(t,kr)}}t.exports={set,get,has,enforce,getterFor}}),"6eeb":(function(t,c,u){var d=u(`da84`),m=u(`9112`),g=u(`5135`),b=u(`ce4e`),S=u(`8925`),C=u(`69f3`),w=C.get,T=C.enforce,E=String(String).split(`String`);(t.exports=function(t,c,u,S){var C=S?!!S.unsafe:!1,w=S?!!S.enumerable:!1,D=S?!!S.noTargetGet:!1;if(typeof u==`function`&&(typeof c==`string`&&!g(u,`name`)&&m(u,`name`,c),T(u).source=E.join(typeof c==`string`?c:``)),t===d){w?t[c]=u:b(c,u);return}else C?!D&&t[c]&&(w=!0):delete t[c];w?t[c]=u:m(t,c,u)})(Function.prototype,`toString`,function toString(){return typeof this==`function`&&w(this).source||S(this)})}),"6f53":(function(t,c,u){var d=u(`83ab`),m=u(`df75`),g=u(`fc6a`),b=u(`d1e7`).f,createMethod=function(t){return function(c){for(var u=g(c),S=m(u),C=S.length,w=0,T=[],E;C>w;)E=S[w++],(!d||b.call(u,E))&&T.push(t?[E,u[E]]:u[E]);return T}};t.exports={entries:createMethod(!0),values:createMethod(!1)}}),"73d9":(function(t,c,u){u(`44d2`)(`flatMap`)}),7418:(function(t,c){c.f=Object.getOwnPropertySymbols}),"746f":(function(t,c,u){var d=u(`428f`),m=u(`5135`),g=u(`e538`),b=u(`9bf2`).f;t.exports=function(t){var c=d.Symbol||(d.Symbol={});m(c,t)||b(c,t,{value:g.f(t)})}}),7839:(function(t,c){t.exports=[`constructor`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`]}),"7b0b":(function(t,c,u){var d=u(`1d80`);t.exports=function(t){return Object(d(t))}}),"7c73":(function(t,c,u){var d=u(`825a`),m=u(`37e8`),g=u(`7839`),b=u(`d012`),S=u(`1be4`),C=u(`cc12`),w=u(`f772`),T=`>`,E=`<`,D=`prototype`,O=`script`,Or=w(`IE_PROTO`),EmptyConstructor=function(){},scriptTag=function(t){return E+O+T+t+E+`/`+O+T},NullProtoObjectViaActiveX=function(t){t.write(scriptTag(``)),t.close();var c=t.parentWindow.Object;return t=null,c},NullProtoObjectViaIFrame=function(){var t=C(`iframe`),c=`java`+O+`:`,u;return t.style.display=`none`,S.appendChild(t),t.src=String(c),u=t.contentWindow.document,u.open(),u.write(scriptTag(`document.F=Object`)),u.close(),u.F},kr,NullProtoObject=function(){try{kr=document.domain&&new ActiveXObject(`htmlfile`)}catch{}NullProtoObject=kr?NullProtoObjectViaActiveX(kr):NullProtoObjectViaIFrame();for(var t=g.length;t--;)delete NullProtoObject[D][g[t]];return NullProtoObject()};b[Or]=!0,t.exports=Object.create||function create(t,c){var u;return t===null?u=NullProtoObject():(EmptyConstructor[D]=d(t),u=new EmptyConstructor,EmptyConstructor[D]=null,u[Or]=t),c===void 0?u:m(u,c)}}),"7dd0":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`9ed3`),g=u(`e163`),b=u(`d2bb`),S=u(`d44e`),C=u(`9112`),w=u(`6eeb`),T=u(`b622`),E=u(`c430`),D=u(`3f8c`),O=u(`ae93`),Or=O.IteratorPrototype,kr=O.BUGGY_SAFARI_ITERATORS,Ar=T(`iterator`),jr=`keys`,Mr=`values`,Nr=`entries`,returnThis=function(){return this};t.exports=function(t,c,u,T,O,Pr,Fr){m(u,c,T);var getIterationMethod=function(t){if(t===O&&Br)return Br;if(!kr&&t in Rr)return Rr[t];switch(t){case jr:return function keys(){return new u(this,t)};case Mr:return function values(){return new u(this,t)};case Nr:return function entries(){return new u(this,t)}}return function(){return new u(this)}},Ir=c+` Iterator`,Lr=!1,Rr=t.prototype,zr=Rr[Ar]||Rr[`@@iterator`]||O&&Rr[O],Br=!kr&&zr||getIterationMethod(O),Vr=c==`Array`&&Rr.entries||zr,Hr,Ur,Wr;if(Vr&&(Hr=g(Vr.call(new t)),Or!==Object.prototype&&Hr.next&&(!E&&g(Hr)!==Or&&(b?b(Hr,Or):typeof Hr[Ar]!=`function`&&C(Hr,Ar,returnThis)),S(Hr,Ir,!0,!0),E&&(D[Ir]=returnThis))),O==Mr&&zr&&zr.name!==Mr&&(Lr=!0,Br=function values(){return zr.call(this)}),(!E||Fr)&&Rr[Ar]!==Br&&C(Rr,Ar,Br),D[c]=Br,O)if(Ur={values:getIterationMethod(Mr),keys:Pr?Br:getIterationMethod(jr),entries:getIterationMethod(Nr)},Fr)for(Wr in Ur)(kr||Lr||!(Wr in Rr))&&w(Rr,Wr,Ur[Wr]);else d({target:c,proto:!0,forced:kr||Lr},Ur);return Ur}}),"7f9a":(function(t,c,u){var d=u(`da84`),m=u(`8925`),g=d.WeakMap;t.exports=typeof g==`function`&&/native code/.test(m(g))}),"825a":(function(t,c,u){var d=u(`861d`);t.exports=function(t){if(!d(t))throw TypeError(String(t)+` is not an object`);return t}}),"83ab":(function(t,c,u){t.exports=!u(`d039`)(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})}),8418:(function(t,c,u){"use strict";var d=u(`c04e`),m=u(`9bf2`),g=u(`5c6c`);t.exports=function(t,c,u){var b=d(c);b in t?m.f(t,b,g(0,u)):t[b]=u}}),"861d":(function(t,c){t.exports=function(t){return typeof t==`object`?t!==null:typeof t==`function`}}),8875:(function(t,c,u){var d,m,g;(function(u,b){m=[],d=b,g=typeof d==`function`?d.apply(c,m):d,g!==void 0&&(t.exports=g)})(typeof self<`u`?self:this,function(){function getCurrentScript(){var t=Object.getOwnPropertyDescriptor(document,`currentScript`);if(!t&&`currentScript`in document&&document.currentScript||t&&t.get!==getCurrentScript&&document.currentScript)return document.currentScript;try{throw Error()}catch(t){var c=/.*at [^(]*\((.*):(.+):(.+)\)$/gi.exec(t.stack)||/@([^@]*):(\d+):(\d+)\s*$/gi.exec(t.stack),u=c&&c[1]||!1,d=c&&c[2]||!1,m=document.location.href.replace(document.location.hash,``),g,b,S,C=document.getElementsByTagName(`script`);u===m&&(g=document.documentElement.outerHTML,b=RegExp(`(?:[^\\n]+?\\n){0,`+(d-2)+`}[^<]*<script>([\\d\\D]*?)<\\/script>[\\d\\D]*`,`i`),S=g.replace(b,`$1`).trim());for(var w=0;w<C.length;w++)if(C[w].readyState===`interactive`||C[w].src===u||u===m&&C[w].innerHTML&&C[w].innerHTML.trim()===S)return C[w];return null}}return getCurrentScript})}),8925:(function(t,c,u){var d=u(`c6cd`),m=Function.toString;typeof d.inspectSource!=`function`&&(d.inspectSource=function(t){return m.call(t)}),t.exports=d.inspectSource}),"8aa5":(function(t,c,u){"use strict";var d=u(`6547`).charAt;t.exports=function(t,c,u){return c+(u?d(t,c).length:1)}}),"8bbf":(function(c,u){c.exports=t}),"90e3":(function(t,c){var u=0,d=Math.random();t.exports=function(t){return`Symbol(`+String(t===void 0?``:t)+`)_`+(++u+d).toString(36)}}),9112:(function(t,c,u){var d=u(`83ab`),m=u(`9bf2`),g=u(`5c6c`);t.exports=d?function(t,c,u){return m.f(t,c,g(1,u))}:function(t,c,u){return t[c]=u,t}}),9263:(function(t,c,u){"use strict";var d=u(`ad6d`),m=u(`9f7f`),g=RegExp.prototype.exec,b=String.prototype.replace,S=g,C=(function(){var t=/a/,c=/b*/g;return g.call(t,`a`),g.call(c,`a`),t.lastIndex!==0||c.lastIndex!==0})(),w=m.UNSUPPORTED_Y||m.BROKEN_CARET,T=/()??/.exec(``)[1]!==void 0;(C||T||w)&&(S=function exec(t){var c=this,u,m,S,E,D=w&&c.sticky,O=d.call(c),Or=c.source,kr=0,Ar=t;return D&&(O=O.replace(`y`,``),O.indexOf(`g`)===-1&&(O+=`g`),Ar=String(t).slice(c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&t[c.lastIndex-1]!==`
|
|
470
473
|
`)&&(Or=`(?: `+Or+`)`,Ar=` `+Ar,kr++),m=RegExp(`^(?:`+Or+`)`,O)),T&&(m=RegExp(`^`+Or+`$(?!\\s)`,O)),C&&(u=c.lastIndex),S=g.call(D?m:c,Ar),D?S?(S.input=S.input.slice(kr),S[0]=S[0].slice(kr),S.index=c.lastIndex,c.lastIndex+=S[0].length):c.lastIndex=0:C&&S&&(c.lastIndex=c.global?S.index+S[0].length:u),T&&S&&S.length>1&&b.call(S[0],m,function(){for(E=1;E<arguments.length-2;E++)arguments[E]===void 0&&(S[E]=void 0)}),S}),t.exports=S}),"94ca":(function(t,c,u){var d=u(`d039`),m=/#|\.prototype\./,isForced=function(t,c){var u=b[g(t)];return u==C?!0:u==S?!1:typeof c==`function`?d(c):!!c},g=isForced.normalize=function(t){return String(t).replace(m,`.`).toLowerCase()},b=isForced.data={},S=isForced.NATIVE=`N`,C=isForced.POLYFILL=`P`;t.exports=isForced}),"99af":(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`d039`),g=u(`e8b5`),b=u(`861d`),S=u(`7b0b`),C=u(`50c4`),w=u(`8418`),T=u(`65f0`),E=u(`1dde`),D=u(`b622`),O=u(`2d00`),Or=D(`isConcatSpreadable`),kr=9007199254740991,Ar=`Maximum allowed index exceeded`,jr=O>=51||!m(function(){var t=[];return t[Or]=!1,t.concat()[0]!==t}),Mr=E(`concat`),isConcatSpreadable=function(t){if(!b(t))return!1;var c=t[Or];return c===void 0?g(t):!!c};d({target:`Array`,proto:!0,forced:!jr||!Mr},{concat:function concat(t){var c=S(this),u=T(c,0),d=0,m,g,b,E,D;for(m=-1,b=arguments.length;m<b;m++)if(D=m===-1?c:arguments[m],isConcatSpreadable(D)){if(E=C(D.length),d+E>kr)throw TypeError(Ar);for(g=0;g<E;g++,d++)g in D&&w(u,d,D[g])}else{if(d>=kr)throw TypeError(Ar);w(u,d++,D)}return u.length=d,u}})}),"9bdd":(function(t,c,u){var d=u(`825a`);t.exports=function(t,c,u,m){try{return m?c(d(u)[0],u[1]):c(u)}catch(c){var g=t.return;throw g!==void 0&&d(g.call(t)),c}}}),"9bf2":(function(t,c,u){var d=u(`83ab`),m=u(`0cfb`),g=u(`825a`),b=u(`c04e`),S=Object.defineProperty;c.f=d?S:function defineProperty(t,c,u){if(g(t),c=b(c,!0),g(u),m)try{return S(t,c,u)}catch{}if(`get`in u||`set`in u)throw TypeError(`Accessors not supported`);return`value`in u&&(t[c]=u.value),t}}),"9ed3":(function(t,c,u){"use strict";var d=u(`ae93`).IteratorPrototype,m=u(`7c73`),g=u(`5c6c`),b=u(`d44e`),S=u(`3f8c`),returnThis=function(){return this};t.exports=function(t,c,u){var C=c+` Iterator`;return t.prototype=m(d,{next:g(1,u)}),b(t,C,!1,!0),S[C]=returnThis,t}}),"9f7f":(function(t,c,u){"use strict";var d=u(`d039`);function RE(t,c){return RegExp(t,c)}c.UNSUPPORTED_Y=d(function(){var t=RE(`a`,`y`);return t.lastIndex=2,t.exec(`abcd`)!=null}),c.BROKEN_CARET=d(function(){var t=RE(`^r`,`gy`);return t.lastIndex=2,t.exec(`str`)!=null})}),a2bf:(function(t,c,u){"use strict";var d=u(`e8b5`),m=u(`50c4`),g=u(`0366`),flattenIntoArray=function(t,c,u,b,S,C,w,T){for(var E=S,D=0,O=w?g(w,T,3):!1,Or;D<b;){if(D in u){if(Or=O?O(u[D],D,c):u[D],C>0&&d(Or))E=flattenIntoArray(t,c,Or,m(Or.length),E,C-1)-1;else{if(E>=9007199254740991)throw TypeError(`Exceed the acceptable array length`);t[E]=Or}E++}D++}return E};t.exports=flattenIntoArray}),a352:(function(t,u){t.exports=c}),a434:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`23cb`),g=u(`a691`),b=u(`50c4`),S=u(`7b0b`),C=u(`65f0`),w=u(`8418`),T=u(`1dde`),E=u(`ae40`),D=T(`splice`),O=E(`splice`,{ACCESSORS:!0,0:0,1:2}),Or=Math.max,kr=Math.min,Ar=9007199254740991,jr=`Maximum allowed length exceeded`;d({target:`Array`,proto:!0,forced:!D||!O},{splice:function splice(t,c){var u=S(this),d=b(u.length),T=m(t,d),E=arguments.length,D,O,Mr,Nr,Pr,Fr;if(E===0?D=O=0:E===1?(D=0,O=d-T):(D=E-2,O=kr(Or(g(c),0),d-T)),d+D-O>Ar)throw TypeError(jr);for(Mr=C(u,O),Nr=0;Nr<O;Nr++)Pr=T+Nr,Pr in u&&w(Mr,Nr,u[Pr]);if(Mr.length=O,D<O){for(Nr=T;Nr<d-O;Nr++)Pr=Nr+O,Fr=Nr+D,Pr in u?u[Fr]=u[Pr]:delete u[Fr];for(Nr=d;Nr>d-O+D;Nr--)delete u[Nr-1]}else if(D>O)for(Nr=d-O;Nr>T;Nr--)Pr=Nr+O-1,Fr=Nr+D-1,Pr in u?u[Fr]=u[Pr]:delete u[Fr];for(Nr=0;Nr<D;Nr++)u[Nr+T]=arguments[Nr+2];return u.length=d-O+D,Mr}})}),a4d3:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`da84`),g=u(`d066`),b=u(`c430`),S=u(`83ab`),C=u(`4930`),w=u(`fdbf`),T=u(`d039`),E=u(`5135`),D=u(`e8b5`),O=u(`861d`),Or=u(`825a`),kr=u(`7b0b`),Ar=u(`fc6a`),jr=u(`c04e`),Mr=u(`5c6c`),Nr=u(`7c73`),Pr=u(`df75`),Fr=u(`241c`),Ir=u(`057f`),Lr=u(`7418`),Rr=u(`06cf`),zr=u(`9bf2`),Br=u(`d1e7`),Vr=u(`9112`),Hr=u(`6eeb`),Ur=u(`5692`),Wr=u(`f772`),Gr=u(`d012`),Kr=u(`90e3`),qr=u(`b622`),Jr=u(`e538`),Yr=u(`746f`),Xr=u(`d44e`),Zr=u(`69f3`),Qr=u(`b727`).forEach,$r=Wr(`hidden`),ei=`Symbol`,ti=`prototype`,ni=qr(`toPrimitive`),ri=Zr.set,ii=Zr.getterFor(ei),ai=Object[ti],oi=m.Symbol,si=g(`JSON`,`stringify`),ci=Rr.f,li=zr.f,ui=Ir.f,di=Br.f,fi=Ur(`symbols`),pi=Ur(`op-symbols`),mi=Ur(`string-to-symbol-registry`),hi=Ur(`symbol-to-string-registry`),gi=Ur(`wks`),_i=m.QObject,vi=!_i||!_i[ti]||!_i[ti].findChild,yi=S&&T(function(){return Nr(li({},`a`,{get:function(){return li(this,`a`,{value:7}).a}})).a!=7})?function(t,c,u){var d=ci(ai,c);d&&delete ai[c],li(t,c,u),d&&t!==ai&&li(ai,c,d)}:li,wrap=function(t,c){var u=fi[t]=Nr(oi[ti]);return ri(u,{type:ei,tag:t,description:c}),S||(u.description=c),u},bi=w?function(t){return typeof t==`symbol`}:function(t){return Object(t)instanceof oi},xi=function defineProperty(t,c,u){t===ai&&xi(pi,c,u),Or(t);var d=jr(c,!0);return Or(u),E(fi,d)?(u.enumerable?(E(t,$r)&&t[$r][d]&&(t[$r][d]=!1),u=Nr(u,{enumerable:Mr(0,!1)})):(E(t,$r)||li(t,$r,Mr(1,{})),t[$r][d]=!0),yi(t,d,u)):li(t,d,u)},Si=function defineProperties(t,c){Or(t);var u=Ar(c);return Qr(Pr(u).concat(Di(u)),function(c){(!S||wi.call(u,c))&&xi(t,c,u[c])}),t},Ci=function create(t,c){return c===void 0?Nr(t):Si(Nr(t),c)},wi=function propertyIsEnumerable(t){var c=jr(t,!0),u=di.call(this,c);return this===ai&&E(fi,c)&&!E(pi,c)?!1:u||!E(this,c)||!E(fi,c)||E(this,$r)&&this[$r][c]?u:!0},Ti=function getOwnPropertyDescriptor(t,c){var u=Ar(t),d=jr(c,!0);if(!(u===ai&&E(fi,d)&&!E(pi,d))){var m=ci(u,d);return m&&E(fi,d)&&!(E(u,$r)&&u[$r][d])&&(m.enumerable=!0),m}},Ei=function getOwnPropertyNames(t){var c=ui(Ar(t)),u=[];return Qr(c,function(t){!E(fi,t)&&!E(Gr,t)&&u.push(t)}),u},Di=function getOwnPropertySymbols(t){var c=t===ai,u=ui(c?pi:Ar(t)),d=[];return Qr(u,function(t){E(fi,t)&&(!c||E(ai,t))&&d.push(fi[t])}),d};C||(oi=function Symbol(){if(this instanceof oi)throw TypeError(`Symbol is not a constructor`);var t=!arguments.length||arguments[0]===void 0?void 0:String(arguments[0]),c=Kr(t),setter=function(t){this===ai&&setter.call(pi,t),E(this,$r)&&E(this[$r],c)&&(this[$r][c]=!1),yi(this,c,Mr(1,t))};return S&&vi&&yi(ai,c,{configurable:!0,set:setter}),wrap(c,t)},Hr(oi[ti],`toString`,function toString(){return ii(this).tag}),Hr(oi,`withoutSetter`,function(t){return wrap(Kr(t),t)}),Br.f=wi,zr.f=xi,Rr.f=Ti,Fr.f=Ir.f=Ei,Lr.f=Di,Jr.f=function(t){return wrap(qr(t),t)},S&&(li(oi[ti],`description`,{configurable:!0,get:function description(){return ii(this).description}}),b||Hr(ai,`propertyIsEnumerable`,wi,{unsafe:!0}))),d({global:!0,wrap:!0,forced:!C,sham:!C},{Symbol:oi}),Qr(Pr(gi),function(t){Yr(t)}),d({target:ei,stat:!0,forced:!C},{for:function(t){var c=String(t);if(E(mi,c))return mi[c];var u=oi(c);return mi[c]=u,hi[u]=c,u},keyFor:function keyFor(t){if(!bi(t))throw TypeError(t+` is not a symbol`);if(E(hi,t))return hi[t]},useSetter:function(){vi=!0},useSimple:function(){vi=!1}}),d({target:`Object`,stat:!0,forced:!C,sham:!S},{create:Ci,defineProperty:xi,defineProperties:Si,getOwnPropertyDescriptor:Ti}),d({target:`Object`,stat:!0,forced:!C},{getOwnPropertyNames:Ei,getOwnPropertySymbols:Di}),d({target:`Object`,stat:!0,forced:T(function(){Lr.f(1)})},{getOwnPropertySymbols:function getOwnPropertySymbols(t){return Lr.f(kr(t))}}),si&&d({target:`JSON`,stat:!0,forced:!C||T(function(){var t=oi();return si([t])!=`[null]`||si({a:t})!=`{}`||si(Object(t))!=`{}`})},{stringify:function stringify(t,replacer,c){for(var u=[t],d=1,m;arguments.length>d;)u.push(arguments[d++]);if(m=replacer,!(!O(replacer)&&t===void 0||bi(t)))return D(replacer)||(replacer=function(t,c){if(typeof m==`function`&&(c=m.call(this,t,c)),!bi(c))return c}),u[1]=replacer,si.apply(null,u)}}),oi[ti][ni]||Vr(oi[ti],ni,oi[ti].valueOf),Xr(oi,ei),Gr[$r]=!0}),a630:(function(t,c,u){var d=u(`23e7`),m=u(`4df4`);d({target:`Array`,stat:!0,forced:!u(`1c7e`)(function(t){Array.from(t)})},{from:m})}),a640:(function(t,c,u){"use strict";var d=u(`d039`);t.exports=function(t,c){var u=[][t];return!!u&&d(function(){u.call(null,c||function(){throw 1},1)})}}),a691:(function(t,c){var u=Math.ceil,d=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?d:u)(t)}}),ab13:(function(t,c,u){var d=u(`b622`)(`match`);t.exports=function(t){var c=/./;try{`/./`[t](c)}catch{try{return c[d]=!1,`/./`[t](c)}catch{}}return!1}}),ac1f:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`9263`);d({target:`RegExp`,proto:!0,forced:/./.exec!==m},{exec:m})}),ad6d:(function(t,c,u){"use strict";var d=u(`825a`);t.exports=function(){var t=d(this),c=``;return t.global&&(c+=`g`),t.ignoreCase&&(c+=`i`),t.multiline&&(c+=`m`),t.dotAll&&(c+=`s`),t.unicode&&(c+=`u`),t.sticky&&(c+=`y`),c}}),ae40:(function(t,c,u){var d=u(`83ab`),m=u(`d039`),g=u(`5135`),b=Object.defineProperty,S={},thrower=function(t){throw t};t.exports=function(t,c){if(g(S,t))return S[t];c||(c={});var u=[][t],C=g(c,`ACCESSORS`)?c.ACCESSORS:!1,w=g(c,0)?c[0]:thrower,T=g(c,1)?c[1]:void 0;return S[t]=!!u&&!m(function(){if(C&&!d)return!0;var t={length:-1};C?b(t,1,{enumerable:!0,get:thrower}):t[1]=1,u.call(t,w,T)})}}),ae93:(function(t,c,u){"use strict";var d=u(`e163`),m=u(`9112`),g=u(`5135`),b=u(`b622`),S=u(`c430`),C=b(`iterator`),w=!1,returnThis=function(){return this},T,E,D;[].keys&&(D=[].keys(),`next`in D?(E=d(d(D)),E!==Object.prototype&&(T=E)):w=!0),T??(T={}),!S&&!g(T,C)&&m(T,C,returnThis),t.exports={IteratorPrototype:T,BUGGY_SAFARI_ITERATORS:w}}),b041:(function(t,c,u){"use strict";var d=u(`00ee`),m=u(`f5df`);t.exports=d?{}.toString:function toString(){return`[object `+m(this)+`]`}}),b0c0:(function(t,c,u){var d=u(`83ab`),m=u(`9bf2`).f,g=Function.prototype,b=g.toString,S=/^\s*function ([^ (]*)/,C=`name`;d&&!(C in g)&&m(g,C,{configurable:!0,get:function(){try{return b.call(this).match(S)[1]}catch{return``}}})}),b622:(function(t,c,u){var d=u(`da84`),m=u(`5692`),g=u(`5135`),b=u(`90e3`),S=u(`4930`),C=u(`fdbf`),w=m(`wks`),T=d.Symbol,E=C?T:T&&T.withoutSetter||b;t.exports=function(t){return g(w,t)||(S&&g(T,t)?w[t]=T[t]:w[t]=E(`Symbol.`+t)),w[t]}}),b64b:(function(t,c,u){var d=u(`23e7`),m=u(`7b0b`),g=u(`df75`);d({target:`Object`,stat:!0,forced:u(`d039`)(function(){g(1)})},{keys:function keys(t){return g(m(t))}})}),b727:(function(t,c,u){var d=u(`0366`),m=u(`44ad`),g=u(`7b0b`),b=u(`50c4`),S=u(`65f0`),C=[].push,createMethod=function(t){var c=t==1,u=t==2,w=t==3,T=t==4,E=t==6,D=t==5||E;return function(O,Or,kr,Ar){for(var jr=g(O),Mr=m(jr),Nr=d(Or,kr,3),Pr=b(Mr.length),Fr=0,Ir=Ar||S,Lr=c?Ir(O,Pr):u?Ir(O,0):void 0,Rr,zr;Pr>Fr;Fr++)if((D||Fr in Mr)&&(Rr=Mr[Fr],zr=Nr(Rr,Fr,jr),t)){if(c)Lr[Fr]=zr;else if(zr)switch(t){case 3:return!0;case 5:return Rr;case 6:return Fr;case 2:C.call(Lr,Rr)}else if(T)return!1}return E?-1:w||T?T:Lr}};t.exports={forEach:createMethod(0),map:createMethod(1),filter:createMethod(2),some:createMethod(3),every:createMethod(4),find:createMethod(5),findIndex:createMethod(6)}}),c04e:(function(t,c,u){var d=u(`861d`);t.exports=function(t,c){if(!d(t))return t;var u,m;if(c&&typeof(u=t.toString)==`function`&&!d(m=u.call(t))||typeof(u=t.valueOf)==`function`&&!d(m=u.call(t))||!c&&typeof(u=t.toString)==`function`&&!d(m=u.call(t)))return m;throw TypeError(`Can't convert object to primitive value`)}}),c430:(function(t,c){t.exports=!1}),c6b6:(function(t,c){var u={}.toString;t.exports=function(t){return u.call(t).slice(8,-1)}}),c6cd:(function(t,c,u){var d=u(`da84`),m=u(`ce4e`),g=`__core-js_shared__`;t.exports=d[g]||m(g,{})}),c740:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`b727`).findIndex,g=u(`44d2`),b=u(`ae40`),S=`findIndex`,C=!0,w=b(S);S in[]&&[,][S](function(){C=!1}),d({target:`Array`,proto:!0,forced:C||!w},{findIndex:function findIndex(t){return m(this,t,arguments.length>1?arguments[1]:void 0)}}),g(S)}),c8ba:(function(t,c){var u=(function(){return this})();try{u=u||Function(`return this`)()}catch{typeof window==`object`&&(u=window)}t.exports=u}),c975:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`4d64`).indexOf,g=u(`a640`),b=u(`ae40`),S=[].indexOf,C=!!S&&1/[1].indexOf(1,-0)<0,w=g(`indexOf`),T=b(`indexOf`,{ACCESSORS:!0,1:0});d({target:`Array`,proto:!0,forced:C||!w||!T},{indexOf:function indexOf(t){return C?S.apply(this,arguments)||0:m(this,t,arguments.length>1?arguments[1]:void 0)}})}),ca84:(function(t,c,u){var d=u(`5135`),m=u(`fc6a`),g=u(`4d64`).indexOf,b=u(`d012`);t.exports=function(t,c){var u=m(t),S=0,C=[],w;for(w in u)!d(b,w)&&d(u,w)&&C.push(w);for(;c.length>S;)d(u,w=c[S++])&&(~g(C,w)||C.push(w));return C}}),caad:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`4d64`).includes,g=u(`44d2`);d({target:`Array`,proto:!0,forced:!u(`ae40`)(`indexOf`,{ACCESSORS:!0,1:0})},{includes:function includes(t){return m(this,t,arguments.length>1?arguments[1]:void 0)}}),g(`includes`)}),cc12:(function(t,c,u){var d=u(`da84`),m=u(`861d`),g=d.document,b=m(g)&&m(g.createElement);t.exports=function(t){return b?g.createElement(t):{}}}),ce4e:(function(t,c,u){var d=u(`da84`),m=u(`9112`);t.exports=function(t,c){try{m(d,t,c)}catch{d[t]=c}return c}}),d012:(function(t,c){t.exports={}}),d039:(function(t,c){t.exports=function(t){try{return!!t()}catch{return!0}}}),d066:(function(t,c,u){var d=u(`428f`),m=u(`da84`),aFunction=function(t){return typeof t==`function`?t:void 0};t.exports=function(t,c){return arguments.length<2?aFunction(d[t])||aFunction(m[t]):d[t]&&d[t][c]||m[t]&&m[t][c]}}),d1e7:(function(t,c,u){"use strict";var d={}.propertyIsEnumerable,m=Object.getOwnPropertyDescriptor;c.f=m&&!d.call({1:2},1)?function propertyIsEnumerable(t){var c=m(this,t);return!!c&&c.enumerable}:d}),d28b:(function(t,c,u){u(`746f`)(`iterator`)}),d2bb:(function(t,c,u){var d=u(`825a`),m=u(`3bbe`);t.exports=Object.setPrototypeOf||(`__proto__`in{}?function(){var t=!1,c={},u;try{u=Object.getOwnPropertyDescriptor(Object.prototype,`__proto__`).set,u.call(c,[]),t=c instanceof Array}catch{}return function setPrototypeOf(c,g){return d(c),m(g),t?u.call(c,g):c.__proto__=g,c}}():void 0)}),d3b7:(function(t,c,u){var d=u(`00ee`),m=u(`6eeb`),g=u(`b041`);d||m(Object.prototype,`toString`,g,{unsafe:!0})}),d44e:(function(t,c,u){var d=u(`9bf2`).f,m=u(`5135`),g=u(`b622`)(`toStringTag`);t.exports=function(t,c,u){t&&!m(t=u?t:t.prototype,g)&&d(t,g,{configurable:!0,value:c})}}),d58f:(function(t,c,u){var d=u(`1c0b`),m=u(`7b0b`),g=u(`44ad`),b=u(`50c4`),createMethod=function(t){return function(c,u,S,C){d(u);var w=m(c),T=g(w),E=b(w.length),D=t?E-1:0,O=t?-1:1;if(S<2)for(;;){if(D in T){C=T[D],D+=O;break}if(D+=O,t?D<0:E<=D)throw TypeError(`Reduce of empty array with no initial value`)}for(;t?D>=0:E>D;D+=O)D in T&&(C=u(C,T[D],D,w));return C}};t.exports={left:createMethod(!1),right:createMethod(!0)}}),d784:(function(t,c,u){"use strict";u(`ac1f`);var d=u(`6eeb`),m=u(`d039`),g=u(`b622`),b=u(`9263`),S=u(`9112`),C=g(`species`),w=!m(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:`7`},t},``.replace(t,`$<a>`)!==`7`}),T=(function(){return`a`.replace(/./,`$0`)===`$0`})(),E=g(`replace`),D=(function(){return/./[E]?/./[E](`a`,`$0`)===``:!1})(),O=!m(function(){var t=/(?:)/,c=t.exec;t.exec=function(){return c.apply(this,arguments)};var u=`ab`.split(t);return u.length!==2||u[0]!==`a`||u[1]!==`b`});t.exports=function(t,c,u,E){var Or=g(t),kr=!m(function(){var c={};return c[Or]=function(){return 7},``[t](c)!=7}),Ar=kr&&!m(function(){var c=!1,u=/a/;return t===`split`&&(u={},u.constructor={},u.constructor[C]=function(){return u},u.flags=``,u[Or]=/./[Or]),u.exec=function(){return c=!0,null},u[Or](``),!c});if(!kr||!Ar||t===`replace`&&!(w&&T&&!D)||t===`split`&&!O){var jr=/./[Or],Mr=u(Or,``[t],function(t,c,u,d,m){return c.exec===b?kr&&!m?{done:!0,value:jr.call(c,u,d)}:{done:!0,value:t.call(u,c,d)}:{done:!1}},{REPLACE_KEEPS_$0:T,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:D}),Nr=Mr[0],Pr=Mr[1];d(String.prototype,t,Nr),d(RegExp.prototype,Or,c==2?function(t,c){return Pr.call(t,this,c)}:function(t){return Pr.call(t,this)})}E&&S(RegExp.prototype[Or],`sham`,!0)}}),d81d:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`b727`).map,g=u(`1dde`),b=u(`ae40`),S=g(`map`),C=b(`map`);d({target:`Array`,proto:!0,forced:!S||!C},{map:function map(t){return m(this,t,arguments.length>1?arguments[1]:void 0)}})}),da84:(function(t,c,u){(function(c){var check=function(t){return t&&t.Math==Math&&t};t.exports=check(typeof globalThis==`object`&&globalThis)||check(typeof window==`object`&&window)||check(typeof self==`object`&&self)||check(typeof c==`object`&&c)||Function(`return this`)()}).call(this,u(`c8ba`))}),dbb4:(function(t,c,u){var d=u(`23e7`),m=u(`83ab`),g=u(`56ef`),b=u(`fc6a`),S=u(`06cf`),C=u(`8418`);d({target:`Object`,stat:!0,sham:!m},{getOwnPropertyDescriptors:function getOwnPropertyDescriptors(t){for(var c=b(t),u=S.f,d=g(c),m={},w=0,T,E;d.length>w;)E=u(c,T=d[w++]),E!==void 0&&C(m,T,E);return m}})}),dbf1:(function(t,c,u){"use strict";(function(t){u.d(c,`a`,function(){return d});function getConsole(){return typeof window<`u`?window.console:t.console}var d=getConsole()}).call(this,u(`c8ba`))}),ddb0:(function(t,c,u){var d=u(`da84`),m=u(`fdbc`),g=u(`e260`),b=u(`9112`),S=u(`b622`),C=S(`iterator`),w=S(`toStringTag`),T=g.values;for(var E in m){var D=d[E],O=D&&D.prototype;if(O){if(O[C]!==T)try{b(O,C,T)}catch{O[C]=T}if(O[w]||b(O,w,E),m[E]){for(var Or in g)if(O[Or]!==g[Or])try{b(O,Or,g[Or])}catch{O[Or]=g[Or]}}}}}),df75:(function(t,c,u){var d=u(`ca84`),m=u(`7839`);t.exports=Object.keys||function keys(t){return d(t,m)}}),e01a:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`83ab`),g=u(`da84`),b=u(`5135`),S=u(`861d`),C=u(`9bf2`).f,w=u(`e893`),T=g.Symbol;if(m&&typeof T==`function`&&(!(`description`in T.prototype)||T().description!==void 0)){var E={},D=function Symbol(){var t=arguments.length<1||arguments[0]===void 0?void 0:String(arguments[0]),c=this instanceof D?new T(t):t===void 0?T():T(t);return t===``&&(E[c]=!0),c};w(D,T);var O=D.prototype=T.prototype;O.constructor=D;var Or=O.toString,kr=String(T(`test`))==`Symbol(test)`,Ar=/^Symbol\((.*)\)[^)]+$/;C(O,`description`,{configurable:!0,get:function description(){var t=S(this)?this.valueOf():this,c=Or.call(t);if(b(E,t))return``;var u=kr?c.slice(7,-1):c.replace(Ar,`$1`);return u===``?void 0:u}}),d({global:!0,forced:!0},{Symbol:D})}}),e163:(function(t,c,u){var d=u(`5135`),m=u(`7b0b`),g=u(`f772`),b=u(`e177`),S=g(`IE_PROTO`),C=Object.prototype;t.exports=b?Object.getPrototypeOf:function(t){return t=m(t),d(t,S)?t[S]:typeof t.constructor==`function`&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?C:null}}),e177:(function(t,c,u){t.exports=!u(`d039`)(function(){function F(){}return F.prototype.constructor=null,Object.getPrototypeOf(new F)!==F.prototype})}),e260:(function(t,c,u){"use strict";var d=u(`fc6a`),m=u(`44d2`),g=u(`3f8c`),b=u(`69f3`),S=u(`7dd0`),C=`Array Iterator`,w=b.set,T=b.getterFor(C);t.exports=S(Array,`Array`,function(t,c){w(this,{type:C,target:d(t),index:0,kind:c})},function(){var t=T(this),c=t.target,u=t.kind,d=t.index++;return!c||d>=c.length?(t.target=void 0,{value:void 0,done:!0}):u==`keys`?{value:d,done:!1}:u==`values`?{value:c[d],done:!1}:{value:[d,c[d]],done:!1}},`values`),g.Arguments=g.Array,m(`keys`),m(`values`),m(`entries`)}),e439:(function(t,c,u){var d=u(`23e7`),m=u(`d039`),g=u(`fc6a`),b=u(`06cf`).f,S=u(`83ab`),C=m(function(){b(1)});d({target:`Object`,stat:!0,forced:!S||C,sham:!S},{getOwnPropertyDescriptor:function getOwnPropertyDescriptor(t,c){return b(g(t),c)}})}),e538:(function(t,c,u){c.f=u(`b622`)}),e893:(function(t,c,u){var d=u(`5135`),m=u(`56ef`),g=u(`06cf`),b=u(`9bf2`);t.exports=function(t,c){for(var u=m(c),S=b.f,C=g.f,w=0;w<u.length;w++){var T=u[w];d(t,T)||S(t,T,C(c,T))}}}),e8b5:(function(t,c,u){var d=u(`c6b6`);t.exports=Array.isArray||function isArray(t){return d(t)==`Array`}}),e95a:(function(t,c,u){var d=u(`b622`),m=u(`3f8c`),g=d(`iterator`),b=Array.prototype;t.exports=function(t){return t!==void 0&&(m.Array===t||b[g]===t)}}),f5df:(function(t,c,u){var d=u(`00ee`),m=u(`c6b6`),g=u(`b622`)(`toStringTag`),b=m(function(){return arguments}())==`Arguments`,tryGet=function(t,c){try{return t[c]}catch{}};t.exports=d?m:function(t){var c,u,d;return t===void 0?`Undefined`:t===null?`Null`:typeof(u=tryGet(c=Object(t),g))==`string`?u:b?m(c):(d=m(c))==`Object`&&typeof c.callee==`function`?`Arguments`:d}}),f772:(function(t,c,u){var d=u(`5692`),m=u(`90e3`),g=d(`keys`);t.exports=function(t){return g[t]||(g[t]=m(t))}}),fb15:(function(t,c,u){"use strict";if(u.r(c),typeof window<`u`){var d=window.document.currentScript,m=u(`8875`);d=m(),`currentScript`in document||Object.defineProperty(document,`currentScript`,{get:m});var g=d&&d.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);g&&(u.p=g[1])}u(`99af`),u(`4de4`),u(`4160`),u(`c975`),u(`d81d`),u(`a434`),u(`159b`),u(`a4d3`),u(`e439`),u(`dbb4`),u(`b64b`);function _defineProperty(t,c,u){return c in t?Object.defineProperty(t,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):t[c]=u,t}function ownKeys(t,c){var u=Object.keys(t);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(t);c&&(d=d.filter(function(c){return Object.getOwnPropertyDescriptor(t,c).enumerable})),u.push.apply(u,d)}return u}function _objectSpread2(t){for(var c=1;c<arguments.length;c++){var u=arguments[c]==null?{}:arguments[c];c%2?ownKeys(Object(u),!0).forEach(function(c){_defineProperty(t,c,u[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(u)):ownKeys(Object(u)).forEach(function(c){Object.defineProperty(t,c,Object.getOwnPropertyDescriptor(u,c))})}return t}function _arrayWithHoles(t){if(Array.isArray(t))return t}u(`e01a`),u(`d28b`),u(`e260`),u(`d3b7`),u(`3ca3`),u(`ddb0`);function _iterableToArrayLimit(t,c){if(!(typeof Symbol>`u`||!(Symbol.iterator in Object(t)))){var u=[],d=!0,m=!1,g=void 0;try{for(var b=t[Symbol.iterator](),S;!(d=(S=b.next()).done)&&(u.push(S.value),!(c&&u.length===c));d=!0);}catch(t){m=!0,g=t}finally{try{!d&&b.return!=null&&b.return()}finally{if(m)throw g}}return u}}u(`a630`),u(`fb6a`),u(`b0c0`),u(`25f0`);function _arrayLikeToArray(t,c){(c==null||c>t.length)&&(c=t.length);for(var u=0,d=Array(c);u<c;u++)d[u]=t[u];return d}function _unsupportedIterableToArray(t,c){if(t){if(typeof t==`string`)return _arrayLikeToArray(t,c);var u=Object.prototype.toString.call(t).slice(8,-1);if(u===`Object`&&t.constructor&&(u=t.constructor.name),u===`Map`||u===`Set`)return Array.from(t);if(u===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return _arrayLikeToArray(t,c)}}function _nonIterableRest(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
471
474
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _slicedToArray(t,c){return _arrayWithHoles(t)||_iterableToArrayLimit(t,c)||_unsupportedIterableToArray(t,c)||_nonIterableRest()}function _arrayWithoutHoles(t){if(Array.isArray(t))return _arrayLikeToArray(t)}function _iterableToArray(t){if(typeof Symbol<`u`&&Symbol.iterator in Object(t))return Array.from(t)}function _nonIterableSpread(){throw TypeError(`Invalid attempt to spread non-iterable instance.
|
|
472
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}var b=u(`a352`),S=u.n(b);function removeNode(t){t.parentElement!==null&&t.parentElement.removeChild(t)}function insertNodeAt(t,c,u){var d=u===0?t.children[0]:t.children[u-1].nextSibling;t.insertBefore(c,d)}var C=u(`dbf1`);u(`13d5`),u(`4fad`),u(`ac1f`),u(`5319`);function cached(t){var c=Object.create(null);return function cachedFn(u){return c[u]||(c[u]=t(u))}}var w=/-(\w)/g,T=cached(function(t){return t.replace(w,function(t,c){return c.toUpperCase()})});u(`5db7`),u(`73d9`);var E=[`Start`,`Add`,`Remove`,`Update`,`End`],D=[`Choose`,`Unchoose`,`Sort`,`Filter`,`Clone`],O=[`Move`],Or=[O,E,D].flatMap(function(t){return t}).map(function(t){return`on${t}`}),kr={manage:O,manageAndEmit:E,emit:D};function isReadOnly(t){return Or.indexOf(t)!==-1}u(`caad`),u(`2ca0`);var Ar=`a.abbr.address.area.article.aside.audio.b.base.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.data.datalist.dd.del.details.dfn.dialog.div.dl.dt.em.embed.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.link.main.map.mark.math.menu.menuitem.meta.meter.nav.noscript.object.ol.optgroup.option.output.p.param.picture.pre.progress.q.rb.rp.rt.rtc.ruby.s.samp.script.section.select.slot.small.source.span.strong.style.sub.summary.sup.svg.table.tbody.td.template.textarea.tfoot.th.thead.time.title.tr.track.u.ul.var.video.wbr`.split(`.`);function isHtmlTag(t){return Ar.includes(t)}function isTransition(t){return[`transition-group`,`TransitionGroup`].includes(t)}function isHtmlAttribute(t){return[`id`,`class`,`role`,`style`].includes(t)||t.startsWith(`data-`)||t.startsWith(`aria-`)||t.startsWith(`on`)}function project(t){return t.reduce(function(t,c){var u=_slicedToArray(c,2),d=u[0];return t[d]=u[1],t},{})}function getComponentAttributes(t){var c=t.$attrs,u=t.componentData,d=u===void 0?{}:u;return _objectSpread2(_objectSpread2({},project(Object.entries(c).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],isHtmlAttribute(u)}))),d)}function createSortableOption(t){var c=t.$attrs,u=t.callBackBuilder,d=project(getValidSortableEntries(c));Object.entries(u).forEach(function(t){var c=_slicedToArray(t,2),u=c[0],m=c[1];kr[u].forEach(function(t){d[`on${t}`]=m(t)})});var m=`[data-draggable]${d.draggable||``}`;return _objectSpread2(_objectSpread2({},d),{},{draggable:m})}function getValidSortableEntries(t){return Object.entries(t).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],!isHtmlAttribute(u)}).map(function(t){var c=_slicedToArray(t,2),u=c[0],d=c[1];return[T(u),d]}).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],!isReadOnly(u)})}u(`c740`);function _classCallCheck(t,c){if(!(t instanceof c))throw TypeError(`Cannot call a class as a function`)}function _defineProperties(t,c){for(var u=0;u<c.length;u++){var d=c[u];d.enumerable=d.enumerable||!1,d.configurable=!0,`value`in d&&(d.writable=!0),Object.defineProperty(t,d.key,d)}}function _createClass(t,c,u){return c&&_defineProperties(t.prototype,c),u&&_defineProperties(t,u),t}var jr=function getHtmlElementFromNode(t){return t.el},Mr=function addContext(t,c){return t.__draggable_context=c},Nr=function getContext(t){return t.__draggable_context},Pr=function(){function ComponentStructure(t){var c=t.nodes,u=c.header,d=c.default,m=c.footer,g=t.root,b=t.realList;_classCallCheck(this,ComponentStructure),this.defaultNodes=d,this.children=[].concat(_toConsumableArray(u),_toConsumableArray(d),_toConsumableArray(m)),this.externalComponent=g.externalComponent,this.rootTransition=g.transition,this.tag=g.tag,this.realList=b}return _createClass(ComponentStructure,[{key:`render`,value:function render(t,c){var u=this.tag,d=this.children;return t(u,c,this._isRootComponent?{default:function _default(){return d}}:d)}},{key:`updated`,value:function updated(){var t=this.defaultNodes,c=this.realList;t.forEach(function(t,u){Mr(jr(t),{element:c[u],index:u})})}},{key:`getUnderlyingVm`,value:function getUnderlyingVm(t){return Nr(t)}},{key:`getVmIndexFromDomIndex`,value:function getVmIndexFromDomIndex(t,c){var u=this.defaultNodes,d=u.length,m=c.children,g=m.item(t);if(g===null)return d;var b=Nr(g);if(b)return b.index;if(d===0)return 0;var S=jr(u[0]);return t<_toConsumableArray(m).findIndex(function(t){return t===S})?0:d}},{key:`_isRootComponent`,get:function get(){return this.externalComponent||this.rootTransition}}]),ComponentStructure}(),Fr=u(`8bbf`);function getSlot(t,c){var u=t[c];return u?u():[]}function computeNodes(t){var c=t.$slots,u=t.realList,d=t.getKey,m=u||[],g=_slicedToArray([`header`,`footer`].map(function(t){return getSlot(c,t)}),2),b=g[0],S=g[1],C=c.item;if(!C)throw Error(`draggable element must have an item slot`);var w=m.flatMap(function(t,c){return C({element:t,index:c}).map(function(c){return c.key=d(t),c.props=_objectSpread2(_objectSpread2({},c.props||{}),{},{"data-draggable":!0}),c})});if(w.length!==m.length)throw Error(`Item slot must have only one child`);return{header:b,footer:S,default:w}}function getRootInformation(t){var c=isTransition(t),u=!isHtmlTag(t)&&!c;return{transition:c,externalComponent:u,tag:u?(0,Fr.resolveComponent)(t):c?Fr.TransitionGroup:t}}function computeComponentStructure(t){var c=t.$slots,u=t.tag,d=t.realList,m=t.getKey;return new Pr({nodes:computeNodes({$slots:c,realList:d,getKey:m}),root:getRootInformation(u),realList:d})}function _emit(t,c){var u=this;(0,Fr.nextTick)(function(){return u.$emit(t.toLowerCase(),c)})}function _manage(t){var c=this;return function(u,d){if(c.realList!==null)return c[`onDrag${t}`](u,d)}}function _manageAndEmit(t){var c=this,u=_manage.call(this,t);return function(d,m){u.call(c,d,m),_emit.call(c,t,d)}}var Ir=null,Lr={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:function _default(t){return t}},tag:{type:String,default:`div`},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},Rr=[`update:modelValue`,`change`].concat(_toConsumableArray([].concat(_toConsumableArray(kr.manageAndEmit),_toConsumableArray(kr.emit)).map(function(t){return t.toLowerCase()})));c.default=(0,Fr.defineComponent)({name:`draggable`,inheritAttrs:!1,props:Lr,emits:Rr,data:function data(){return{error:!1}},render:function render(){try{this.error=!1;var t=this.$slots,c=this.$attrs,u=this.tag,d=this.componentData,m=this.realList,g=this.getKey,b=computeComponentStructure({$slots:t,tag:u,realList:m,getKey:g});this.componentStructure=b;var S=getComponentAttributes({$attrs:c,componentData:d});return b.render(Fr.h,S)}catch(t){return this.error=!0,(0,Fr.h)(`pre`,{style:{color:`red`}},t.stack)}},created:function created(){this.list!==null&&this.modelValue!==null&&C.a.error(`modelValue and list props are mutually exclusive! Please set one or another.`)},mounted:function mounted(){var t=this;if(!this.error){var c=this.$attrs,u=this.$el;this.componentStructure.updated();var d=createSortableOption({$attrs:c,callBackBuilder:{manageAndEmit:function manageAndEmit(c){return _manageAndEmit.call(t,c)},emit:function emit(c){return _emit.bind(t,c)},manage:function manage(c){return _manage.call(t,c)}}}),m=u.nodeType===1?u:u.parentElement;this._sortable=new S.a(m,d),this.targetDomElement=m,m.__draggable_component__=this}},updated:function updated(){this.componentStructure.updated()},beforeUnmount:function beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList:function realList(){return this.list||this.modelValue},getKey:function getKey(){var t=this.itemKey;return typeof t==`function`?t:function(c){return c[t]}}},watch:{$attrs:{handler:function handler(t){var c=this._sortable;c&&getValidSortableEntries(t).forEach(function(t){var u=_slicedToArray(t,2),d=u[0],m=u[1];c.option(d,m)})},deep:!0}},methods:{getUnderlyingVm:function getUnderlyingVm(t){return this.componentStructure.getUnderlyingVm(t)||null},getUnderlyingPotencialDraggableComponent:function getUnderlyingPotencialDraggableComponent(t){return t.__draggable_component__},emitChanges:function emitChanges(t){var c=this;(0,Fr.nextTick)(function(){return c.$emit(`change`,t)})},alterList:function alterList(t){if(this.list){t(this.list);return}var c=_toConsumableArray(this.modelValue);t(c),this.$emit(`update:modelValue`,c)},spliceList:function spliceList(){var t=arguments;this.alterList(function spliceList(c){return c.splice.apply(c,_toConsumableArray(t))})},updatePosition:function updatePosition(t,c){this.alterList(function updatePosition(u){return u.splice(c,0,u.splice(t,1)[0])})},getRelatedContextFromMoveEvent:function getRelatedContextFromMoveEvent(t){var c=t.to,u=t.related,d=this.getUnderlyingPotencialDraggableComponent(c);if(!d)return{component:d};var m=d.realList,g={list:m,component:d};return c!==u&&m?_objectSpread2(_objectSpread2({},d.getUnderlyingVm(u)||{}),g):g},getVmIndexFromDomIndex:function getVmIndexFromDomIndex(t){return this.componentStructure.getVmIndexFromDomIndex(t,this.targetDomElement)},onDragStart:function onDragStart(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),Ir=t.item},onDragAdd:function onDragAdd(t){var c=t.item._underlying_vm_;if(c!==void 0){removeNode(t.item);var u=this.getVmIndexFromDomIndex(t.newIndex);this.spliceList(u,0,c);var d={element:c,newIndex:u};this.emitChanges({added:d})}},onDragRemove:function onDragRemove(t){if(insertNodeAt(this.$el,t.item,t.oldIndex),t.pullMode===`clone`){removeNode(t.clone);return}var c=this.context,u=c.index,d=c.element;this.spliceList(u,1);var m={element:d,oldIndex:u};this.emitChanges({removed:m})},onDragUpdate:function onDragUpdate(t){removeNode(t.item),insertNodeAt(t.from,t.item,t.oldIndex);var c=this.context.index,u=this.getVmIndexFromDomIndex(t.newIndex);this.updatePosition(c,u);var d={element:this.context.element,oldIndex:c,newIndex:u};this.emitChanges({moved:d})},computeFutureIndex:function computeFutureIndex(t,c){if(!t.element)return 0;var u=_toConsumableArray(c.to.children).filter(function(t){return t.style.display!==`none`}),d=u.indexOf(c.related),m=t.component.getVmIndexFromDomIndex(d);return u.indexOf(Ir)!==-1||!c.willInsertAfter?m:m+1},onDragMove:function onDragMove(t,c){var u=this.move,d=this.realList;if(!u||!d)return!0;var m=this.getRelatedContextFromMoveEvent(t),g=this.computeFutureIndex(m,t),b=_objectSpread2(_objectSpread2({},this.context),{},{futureIndex:g});return u(_objectSpread2(_objectSpread2({},t),{},{relatedContext:m,draggedContext:b}),c)},onDragEnd:function onDragEnd(){Ir=null}}})}),fb6a:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`861d`),g=u(`e8b5`),b=u(`23cb`),S=u(`50c4`),C=u(`fc6a`),w=u(`8418`),T=u(`b622`),E=u(`1dde`),D=u(`ae40`),O=E(`slice`),Or=D(`slice`,{ACCESSORS:!0,0:0,1:2}),kr=T(`species`),Ar=[].slice,jr=Math.max;d({target:`Array`,proto:!0,forced:!O||!Or},{slice:function slice(t,c){var u=C(this),d=S(u.length),T=b(t,d),E=b(c===void 0?d:c,d),D,O,Or;if(g(u)&&(D=u.constructor,typeof D==`function`&&(D===Array||g(D.prototype))?D=void 0:m(D)&&(D=D[kr],D===null&&(D=void 0)),D===Array||D===void 0))return Ar.call(u,T,E);for(O=new(D===void 0?Array:D)(jr(E-T,0)),Or=0;T<E;T++,Or++)T in u&&w(O,Or,u[T]);return O.length=Or,O}})}),fc6a:(function(t,c,u){var d=u(`44ad`),m=u(`1d80`);t.exports=function(t){return d(m(t))}}),fdbc:(function(t,c){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}}),fdbf:(function(t,c,u){t.exports=u(`4930`)&&!Symbol.sham&&typeof Symbol.iterator==`symbol`})}).default})}));function K$2(t,c,u,d,m,g){return u.scope.edit?withDirectives((openBlock(),createElementBlock(`input`,{key:0,"onUpdate:modelValue":c[0]||(c[0]=t=>u.scope.element.text=t),maxlength:u.scope.maxlength,type:`text`,class:`ti-tag-input`,size:`1`,onInput:c[1]||(c[1]=t=>u.scope.validateTag(u.scope.index,t)),onBlur:c[2]||(c[2]=t=>u.scope.performCancelEdit(u.scope.index)),onKeydown:c[3]||(c[3]=t=>u.scope.performSaveEdit(u.scope.index,t))},null,40,R$1)),[[vModelText,u.scope.element.text]]):createCommentVNode(``,!0)}function L$1(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,`default`)?t.default:t}function ke$2(t,c,u,d,m,g){let b=resolveComponent(`tag-input`),S=resolveComponent(`draggable`);return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vue-tags-input`,[{"ti-disabled":t.disabled},{"ti-focus":t.focused},t.$attrs.class]]),style:normalizeStyle(t.$attrs.style)},[createBaseVNode(`div`,X$2,[t.isDraggable?(openBlock(),createBlock(S,{key:0,modelValue:t.tagsCopy,"onUpdate:modelValue":c[9]||(c[9]=c=>t.tagsCopy=c),group:`tags`,class:`ti-tags`,tag:`ul`,draggable:`.item`,handle:t.draggableHandle?`.handle`:``,"ghost-class":`ghost-tag`,"drag-class":`drag-tag`,"item-key":t.getTagIndex,onStart:c[10]||(c[10]=c=>t.drag=!0),onEnd:c[11]||(c[11]=c=>{t.drag=!1,t.tagOrderChanged()})},{item:withCtx(({element:c,index:u})=>[(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[{"ti-editing":t.tagsEditStatus[u]},c.tiClasses,c.classes,{"ti-deletion-mark":t.isMarked(u)}],`ti-tag item`]),tabindex:`0`,onClick:d=>t.$emit(`tag-clicked`,{element:c,index:u})},[createBaseVNode(`div`,Z$3,[t.draggableHandle?(openBlock(),createElementBlock(`span`,_,`::`)):createCommentVNode(``,!0),t.$slots[`tag-left`]?(openBlock(),createElementBlock(`div`,x,[renderSlot(t.$slots,`tag-left`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0),createBaseVNode(`div`,{ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass({"ti-hidden":t.tagsEditStatus[u]}),onClick:c=>t.performEditTag(u)},toDisplayString(c.text),11,ee)),t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:1,scope:{edit:t.tagsEditStatus[u],maxlength:t.maxlength,element:c,index:u,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),renderSlot(t.$slots,`tag-center`,{tag:c,index:u,maxlength:t.maxlength,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)],512),t.$slots[`tag-right`]?(openBlock(),createElementBlock(`div`,te$1,[renderSlot(t.$slots,`tag-right`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0)]),createBaseVNode(`div`,se$2,[t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:0,class:`ti-icon-undo`,onClick:c=>t.cancelEdit(u)},null,8,ae$2)),[[vShow,t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:1,class:`ti-icon-close`,onClick:c=>t.performDeleteTag(u)},null,8,ie$2)),[[vShow,!t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?renderSlot(t.$slots,`tag-actions`,{key:2,tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0):createCommentVNode(``,!0)])],14,Y$2))]),footer:withCtx(()=>[createBaseVNode(`li`,re$2,[createBaseVNode(`input`,mergeProps({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[c[0]||(c[0]=c=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,c)),c[2]||(c[2]=withKeys((...c)=>t.invokeDelete&&t.invokeDelete(...c),[`delete`])),c[3]||(c[3]=withKeys((...c)=>t.performBlur&&t.performBlur(...c),[`tab`])),c[4]||(c[4]=withKeys(c=>t.selectItem(c,`before`),[`up`])),c[5]||(c[5]=withKeys(c=>t.selectItem(c,`after`),[`down`]))],onPaste:c[1]||(c[1]=(...c)=>t.addTagsFromPaste&&t.addTagsFromPaste(...c)),onInput:c[6]||(c[6]=(...c)=>t.updateNewTag&&t.updateNewTag(...c)),onFocus:c[7]||(c[7]=c=>t.focused=!0),onClick:c[8]||(c[8]=c=>t.performClick(c))}),null,16,oe$2)])]),_:3},8,[`modelValue`,`handle`,`item-key`])):(openBlock(),createElementBlock(`ul`,le$2,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tagsCopy,(c,u)=>(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[{"ti-editing":t.tagsEditStatus[u]},c.tiClasses,c.classes,{"ti-deletion-mark":t.isMarked(u)}],`ti-tag item`]),tabindex:`0`,onClick:d=>t.$emit(`tag-clicked`,{element:c,index:u})},[createBaseVNode(`div`,de$1,[t.$slots[`tag-left`]?(openBlock(),createElementBlock(`div`,ue$1,[renderSlot(t.$slots,`tag-left`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0),createBaseVNode(`div`,{ref_for:!0,ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass({"ti-hidden":t.tagsEditStatus[u]}),onClick:c=>t.performEditTag(u)},toDisplayString(c.text),11,ge$1)),t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:1,scope:{edit:t.tagsEditStatus[u],maxlength:t.maxlength,element:c,index:u,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),renderSlot(t.$slots,`tag-center`,{tag:c,index:u,maxlength:t.maxlength,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)],512),t.$slots[`tag-right`]?(openBlock(),createElementBlock(`div`,pe$2,[renderSlot(t.$slots,`tag-right`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0)]),createBaseVNode(`div`,fe$1,[t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:0,class:`ti-icon-undo`,onClick:c=>t.cancelEdit(u)},null,8,me$1)),[[vShow,t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:1,class:`ti-icon-close`,onClick:c=>t.performDeleteTag(u)},null,8,he$1)),[[vShow,!t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?renderSlot(t.$slots,`tag-actions`,{key:2,tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0):createCommentVNode(``,!0)])],14,ne$2))),128)),createBaseVNode(`li`,ce$2,[createBaseVNode(`input`,mergeProps({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[c[12]||(c[12]=c=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,c)),c[14]||(c[14]=withKeys((...c)=>t.invokeDelete&&t.invokeDelete(...c),[`delete`])),c[15]||(c[15]=withKeys((...c)=>t.performBlur&&t.performBlur(...c),[`tab`])),c[16]||(c[16]=withKeys(c=>t.selectItem(c,`before`),[`up`])),c[17]||(c[17]=withKeys(c=>t.selectItem(c,`after`),[`down`]))],onPaste:c[13]||(c[13]=(...c)=>t.addTagsFromPaste&&t.addTagsFromPaste(...c)),onInput:c[18]||(c[18]=(...c)=>t.updateNewTag&&t.updateNewTag(...c)),onFocus:c[19]||(c[19]=c=>t.focused=!0),onClick:c[20]||(c[20]=c=>t.performClick(c))}),null,16,ye$1)])]))]),renderSlot(t.$slots,`between-elements`,{},void 0,!0),t.autocompleteOpen?(openBlock(),createElementBlock(`div`,{key:0,class:`ti-autocomplete`,onMouseout:c[21]||(c[21]=c=>t.selectedItem=null)},[renderSlot(t.$slots,`autocomplete-header`,{},void 0,!0),createBaseVNode(`ul`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.filteredAutocompleteItems,(c,u)=>(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[c.tiClasses,c.classes,{"ti-selected-item":t.isSelected(u)}],`ti-item`]),onMouseover:c=>t.disabled?!1:t.selectedItem=u},[t.$slots[`autocomplete-item`]?renderSlot(t.$slots,`autocomplete-item`,{key:1,item:c,index:u,performAdd:c=>t.performAddTags(c,void 0,`autocomplete`),selected:t.isSelected(u)},void 0,!0):(openBlock(),createElementBlock(`div`,{key:0,onClick:u=>t.performAddTags(c,void 0,`autocomplete`)},toDisplayString(c.text),9,ve$1))],46,Te$1))),128))]),renderSlot(t.$slots,`autocomplete-footer`,{},void 0,!0)],32)):createCommentVNode(``,!0)],6)}var import_vuedraggable_umd,B$1,N$2,R$1,q$2,M$2,F$2,z$1,H$1,J$2,y,W$2,V$1,v,G$2,Q$2,X$2,Y$2,Z$3,_,x,ee,te$1,se$2,ae$2,ie$2,re$2,oe$2,le$2,ne$2,de$1,ue$1,ge$1,pe$2,fe$1,me$1,he$1,ce$2,ye$1,Te$1,ve$1,$$3,init_vue_tags_input=__esmMin((()=>{init_style(),init_vue_runtime_esm_bundler(),import_vuedraggable_umd=__toESM$2(require_vuedraggable_umd(),1),B$1=__name$2((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`B`),N$2={name:`TagInput`,props:{scope:{type:Object,required:!0}}},R$1=[`maxlength`],__name$2(K$2,`K`),q$2=B$1(N$2,[[`render`,K$2],[`__scopeId`,`data-v-a3408643`]]),M$2=__name$2(t=>!t.some(t=>{let c=!t.text;c&&console.warn(`Missing property "text"`,t);let u=!1;return t.classes&&(u=typeof t.classes!=`string`),u&&console.warn(`Property "classes" must be type of string`,t),c||u}),`M`),F$2=__name$2(t=>!t.some(t=>{if(typeof t==`number`){let c=isFinite(t)&&Math.floor(t)===t;return c||console.warn(`Only numerics are allowed for this prop. Found:`,t),!c}else if(typeof t==`string`){let c=/\W|[a-z]|!\d/i.test(t);return c||console.warn(`Only alpha strings are allowed for this prop. Found:`,t),!c}else return console.warn(`Only numeric and string values are allowed. Found:`,t),!1}),`F`),z$1={modelValue:{type:String,default:``,required:!0},tags:{type:Array,default:()=>[],validator:M$2},autocompleteItems:{type:Array,default:()=>[],validator:M$2},allowEditTags:{type:Boolean,default:!1},autocompleteFilterDuplicates:{default:!0,type:Boolean},addOnlyFromAutocomplete:{type:Boolean,default:!1},autocompleteMinLength:{type:Number,default:1},autocompleteAlwaysOpen:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:`Add Tag`},addOnKey:{type:Array,default:()=>[13],validator:F$2},saveOnKey:{type:Array,default:()=>[13],validator:F$2},maxTags:{type:Number},maxlength:{type:Number},validation:{type:Array,default:()=>[],validator(t){return!t.some(t=>{let c=!t.rule;c&&console.warn(`Property "rule" is missing`,t);let u=t.rule&&(typeof t.rule==`string`||t.rule instanceof RegExp||{}.toString.call(t.rule)===`[object Function]`);u||console.warn(`A rule must be type of string, RegExp or function. Found:`,JSON.stringify(t.rule));let d=!t.classes;d&&console.warn(`Property "classes" is missing`,t);let m=t.type&&typeof t.type!=`string`;return m&&console.warn(`Property "type" must be type of string. Found:`,t),!u||c||d||m})}},separators:{type:Array,default:()=>[`;`],validator(t){return!t.some(t=>{let c=typeof t!=`string`;return c&&console.warn(`Separators must be type of string. Found:`,t),c})}},avoidAddingDuplicates:{type:Boolean,default:!0},addOnBlur:{type:Boolean,default:!0},isDuplicate:{type:Function,default:null},addFromPaste:{type:Boolean,default:!0},deleteOnBackspace:{default:!0,type:Boolean},isDraggable:{type:Boolean,default:!1},draggableHandle:{type:Boolean,default:!1},onBeforeAddingTag:Function,onBeforeDeletingTag:Function,onBeforeEditingTag:Function,onBeforeSavingTag:Function},__name$2(L$1,`L`),H$1=L$1(function e(t,c){if(t===c)return!0;if(t&&c&&typeof t==`object`&&typeof c==`object`){if(t.constructor!==c.constructor)return!1;var u,d,m;if(Array.isArray(t)){if(u=t.length,u!=c.length)return!1;for(d=u;d--!==0;)if(!e(t[d],c[d]))return!1;return!0}if(t.constructor===RegExp)return t.source===c.source&&t.flags===c.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===c.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===c.toString();if(m=Object.keys(t),u=m.length,u!==Object.keys(c).length)return!1;for(d=u;d--!==0;)if(!Object.prototype.hasOwnProperty.call(c,m[d]))return!1;for(d=u;d--!==0;){var g=m[d];if(!e(t[g],c[g]))return!1}return!0}return t!==t&&c!==c}),J$2=__name$2((t,c)=>c.filter(c=>{let{text:u}=t;return typeof c.rule==`string`?!new RegExp(c.rule).test(u):c.rule instanceof RegExp?!c.rule.test(u):{}.toString.call(c.rule)===`[object Function]`?c.rule(t):!1}).map(t=>t.classes),`J`),y=t=>JSON.parse(JSON.stringify(t)),W$2=__name$2((t,c)=>{let u=0;for(;u<t.length;){if(c(t[u],u,t))return u;u++}return-1},`W`),V$1=__name$2((t,c,u=[],d)=>{t.text===void 0&&(t={text:t});let m=J$2(t,u),g=W$2(c,c=>c===t),b=y(c),S=g===-1?y(t):b.splice(g,1)[0];return(d?d(b,S):b.map(t=>t.text).indexOf(S.text)!==-1)&&m.push(`ti-duplicate`),m.length===0?m.push(`ti-valid`):m.push(`ti-invalid`),m},`V`),v=(t,...c)=>{t.text===void 0&&(t={text:t});let u=y(t);return u.tiClasses=V$1(t,...c),u},G$2=__name$2((t,...c)=>t.map(u=>v(u,t,...c)),`G`),Q$2={name:`VueTagsInput`,components:{TagInput:q$2,draggable:import_vuedraggable_umd.default},props:z$1,emits:[`adding-duplicate`,`before-adding-tag`,`before-deleting-tag`,`before-editing-tag`,`before-saving-tag`,`max-tags-reached`,`saving-duplicate`,`tags-changed`,`tag-clicked`,`update:modelValue`,`update:tags`,`tag-order-changed`,`click`],inheritAttrs:!1,data(){return{tagCenter:[],newTag:null,tagsCopy:[],tagsEditStatus:null,deletionMark:null,deletionMarkTime:null,selectedItem:null,focused:null}},computed:{autocompleteOpen(){return this.autocompleteAlwaysOpen?!0:this.newTag!==null&&this.newTag.length>=this.autocompleteMinLength&&this.filteredAutocompleteItems.length>0&&this.focused},filteredAutocompleteItems(){let t=this.autocompleteItems.map(t=>v(t,this.tags,this.validation,this.isDuplicate));return this.autocompleteFilterDuplicates?t.filter(this.duplicateFilter):t}},methods:{createClasses:V$1,getSelectedIndex(t){let c=this.filteredAutocompleteItems,u=this.selectedItem,d=c.length-1;if(c.length!==0)return u===null?0:t===`before`&&u===0?d:t===`after`&&u===d?0:t===`after`?u+1:u-1},selectDefaultItem(){this.addOnlyFromAutocomplete&&this.filteredAutocompleteItems.length>0?this.selectedItem=0:this.selectedItem=null},selectItem(t,c){t.preventDefault(),this.selectedItem=this.getSelectedIndex(c)},isSelected(t){return this.selectedItem===t},isMarked(t){return this.deletionMark===t},setTagCenter(t){t&&this.tagCenter.push(t)},invokeDelete(){if(!this.deleteOnBackspace||this.newTag.length>0)return;let t=this.tagsCopy.length-1;this.deletionMark===null?(this.deletionMarkTime=setTimeout(()=>{this.deletionMark=null},1e3),this.deletionMark=t):this.performDeleteTag(t)},addTagsFromPaste(){this.addFromPaste&&setTimeout(()=>this.performAddTags(this.newTag),10)},performEditTag(t){this.allowEditTags&&(this.onBeforeAddingTag||this.editTag(t),this.$emit(`before-editing-tag`,{index:t,tag:this.tagsCopy[t],editTag:()=>this.editTag(t)}))},editTag(t){this.allowEditTags&&(this.toggleEditMode(t),this.focus(t))},toggleEditMode(t){!this.allowEditTags||this.disabled||(this.tagsEditStatus[t]=!this.tagsEditStatus[t])},createChangedTag(t,c){let u=this.tagsCopy[t];u.text=c?c.target.value:this.tagsCopy[t].text,this.tagsCopy[t]=v(u,this.tagsCopy,this.validation,this.isDuplicate)},focus(t){this.$nextTick(()=>{let c=this.tagCenter[t].querySelector(`input.ti-tag-input`);c&&c.focus()})},quote(t){return t.replace(/([()[{*+.$^\\|?])/g,`\\$1`)},cancelEdit(t){this.tags[t]&&(this.tagsCopy[t]=y(v(this.tags[t],this.tags,this.validation,this.isDuplicate)),this.tagsEditStatus[t]=!1)},hasForbiddingAddRule(t){return t.some(t=>{let c=this.validation.find(c=>t===c.classes);return c?c.disableAdd:!1})},createTagTexts(t){let c=new RegExp(this.separators.map(t=>this.quote(t)).join(`|`));return t.split(c).map(t=>({text:t}))},performDeleteTag(t){this.onBeforeDeletingTag||this.deleteTag(t),this.$emit(`before-deleting-tag`,{index:t,tag:this.tagsCopy[t],deleteTag:()=>this.deleteTag(t)})},deleteTag(t){this.disabled||(this.deletionMark=null,clearTimeout(this.deletionMarkTime),this.tagsCopy.splice(t,1),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},noTriggerKey(t,c){let u=this[c].indexOf(t.keyCode)!==-1||this[c].indexOf(t.key)!==-1;return u&&t.preventDefault(),!u},performAddTags(t,c,u){if(this.disabled||c&&this.noTriggerKey(c,`addOnKey`))return;let d=[];typeof t==`object`&&(d=[t]),typeof t==`string`&&(d=this.createTagTexts(t)),d=d.filter(t=>t.text.trim().length>0),d.forEach(t=>{t=v(t,this.tags,this.validation,this.isDuplicate),this.onBeforeAddingTag||this.addTag(t,u),this.$emit(`before-adding-tag`,{tag:t,addTag:()=>this.addTag(t,u)})})},duplicateFilter(t){return this.isDuplicate?!this.isDuplicate(this.tagsCopy,t):!this.tagsCopy.find(c=>c.text===t.text)},addTag(t,c=`new-tag-input`){let u=this.filteredAutocompleteItems.map(t=>t.text);this.addOnlyFromAutocomplete&&u.indexOf(t.text)===-1||this.$nextTick(()=>{if(this.maxTags&&this.maxTags<=this.tagsCopy.length)return this.$emit(`max-tags-reached`,t);if(this.avoidAddingDuplicates&&!this.duplicateFilter(t))return this.$emit(`adding-duplicate`,t);this.hasForbiddingAddRule(t.tiClasses)||(this.newTag=``,this.tagsCopy.push(t),this.$emit(`update:tags`,this.tagsCopy),c===`autocomplete`&&this.$refs.newTagInput.focus(),this.$emit(`tags-changed`,this.tagsCopy))})},performSaveTag(t,c){let u=this.tagsCopy[t];this.disabled||c&&this.noTriggerKey(c,`addOnKey`)||u.text.trim().length!==0&&(this[`on-before-saving-tag`]||this.saveTag(t,u),this.$emit(`before-saving-tag`,{index:t,tag:u,saveTag:()=>this.saveTag(t,u)}))},saveTag(t,c){if(this.avoidAddingDuplicates){let u=y(this.tagsCopy),d=u.splice(t,1)[0];if(this.isDuplicate?this.isDuplicate(u,d):u.map(t=>t.text).indexOf(d.text)!==-1)return this.$emit(`saving-duplicate`,c)}this.hasForbiddingAddRule(c.tiClasses)||(this.tagsCopy[t]=c,this.toggleEditMode(t),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},tagsEqual(){return!this.tagsCopy.some((t,c)=>!H$1(t,this.tags[c]))},updateNewTag(t){let c=t.target.value;this.newTag=c,this.$emit(`update:modelValue`,c)},initTags(){this.tagsCopy=G$2(this.tags,this.validation,this.isDuplicate),this.tagsEditStatus=y(this.tags).map(()=>!1),this.tagsEqual()||this.$emit(`update:tags`,this.tagsCopy)},blurredOnClick(t){this.$el.contains(t.target)||this.$el.contains(document.activeElement)||this.performBlur(t)},performBlur(){this.addOnBlur&&this.focused&&this.performAddTags(this.newTag),this.focused=!1},tagOrderChanged(){this.$emit(`tag-order-changed`,this.tagsCopy)},performClick(t){if(this.addOnlyFromAutocomplete)return this.$emit(`click`,t),!1;this.selectedItem=null,this.$emit(`click`,t)},getTagIndex(t){return this.tagsCopy.findIndex(c=>c.text===t.text)}},watch:{modelValue(t){this.addOnlyFromAutocomplete||(this.selectedItem=null),this.newTag=t},tags:{handler(){this.initTags()},deep:!0},autocompleteOpen:`selectDefaultItem`},created(){this.newTag=this.modelValue,this.initTags()},mounted(){this.selectDefaultItem(),document.addEventListener(`click`,this.blurredOnClick)},beforeUpdate(){this.tagCenter=[]},unmounted(){document.removeEventListener(`click`,this.blurredOnClick)}},X$2={class:`ti-input`},Y$2=[`onClick`],Z$3={class:`ti-content`},_={key:0,class:`handle`},x={key:1,class:`ti-tag-left`},ee=[`onClick`],te$1={key:2,class:`ti-tag-right`},se$2={class:`ti-actions`},ae$2=[`onClick`],ie$2=[`onClick`],re$2={class:`ti-new-tag-input-wrapper`},oe$2=[`placeholder`,`value`,`maxlength`,`disabled`],le$2={key:1,class:`ti-tags`},ne$2=[`onClick`],de$1={class:`ti-content`},ue$1={key:0,class:`ti-tag-left`},ge$1=[`onClick`],pe$2={key:1,class:`ti-tag-right`},fe$1={class:`ti-actions`},me$1=[`onClick`],he$1=[`onClick`],ce$2={class:`ti-new-tag-input-wrapper`},ye$1=[`placeholder`,`value`,`maxlength`,`disabled`],Te$1=[`onMouseover`],ve$1=[`onClick`],__name$2(ke$2,`ke`),$$3=B$1(Q$2,[[`render`,ke$2],[`__scopeId`,`data-v-63864685`]]),$$3.install=t=>t.component($$3.name,$$3),typeof window<`u`&&window.Vue&&window.Vue.use($$3)})),common_ui_es_exports=__exportAll$1({AudioAutoPlayer:()=>ut$2,CardBrowser:()=>dr,CardHistoryViewer:()=>at$1,CardLoader:()=>yn,CardSearch:()=>Ke$1,CardSearchResults:()=>Qe$1,CardViewer:()=>Q$1,CodeBlockRenderer:()=>Lt$1,CourseCardBrowser:()=>tr,CourseInformation:()=>cr,CourseTagFilterWidget:()=>vr,Displayable:()=>Displayable,FillInInput:()=>me$2,HeatMap:()=>Ae$1,MarkdownRenderer:()=>yn$1,MdTokenRenderer:()=>gn$1,MultipleChoiceOption:()=>ln,PaginatingToolbar:()=>Ue$1,Question:()=>Question,RadioMultipleChoice:()=>fn,RequestPasswordReset:()=>On,ResetPassword:()=>Hn,SessionControllerDebug:()=>Yt,SkMouseTrap:()=>Ne$1,SkMouseTrapToolTip:()=>Fe$1,SkldrMouseTrap:()=>I$2,SnackbarService:()=>Be$1,StudySession:()=>sn,StudySessionTimer:()=>st$1,TFSelect:()=>hn,TagsInput:()=>qn,UserChip:()=>bn,UserInputNumber:()=>_n,UserInputString:()=>de$2,UserLogin:()=>Cn,UserLoginAndRegistrationContainer:()=>Mn,UserRegistration:()=>Tn,UserTagPreferences:()=>Dr,VerifyEmail:()=>zn,alertUser:()=>Z$2,containsComponent:()=>containsComponent,getCurrentUser:()=>getCurrentUser,getUserStatus:()=>getUserStatus,isComponent:()=>isComponent$2,isDefineComponent:()=>isDefineComponent,isInlineComponent:()=>isInlineComponent,isPasswordValid:()=>isPasswordValid,isQuestionView:()=>isQuestionView,parseComponentSyntax:()=>parseComponentSyntax,parseComponentToken:()=>parseComponentToken,piniaPlugin:()=>oe$3,requestPasswordReset:()=>requestPasswordReset,resetPassword:()=>resetPassword,sendVerificationEmail:()=>sendVerificationEmail,splitByDelimiters:()=>splitByDelimiters,splitParagraphToken:()=>splitParagraphToken,splitTextToken:()=>splitTextToken,useAuthStore:()=>useAuthStore,useCardPreviewModeStore:()=>useCardPreviewModeStore,useConfigStore:()=>useConfigStore,useEntitlements:()=>useEntitlements,useQuestionView:()=>useQuestionView,useViewable:()=>useViewable,validatePassword:()=>validatePassword,verifyEmail:()=>verifyEmail});function _sfc_render$26(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,null,[(openBlock(),createElementBlock(`svg`,{width:t.width,height:t.height},[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.weeks,(u,d)=>(openBlock(),createElementBlock(`g`,{key:d,transform:`translate(${d*(t.cellSize+t.cellMargin)}, 0)`},[(openBlock(!0),createElementBlock(Fragment,null,renderList(u,(u,d)=>(openBlock(),createElementBlock(`rect`,{key:u.date,x:0,y:d*(t.cellSize+t.cellMargin),width:t.cellSize,height:t.cellSize,fill:t.getColor(u.count),onMouseover:c=>t.showTooltip(u,c),onMouseout:c[0]||(c[0]=(...c)=>t.hideTooltip&&t.hideTooltip(...c))},null,40,ke$1))),128))],8,Oe$1))),128))],8,De$1)),t.tooltipData?(openBlock(),createElementBlock(`div`,{key:0,class:`tooltip`,style:normalizeStyle(t.tooltipStyle)},toDisplayString(t.tooltipData.count)+` review`+toDisplayString(t.tooltipData.count===1?``:`s`)+` on `+toDisplayString(t.toDateString(t.tooltipData.date)),5)):createCommentVNode(``,!0)])}function _sfc_render$25(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-toolbar-title`),w=resolveComponent(`v-toolbar`),T=resolveComponent(`v-spacer`),E=resolveComponent(`v-list-item`),D=resolveComponent(`v-list`),O=resolveComponent(`v-card`),Or=resolveComponent(`v-dialog`);return t.display?(openBlock(),createBlock(Or,{key:0,"max-width":`500px`,transition:`dialog-transition`},{activator:withCtx(({props:t})=>[createVNode(S,mergeProps({icon:``,color:`primary`},t),{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-keyboard`)])),_:1})]),_:2},1040)]),default:withCtx(()=>[createVNode(O,null,{default:withCtx(()=>[createVNode(w,{color:`secondary`,dark:``,dense:``},{default:withCtx(()=>[createVNode(C,{class:`text-subtitle-1`},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`Shortcut keys:`)])),_:1})]),_:1}),createVNode(D,{dense:``},{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.commands,t=>(openBlock(),createBlock(E,{key:Array.isArray(t.hotkey)?t.hotkey.join(`,`):t.hotkey,class:`py-1`},{default:withCtx(()=>[createVNode(S,{variant:`outlined`,color:`primary`,class:`text-white`,size:`small`},{default:withCtx(()=>[createTextVNode(toDisplayString(Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey),1)]),_:2},1024),createVNode(T),createBaseVNode(`span`,Me$1,toDisplayString(t.command),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):createCommentVNode(``,!0)}function _sfc_render$24(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,{class:normalizeClass([`sk-mousetrap-tooltip-wrapper`,[t.isControlKeyPressed&&!t.disabled&&t.highlightEffect!==`none`?`sk-mousetrap-highlight-${t.highlightEffect}`:``]]),ref:`wrapperElement`},[renderSlot(t.$slots,`default`,{},void 0,!0),createVNode(Transition,{name:`fade`},{default:withCtx(()=>[t.showTooltip&&t.isControlKeyPressed&&!t.disabled?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`sk-mousetrap-tooltip`,{"sk-mt-tooltip-top":t.position===`top`,"sk-mt-tooltip-bottom":t.position===`bottom`,"sk-mt-tooltip-left":t.position===`left`,"sk-mt-tooltip-right":t.position===`right`}])},toDisplayString(t.formattedHotkey),3)):createCommentVNode(``,!0)]),_:1})],2)}function _sfc_render$23(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-snackbar`);return openBlock(),createElementBlock(`div`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.snacks,u=>(openBlock(),createBlock(C,{key:t.snacks.indexOf(u),modelValue:t.show[t.snacks.indexOf(u)],"onUpdate:modelValue":c=>t.show[t.snacks.indexOf(u)]=c,timeout:u.timeout,location:`bottom right`,color:t.getColor(u)},{default:withCtx(()=>[createBaseVNode(`div`,ze$1,[createBaseVNode(`span`,null,toDisplayString(u.text),1),createVNode(S,{icon:``,variant:`text`,onClick:c[0]||(c[0]=c=>t.close())},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-close`)])),_:1})]),_:1})])]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`timeout`,`color`]))),128))])}function _sfc_render$22(t,c,u,d,m,g){let b=resolveComponent(`v-toolbar-title`),S=resolveComponent(`v-spacer`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-select`),E=resolveComponent(`v-toolbar`);return openBlock(),createBlock(E,{density:`compact`},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(t.title),1),t.subtitle?(openBlock(),createElementBlock(`span`,He$1,toDisplayString(t.subtitle),1)):createCommentVNode(``,!0)]),_:1}),createVNode(S),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:c[0]||(c[0]=c=>t.$emit(`first`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-page-first`)])),_:1})]),_:1},8,[`disabled`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:c[1]||(c[1]=c=>t.$emit(`prev`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-chevron-left`)])),_:1})]),_:1},8,[`disabled`]),createVNode(T,{"model-value":t.page,items:t.pages,class:`pageSelect`,density:`compact`,"hide-details":``,"return-object":!1,variant:`outlined`,"onUpdate:modelValue":c[2]||(c[2]=c=>t.$emit(`set-page`,c))},{selection:withCtx(({item:t})=>[createTextVNode(toDisplayString(t.value),1)]),_:1},8,[`model-value`,`items`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:c[3]||(c[3]=c=>t.$emit(`next`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-chevron-right`)])),_:1})]),_:1},8,[`disabled`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:c[4]||(c[4]=c=>t.$emit(`last`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-page-last`)])),_:1})]),_:1},8,[`disabled`])]),_:1})}function _sfc_render$21(t,c,u,d,m,g){let b=resolveComponent(`v-text-field`);return openBlock(),createElementBlock(`div`,Ge$1,[createVNode(b,{modelValue:t.query,"onUpdate:modelValue":c[0]||(c[0]=c=>t.query=c),label:`Search for cards...`,"append-icon":`mdi-magnify`,"onClick:append":t.search,onKeydown:withKeys(t.search,[`enter`])},null,8,[`modelValue`,`onClick:append`,`onKeydown`])])}function _sfc_render$20(t,c,u,d,m,g){let b=resolveComponent(`v-list-item-title`),S=resolveComponent(`v-list-item-subtitle`),C=resolveComponent(`v-list-item`),w=resolveComponent(`v-list`);return openBlock(),createElementBlock(`div`,Je$1,[t.loading?(openBlock(),createElementBlock(`div`,Ye$1,`Loading...`)):t.error?(openBlock(),createElementBlock(`div`,Xe$1,toDisplayString(t.error),1)):(openBlock(),createElementBlock(`div`,Ze$1,[createVNode(w,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cards,c=>(openBlock(),createBlock(C,{key:c._id,onClick:u=>t.selectCard(c),class:normalizeClass([{"selected-card":c._id===t.selectedCardId},`cursor-pointer`])},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>[createTextVNode(toDisplayString(c._id),1)]),_:2},1024),createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Course: `+toDisplayString(c.courseId),1)]),_:2},1024)]),_:2},1032,[`onClick`,`class`]))),128))]),_:1})]))])}function _sfc_render$19(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-list-item-title`),C=resolveComponent(`v-list-item-subtitle`),w=resolveComponent(`v-list-item-content`),T=resolveComponent(`v-list-item`),E=resolveComponent(`v-card`),D=resolveComponent(`v-data-table`);return openBlock(),createElementBlock(`div`,et$1,[t.userId?(openBlock(),createElementBlock(`h3`,tt$1,`Card History for User: `+toDisplayString(t.userId),1)):createCommentVNode(``,!0),t.loading?(openBlock(),createElementBlock(`div`,nt$1,`Loading...`)):t.error?(openBlock(),createElementBlock(`div`,rt$1,toDisplayString(t.error),1)):t.cardHistory?(openBlock(),createElementBlock(`div`,it$1,[createVNode(E,{class:`mb-4`},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`Summary`)])),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Best Interval: `+toDisplayString(t.cardHistory.bestInterval)+` seconds (`+toDisplayString(t.bestIntervalHumanized)+`)`,1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`The to-date largest interval between successful card reviews.`)])),_:1})]),_:1})]),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Lapses: `+toDisplayString(t.cardHistory.lapses),1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`The number of times that a card has been failed in review.`)])),_:1})]),_:1})]),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Streak: `+toDisplayString(t.cardHistory.streak),1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`The number of consecutive successful impressions on this card.`)])),_:1})]),_:1})]),_:1})]),_:1}),createVNode(D,{headers:t.headers,items:t.history,class:`elevation-1`},null,8,[`headers`,`items`])])):createCommentVNode(``,!0)])}function isDefineComponent(t){return t.__isFragment!==void 0}function validateData(t,c){for(let u=0;u<t.length;u++)t[u].fields.forEach((t,d)=>{console.log(`[Displayable] shape[${u}].field[${d}]:\n ${JSON.stringify(t)}`),c[u][t.name]===void 0&&t.type!==FieldType.MEDIA_UPLOADS&&console.warn(`[Displayable] missing data`)})}async function sendVerificationEmail(t,c,u){try{let d={username:t,email:c};u&&(d.origin=u);let m=await fetch(`${getApiBase()}/auth/send-verification`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(d)});if(!m.ok){let t=await m.text();return console.error(`Send verification email error:`,t),{ok:!1,error:`HTTP ${m.status}: ${m.statusText}`}}return await m.json()}catch(t){return console.error(`Send verification email fetch error:`,t),{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function verifyEmail(t){try{let c=await fetch(`${getApiBase()}/auth/verify`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t})});return c.ok?await c.json():{ok:!1,error:`HTTP ${c.status}: ${c.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function getUserStatus(){try{let t=await fetch(`${getApiBase()}/auth/status`,{method:`GET`,headers:{"Content-Type":`application/json`},credentials:`include`});return t.ok?await t.json():{ok:!1,error:`HTTP ${t.status}: ${t.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function requestPasswordReset(t,c){try{let u={email:t};c&&(u.origin=c);let d=await fetch(`${getApiBase()}/auth/request-reset`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(u)});return d.ok?await d.json():{ok:!1,error:`HTTP ${d.status}: ${d.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function resetPassword(t,c){try{let u=await fetch(`${getApiBase()}/auth/reset-password`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t,newPassword:c})});return u.ok?await u.json():{ok:!1,error:`HTTP ${u.status}: ${u.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}function useEntitlements(t){let c=ref({}),u=ref(!1),d=ref(null),m=computed(()=>{let u=c.value[t];if(!u)return{isActive:!1,isPaid:!1,daysRemaining:null,expiresDate:null};if(u.status===`paid`)return{isActive:!0,isPaid:!0,daysRemaining:null,expiresDate:null};let d=u.expires;if(!d)return{isActive:!0,isPaid:!1,daysRemaining:null,expiresDate:null};let m=new Date(d),g=new Date,b=Math.ceil((m.getTime()-g.getTime())/(1e3*60*60*24));return{isActive:b>0,isPaid:!1,daysRemaining:Math.max(0,b),expiresDate:d}}),g=computed(()=>m.value.isPaid);async function fetchEntitlements(){u.value=!0,d.value=null;try{let t=await getUserStatus();t.ok?c.value=t.entitlements||{}:(d.value=t.error||`Failed to fetch entitlements`,console.error(`[useEntitlements] Error:`,d.value))}catch(t){d.value=t instanceof Error?t.message:`Unknown error`,console.error(`[useEntitlements] Exception:`,t)}finally{u.value=!1}}return{entitlements:c,trialStatus:m,hasPremiumAccess:g,loading:u,error:d,fetchEntitlements}}function _sfc_render$18(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-progress-circular`),w=resolveComponent(`v-tooltip`);return openBlock(),createBlock(w,{location:`right`,"open-delay":0,"close-delay":200,color:`secondary`,class:`text-subtitle-1`},{activator:withCtx(({props:u})=>[createBaseVNode(`div`,mergeProps({class:`timer-container`},u,{onMouseenter:c[0]||(c[0]=c=>t.hovered=!0),onMouseleave:c[1]||(c[1]=c=>t.hovered=!1)}),[createVNode(C,{alt:`Time remaining in study session`,size:`64`,width:`8`,rotate:`0`,color:t.timerColor,"model-value":t.percentageRemaining},{default:withCtx(()=>[t.timeRemaining>0&&t.hovered?(openBlock(),createBlock(S,{key:0,icon:``,color:`transparent`,location:`bottom left`,onClick:t.addSessionTime},{default:withCtx(()=>[createVNode(b,{size:`large`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-plus`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0)]),_:1},8,[`color`,`model-value`])],16)]),default:withCtx(()=>[createTextVNode(` `+toDisplayString(t.formattedTimeRemaining),1)]),_:1})}function _sfc_render$17(t,c,u,d,m,g){let b=resolveComponent(`v-card`);return t.frameless?(openBlock(),createBlock(resolveDynamicComponent(t.view),{ref:`activeView`,key:t.course_id+`-`+t.card_id+`-`+t.sessionOrder,data:t.data,"modify-difficulty":t.user_elo.global.score-t.card_elo,class:`cardView`,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c)),onRequestReplan:c[1]||(c[1]=c=>t.$emit(`requestReplan`,c)),onReadyToAdvance:c[2]||(c[2]=c=>t.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`])):(openBlock(),createBlock(b,{key:1,elevation:`12`},{default:withCtx(()=>[(openBlock(),createBlock(resolveDynamicComponent(t.view),{ref:`activeView`,key:t.course_id+`-`+t.card_id+`-`+t.sessionOrder,data:t.data,"modify-difficulty":t.user_elo.global.score-t.card_elo,class:`cardView ma-2 pa-2`,onEmitResponse:c[3]||(c[3]=c=>t.processResponse(c)),onRequestReplan:c[4]||(c[4]=c=>t.$emit(`requestReplan`,c)),onReadyToAdvance:c[5]||(c[5]=c=>t.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`]))]),_:1}))}function _sfc_render$16(t,c,u,d,m,g){let b=resolveComponent(`v-spacer`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-card-title`),w=resolveComponent(`v-col`),T=resolveComponent(`v-row`),E=resolveComponent(`v-divider`),D=resolveComponent(`v-card-text`),O=resolveComponent(`v-card`);return t.sessionController?(openBlock(),createBlock(O,{key:0,class:`session-debug ma-2`,elevation:`2`},{default:withCtx(()=>[createVNode(C,{class:`text-caption bg-grey-darken-3`},{default:withCtx(()=>[c[1]||(c[1]=createTextVNode(` Session Controller Debug `)),createVNode(b),createVNode(S,{size:`small`},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-bug`)])),_:1})]),_:1}),createVNode(D,{class:`pa-2`},{default:withCtx(()=>[createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,ut$1,[createBaseVNode(`div`,dt$1,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-calendar-check`)])),_:1}),c[3]||(c[3]=createBaseVNode(`strong`,null,`Review Queue`,-1))]),createBaseVNode(`div`,ft$1,[createBaseVNode(`span`,pt$1,`Length: `+toDisplayString(t.debugInfo.reviewQueue.length),1),createBaseVNode(`span`,mt$1,`Dequeued: `+toDisplayString(t.debugInfo.reviewQueue.dequeueCount),1)]),t.debugInfo.reviewQueue.items.length>0?(openBlock(),createElementBlock(`div`,ht$1,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.reviewQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,gt$1,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,_t,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.reviewQueue.items.length>5?(openBlock(),createElementBlock(`div`,vt$1,` ... +`+toDisplayString(t.debugInfo.reviewQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,yt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,bt,[createBaseVNode(`div`,xt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-file-document-plus`)])),_:1}),c[5]||(c[5]=createBaseVNode(`strong`,null,`New Cards Queue`,-1))]),createBaseVNode(`div`,St,[createBaseVNode(`span`,Ct,`Length: `+toDisplayString(t.debugInfo.newQueue.length),1),createBaseVNode(`span`,wt,`Dequeued: `+toDisplayString(t.debugInfo.newQueue.dequeueCount),1)]),t.debugInfo.newQueue.items.length>0?(openBlock(),createElementBlock(`div`,Tt,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.newQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,Et,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Dt,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.newQueue.items.length>5?(openBlock(),createElementBlock(`div`,Ot,` ... +`+toDisplayString(t.debugInfo.newQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,kt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,At,[createBaseVNode(`div`,jt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[7]||(c[7]=createBaseVNode(`strong`,null,`Failed Cards Queue`,-1))]),createBaseVNode(`div`,Mt,[createBaseVNode(`span`,Nt,`Length: `+toDisplayString(t.debugInfo.failedQueue.length),1),createBaseVNode(`span`,Pt,`Dequeued: `+toDisplayString(t.debugInfo.failedQueue.dequeueCount),1)]),t.debugInfo.failedQueue.items.length>0?(openBlock(),createElementBlock(`div`,Ft,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.failedQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,It,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Lt,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.failedQueue.items.length>5?(openBlock(),createElementBlock(`div`,Rt,` ... +`+toDisplayString(t.debugInfo.failedQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,zt,` (empty) `))])]),_:1})]),_:1}),createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`},{default:withCtx(()=>[createVNode(E,{class:`my-2`}),createBaseVNode(`div`,Bt,[createBaseVNode(`div`,Vt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-database`)])),_:1}),c[9]||(c[9]=createBaseVNode(`strong`,null,`Hydrated Cards Cache`,-1))]),createBaseVNode(`div`,Ht,[createBaseVNode(`span`,Ut,`Cached: `+toDisplayString(t.debugInfo.hydratedCache.count),1),createBaseVNode(`span`,Wt,`Failed Cache: `+toDisplayString(t.debugInfo.hydratedCache.failedCacheSize),1)]),t.debugInfo.hydratedCache.items.length>0?(openBlock(),createElementBlock(`div`,Gt,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.hydratedCache.items.slice(0,8),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item d-inline-block mr-3`},[createBaseVNode(`span`,Kt,toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1)]))),128)),t.debugInfo.hydratedCache.items.length>8?(openBlock(),createElementBlock(`div`,qt,` ... +`+toDisplayString(t.debugInfo.hydratedCache.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,Jt,` (empty) `))])]),_:1})]),_:1})]),_:1})]),_:1})):createCommentVNode(``,!0)}function _sfc_render$15(t,c,u,d,m,g){let b=resolveComponent(`v-spacer`),S=resolveComponent(`v-progress-circular`),C=resolveComponent(`v-row`),w=resolveComponent(`session-controller-debug`),T=resolveComponent(`heat-map`),E=resolveComponent(`card-viewer`),D=resolveComponent(`StudySessionTimer`),O=resolveComponent(`v-col`),Or=resolveComponent(`SkMouseTrap`);return t.sessionPrepared?(openBlock(),createElementBlock(`div`,$t,[t.frameless?createCommentVNode(``,!0):(openBlock(),createBlock(C,{key:0,align:`center`},{default:withCtx(()=>[createVNode(b),t.loading?(openBlock(),createBlock(S,{key:0,color:`primary`,indeterminate:``,size:`32`,width:`4`})):createCommentVNode(``,!0)]),_:1})),t.debugMode?(openBlock(),createBlock(w,{key:1,"session-controller":t.sessionController},null,8,[`session-controller`])):createCommentVNode(``,!0),t.frameless?createCommentVNode(``,!0):(openBlock(),createElementBlock(`br`,en)),t.sessionFinished?(openBlock(),createElementBlock(`div`,tn,[renderSlot(t.$slots,`session-finished`,{sessionRecord:t.sessionRecord,report:t.sessionController?.report},()=>[createBaseVNode(`div`,nn,[c[1]||(c[1]=createBaseVNode(`p`,null,`Study session finished! Great job!`,-1)),t.sessionController?(openBlock(),createElementBlock(`p`,rn,toDisplayString(t.sessionController.report),1)):createCommentVNode(``,!0),createVNode(T,{"activity-records-getter":()=>t.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):(openBlock(),createElementBlock(`div`,an,[createVNode(Transition,{name:t.transitionName},{default:withCtx(()=>[t.view?(openBlock(),createBlock(E,{ref:`cardViewer`,key:t.cardID,class:normalizeClass(t.loading?`muted`:``),view:t.view,data:t.data,card_id:t.cardID,course_id:t.courseID,"session-order":t.cardCount,user_elo:t.user_elo(t.courseID),card_elo:t.card_elo,frameless:t.frameless,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c)),onRequestReplan:t.handleReplanRequest,onReadyToAdvance:t.handleReadyToAdvance},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`,`user_elo`,`card_elo`,`frameless`,`onRequestReplan`,`onReadyToAdvance`])):createCommentVNode(``,!0)]),_:1},8,[`name`])],512)),t.frameless?createCommentVNode(``,!0):(openBlock(),createElementBlock(Fragment,{key:5},[c[2]||(c[2]=createBaseVNode(`br`,null,null,-1)),t.sessionController?(openBlock(),createElementBlock(`div`,on,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.sessionController.failedCount,t=>(openBlock(),createElementBlock(`span`,{key:t,class:`text-h5`},`•`))),128))])):createCommentVNode(``,!0)],64)),t.hideFooter?createCommentVNode(``,!0):(openBlock(),createBlock(C,{key:6,align:`center`,class:`footer-controls pa-5`},{default:withCtx(()=>[createVNode(O,{cols:`auto`,class:`d-flex flex-grow-0 mr-auto`},{default:withCtx(()=>[createVNode(D,{"time-remaining":t.timeRemaining,"session-time-limit":t.sessionTimeLimit,onAddTime:t.incrementSessionClock},null,8,[`time-remaining`,`session-time-limit`,`onAddTime`])]),_:1}),createVNode(b),createVNode(O,{cols:`auto`,class:`footer-right`},{default:withCtx(()=>[createVNode(Or)]),_:1})]),_:1}))])):createCommentVNode(``,!0)}function _sfc_render$14(t,c,u,d,m,g){let b=resolveComponent(`markdown-renderer`),S=resolveComponent(`v-card`);return openBlock(),createBlock(S,{class:normalizeClass(`${t.className}`),onMouseover:t.select,onClick:t.submitThisOption},{default:withCtx(()=>[createVNode(b,{md:t.content},null,8,[`md`])]),_:1},8,[`class`,`onMouseover`,`onClick`])}function _sfc_render$13(t,c,u,d,m,g){let b=resolveComponent(`MultipleChoiceOption`);return openBlock(),createElementBlock(`div`,dn,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.choiceList,(c,u)=>(openBlock(),createBlock(b,{key:u,content:c,selected:t.choiceList.indexOf(c)===t.currentSelection,number:t.choiceList.indexOf(c),"set-selection":t.setSelection,submit:t.forwardSelection,"marked-wrong":t.choiceIsWrong(c)},null,8,[`content`,`selected`,`number`,`set-selection`,`submit`,`marked-wrong`]))),128))],512)}function _sfc_render$12(t,c,u,d,m,g){let b=resolveComponent(`RadioMultipleChoice`);return openBlock(),createElementBlock(`div`,mn,[createVNode(b,{"choice-list":[`True`,`False`],MouseTrap:t.MouseTrap,submit:t.submit},null,8,[`MouseTrap`,`submit`])])}function _sfc_render$11(t,c,u,d,m,g){let b=resolveComponent(`v-text-field`),S=resolveComponent(`v-container`);return openBlock(),createBlock(S,{class:`pa-0`},{default:withCtx(()=>[createVNode(b,{ref:`input`,modelValue:t.answer,"onUpdate:modelValue":c[0]||(c[0]=c=>t.answer=c),"prepend-icon":`edit`,autofocus:t.autofocus,"row-height":`24`,"toggle-keys":`[13,32]`,class:`text-h5`,rules:[t.isNumeric],onKeyup:c[1]||(c[1]=withKeys(c=>t.submitAnswer(t.makeNumeric(t.answer)),[`enter`]))},null,8,[`modelValue`,`autofocus`,`rules`])]),_:1})}function _sfc_render$10(t,c,u,d,m,g){let b=resolveComponent(`card-viewer`);return t.loading?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:0,class:normalizeClass([`ma-2`,t.loading?`muted`:``]),view:t.view,data:t.data,card_id:t.cardID,course_id:t.courseID,"session-order":t.sessionOrder,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c))},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`]))}async function getCurrentUser(){let t=useAuthStore();if(!t.onLoadComplete){let c=200;for(;!t.onLoadComplete&&c>0;)await new Promise(t=>setTimeout(t,50)),c--;if(!t.onLoadComplete)throw Error(`User initialization timed out`)}return getDataLayer().getUserDB()}function useAuthUI(){let t=ref(!0),c=ref(!1),u=ref(!1),d=computed(()=>u.value?{showLoginRegistration:!1,showLogout:!1,showResetData:!0,logoutLabel:``,resetLabel:`Reset User Data`}:{showLoginRegistration:!0,showLogout:!0,showResetData:!1,logoutLabel:`Log out`,resetLabel:``}),detectSyncStrategy=async()=>{try{t.value=!0,u.value=!(await getCurrentUser()).syncStrategy?.canCreateAccount?.(),c.value=!0}catch(t){console.error(`Failed to detect sync strategy:`,t),u.value=!1,c.value=!0}finally{t.value=!1}};return{config:d,isLoading:t,syncStrategyDetected:c,isLocalOnlyMode:u,detectSyncStrategy}}function validatePassword(t){return t?t.length<6?`Password must be at least 6 characters`:new Set(t).size<2?`Password must contain at least 2 different characters`:``:``}function isPasswordValid(t){return validatePassword(t)===``}function _sfc_render$9(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-btn`),w=resolveComponent(`v-snackbar`),T=resolveComponent(`v-icon`),E=resolveComponent(`router-link`),D=resolveComponent(`v-form`),O=resolveComponent(`v-card-text`),Or=resolveComponent(`v-card`);return openBlock(),createBlock(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(` Create an Account `)])),_:1}),createVNode(O,null,{default:withCtx(()=>[createVNode(D,{onSubmit:withModifiers(t.createUser,[`prevent`])},{default:withCtx(()=>[createVNode(S,{modelValue:t.email,"onUpdate:modelValue":c[0]||(c[0]=c=>t.email=c),name:`email`,label:`Email address`,type:`email`,"prepend-icon":`mdi-email`,error:t.emailError,hint:t.emailHint,onBlur:t.validateEmail},null,8,[`modelValue`,`error`,`hint`,`onBlur`]),createVNode(S,{id:``,ref:`userNameTextField`,modelValue:t.username,"onUpdate:modelValue":c[1]||(c[1]=c=>t.username=c),name:`username`,label:`Choose a Username`,"prepend-icon":`mdi-account-circle`,error:t.usernameError,hint:t.usernameHint,onBlur:t.validateUsername},null,8,[`modelValue`,`error`,`hint`,`onBlur`]),createVNode(S,{modelValue:t.password,"onUpdate:modelValue":c[2]||(c[2]=c=>t.password=c),"prepend-icon":`mdi-lock`,name:`password`,hover:`Show password`,label:`Create a password`,hint:t.passwordError,error:!!t.passwordError,min:`4`,"append-icon":t.passwordVisible?`mdi-eye-off`:`mdi-eye`,type:t.passwordVisible?`text`:`password`,"onClick:append":c[3]||(c[3]=()=>t.passwordVisible=!t.passwordVisible)},null,8,[`modelValue`,`hint`,`error`,`append-icon`,`type`]),createVNode(S,{modelValue:t.retypedPassword,"onUpdate:modelValue":c[4]||(c[4]=c=>t.retypedPassword=c),"prepend-icon":`mdi-lock`,name:`retypedPassword`,hover:`Show password`,label:`Retype your password`,disabled:t.password===``||!!t.passwordError,hint:t.passwordRetypeError,min:`4`,type:t.passwordVisible?`text`:`password`},null,8,[`modelValue`,`disabled`,`hint`,`type`]),createVNode(w,{modelValue:t.badLoginAttempt,"onUpdate:modelValue":c[6]||(c[6]=c=>t.badLoginAttempt=c),location:`bottom right`,timeout:5e3},{default:withCtx(()=>[c[9]||(c[9]=createTextVNode(` Username or password was incorrect. `)),createVNode(C,{color:`pink`,variant:`text`,onClick:c[5]||(c[5]=c=>t.badLoginAttempt=!1)},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(` Close `)])),_:1})]),_:1},8,[`modelValue`]),createVNode(C,{class:`mr-2 my-2`,type:`submit`,loading:t.awaitingResponse,color:t.buttonStatus.color,disabled:!!t.passwordError||t.password!==t.retypedPassword},{default:withCtx(()=>[createVNode(T,{start:``},{default:withCtx(()=>c[10]||(c[10]=[createTextVNode(`mdi-lock-open`)])),_:1}),c[11]||(c[11]=createTextVNode(` Create Account `))]),_:1},8,[`loading`,`color`,`disabled`]),t.registrationRoute?(openBlock(),createBlock(E,{key:0,to:`login`},{default:withCtx(()=>[createVNode(C,{variant:`text`},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(`Log In`)])),_:1})]),_:1})):(openBlock(),createBlock(C,{key:1,variant:`text`,onClick:t.toggle},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Log In `)])),_:1},8,[`onClick`]))]),_:1},8,[`onSubmit`])]),_:1})]),_:1})}function _sfc_render$8(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-form`),E=resolveComponent(`v-card-text`),D=resolveComponent(`v-spacer`),O=resolveComponent(`v-card-actions`),Or=resolveComponent(`v-card`);return openBlock(),createBlock(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(` Reset Password `)])),_:1}),createVNode(E,{class:`pa-6`},{default:withCtx(()=>[t.requestSent?(openBlock(),createElementBlock(`div`,Dn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-email-check`)])),_:1}),c[9]||(c[9]=createBaseVNode(`h3`,{class:`mb-2`},`Check Your Email`,-1)),createBaseVNode(`p`,null,[c[7]||(c[7]=createTextVNode(` If an account exists with `)),createBaseVNode(`strong`,null,toDisplayString(t.email),1),c[8]||(c[8]=createTextVNode(`, you will receive a password reset link shortly. `))]),c[10]||(c[10]=createBaseVNode(`p`,{class:`text-caption mt-4`},`Didn't receive an email? Check your spam folder.`,-1))])):(openBlock(),createBlock(T,{key:0,onSubmit:withModifiers(t.handleSubmit,[`prevent`])},{default:withCtx(()=>[c[5]||(c[5]=createBaseVNode(`p`,{class:`mb-4`},` Enter your email address and we'll send you a link to reset your password. `,-1)),createVNode(S,{modelValue:t.email,"onUpdate:modelValue":c[0]||(c[0]=c=>t.email=c),name:`email`,label:`Email address`,type:`email`,"prepend-icon":`mdi-email`,error:t.emailError,hint:t.emailHint,disabled:t.isSubmitting,onBlur:t.validateEmail},null,8,[`modelValue`,`error`,`hint`,`disabled`,`onBlur`]),createVNode(w,{type:`submit`,color:`primary`,class:`mt-4`,loading:t.isSubmitting,disabled:!t.email||t.emailError,block:``},{default:withCtx(()=>[createVNode(C,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-email-send`)])),_:1}),c[4]||(c[4]=createTextVNode(` Send Reset Link `))]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`onSubmit`]))]),_:1}),t.requestSent?createCommentVNode(``,!0):(openBlock(),createBlock(O,{key:0},{default:withCtx(()=>[renderSlot(t.$slots,`back-action`,{},()=>[createVNode(w,{variant:`text`,onClick:c[1]||(c[1]=c=>t.$emit(`cancel`))},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Cancel `)])),_:1})]),createVNode(D)]),_:3}))]),_:3})}function _sfc_render$7(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-progress-circular`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-card-text`),T=resolveComponent(`v-spacer`),E=resolveComponent(`v-btn`),D=resolveComponent(`v-card-actions`),O=resolveComponent(`v-card`),Or=resolveComponent(`v-col`),kr=resolveComponent(`v-row`),Ar=resolveComponent(`v-container`);return openBlock(),createBlock(Ar,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(kr,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(Or,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(O,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(` Email Verification `)])),_:1}),createVNode(w,{class:`pa-6`},{default:withCtx(()=>[t.isVerifying?(openBlock(),createElementBlock(`div`,Pn,[createVNode(S,{indeterminate:``,color:`primary`,size:`64`,class:`mb-4`}),c[3]||(c[3]=createBaseVNode(`p`,null,`Verifying your email...`,-1))])):t.verificationStatus===`success`?(openBlock(),createElementBlock(`div`,Fn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-check-circle`)])),_:1}),c[5]||(c[5]=createBaseVNode(`h3`,{class:`mb-2`},`Email Verified!`,-1)),c[6]||(c[6]=createBaseVNode(`p`,null,`Your account has been successfully verified.`,-1)),t.username?(openBlock(),createElementBlock(`p`,In,`Welcome, `+toDisplayString(t.username)+`!`,1)):createCommentVNode(``,!0)])):t.verificationStatus===`error`?(openBlock(),createElementBlock(`div`,Ln,[createVNode(C,{color:`error`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[8]||(c[8]=createBaseVNode(`h3`,{class:`mb-2`},`Verification Failed`,-1)),createBaseVNode(`p`,null,toDisplayString(t.errorMessage),1)])):(openBlock(),createElementBlock(`div`,Rn,[createVNode(C,{color:`warning`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[9]||(c[9]=[createTextVNode(`mdi-help-circle`)])),_:1}),c[10]||(c[10]=createBaseVNode(`h3`,{class:`mb-2`},`No Verification Token`,-1)),c[11]||(c[11]=createBaseVNode(`p`,null,`Please use the link from your verification email.`,-1))]))]),_:1}),createVNode(D,null,{default:withCtx(()=>[createVNode(T),renderSlot(t.$slots,`actions`,{status:t.verificationStatus,username:t.username},()=>[t.verificationStatus===`success`?(openBlock(),createBlock(E,{key:0,color:`primary`,onClick:c[0]||(c[0]=c=>t.$emit(`verified`,t.username))},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Continue `)])),_:1})):t.verificationStatus===`error`?(openBlock(),createBlock(E,{key:1,variant:`text`,onClick:c[1]||(c[1]=c=>t.$emit(`error`,t.errorMessage))},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Close `)])),_:1})):createCommentVNode(``,!0)])]),_:3})]),_:3})]),_:3})]),_:3})]),_:3})}function _sfc_render$6(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-form`),E=resolveComponent(`v-card-text`),D=resolveComponent(`v-spacer`),O=resolveComponent(`v-card-actions`),Or=resolveComponent(`v-card`),kr=resolveComponent(`v-col`),Ar=resolveComponent(`v-row`),jr=resolveComponent(`v-container`);return openBlock(),createBlock(jr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(Ar,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(kr,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(` Set New Password `)])),_:1}),createVNode(E,{class:`pa-6`},{default:withCtx(()=>[t.isComplete?(openBlock(),createElementBlock(`div`,Vn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-check-circle`)])),_:1}),c[9]||(c[9]=createBaseVNode(`h3`,{class:`mb-2`},`Password Reset Successful!`,-1)),c[10]||(c[10]=createBaseVNode(`p`,null,`Your password has been updated. You can now log in with your new password.`,-1))])):(openBlock(),createBlock(T,{key:0,onSubmit:withModifiers(t.handleSubmit,[`prevent`])},{default:withCtx(()=>[c[7]||(c[7]=createBaseVNode(`p`,{class:`mb-4`},`Enter your new password below.`,-1)),createVNode(S,{modelValue:t.password,"onUpdate:modelValue":c[0]||(c[0]=c=>t.password=c),"prepend-icon":`mdi-lock`,name:`password`,label:`New password`,min:`4`,"append-icon":t.passwordVisible?`mdi-eye-off`:`mdi-eye`,type:t.passwordVisible?`text`:`password`,disabled:t.isSubmitting,"onClick:append":c[1]||(c[1]=()=>t.passwordVisible=!t.passwordVisible)},null,8,[`modelValue`,`append-icon`,`type`,`disabled`]),createVNode(S,{modelValue:t.confirmPassword,"onUpdate:modelValue":c[2]||(c[2]=c=>t.confirmPassword=c),"prepend-icon":`mdi-lock`,name:`confirmPassword`,label:`Confirm new password`,min:`4`,type:t.passwordVisible?`text`:`password`,error:t.confirmPasswordError,hint:t.confirmPasswordHint,disabled:t.isSubmitting,onBlur:t.validateConfirmPassword},null,8,[`modelValue`,`type`,`error`,`hint`,`disabled`,`onBlur`]),createVNode(w,{type:`submit`,color:`primary`,class:`mt-4`,loading:t.isSubmitting,disabled:!t.canSubmit,block:``},{default:withCtx(()=>[createVNode(C,{start:``},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-lock-reset`)])),_:1}),c[6]||(c[6]=createTextVNode(` Reset Password `))]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`onSubmit`]))]),_:1}),t.isComplete?(openBlock(),createBlock(O,{key:0},{default:withCtx(()=>[createVNode(D),renderSlot(t.$slots,`success-action`,{},()=>[createVNode(w,{color:`primary`,onClick:c[3]||(c[3]=c=>t.$emit(`complete`))},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Continue to Login `)])),_:1})])]),_:3})):createCommentVNode(``,!0)]),_:3})]),_:3})]),_:3})]),_:3})}function _sfc_render$5(t,c,u,d,m,g){let b=resolveComponent(`vue-tags-input`),S=resolveComponent(`v-btn`);return openBlock(),createElementBlock(`div`,Wn,[createVNode(b,{modelValue:t.tag,"onUpdate:modelValue":c[0]||(c[0]=c=>t.tag=c),tags:t.tags,"autocomplete-items":t.autoCompleteSuggestions,separators:t.separators,"add-on-key":t.separators,onTagsChanged:t.tagsChanged},{"autocomplete-item":withCtx(t=>[createBaseVNode(`div`,{class:normalizeClass([`autocomplete-item`,{"is-active":t.selected}])},[createBaseVNode(`span`,Gn,toDisplayString(t.item.text),1),t.item.data&&t.item.data.snippet?(openBlock(),createElementBlock(`span`,Kn,` - `+toDisplayString(t.item.data.snippet),1)):createCommentVNode(``,!0)],2)]),_:1},8,[`modelValue`,`tags`,`autocomplete-items`,`separators`,`add-on-key`,`onTagsChanged`]),t.hideSubmit?createCommentVNode(``,!0):(openBlock(),createBlock(S,{key:0,color:`success`,loading:t.loading,onClick:t.submit},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`Save Changes`)])),_:1},8,[`loading`,`onClick`]))])}function _sfc_render$4$1(t,c,u,d,m,g){let b=resolveComponent(`v-progress-circular`),S=resolveComponent(`paginating-toolbar`),C=resolveComponent(`v-list-item-title`),w=resolveComponent(`v-list-item-subtitle`),T=resolveComponent(`v-btn`),E=resolveComponent(`v-icon`),D=resolveComponent(`v-speed-dial`),O=resolveComponent(`v-list-item`),Or=resolveComponent(`card-loader`),kr=resolveComponent(`v-chip`),Ar=resolveComponent(`v-chip-group`),jr=resolveComponent(`tags-input`),Mr=resolveComponent(`v-list`),Nr=resolveComponent(`v-card`);return openBlock(),createBlock(Nr,null,{default:withCtx(()=>[t.updatePending?(openBlock(),createElementBlock(`div`,Yn,[createVNode(b,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,Xn,[createVNode(S,{title:`Exercises`,page:t.page,pages:t.pages,subtitle:`(${t.questionCount})`,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:c[0]||(c[0]=c=>t.setPage(c))},null,8,[`page`,`pages`,`subtitle`,`onFirst`,`onPrev`,`onNext`,`onLast`]),createVNode(Mr,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cards,u=>(openBlock(),createElementBlock(Fragment,{key:u.card.cardID},[createVNode(O,{class:normalizeClass({"bg-blue-grey-lighten-5":u.isOpen,"elevation-4":u.isOpen}),density:`compact`,"data-cy":`course-card`},{prepend:withCtx(()=>[createBaseVNode(`div`,null,[createVNode(C,{class:normalizeClass([{"text-blue-grey-darken-1":u.isOpen},`font-weight-medium`])},{default:withCtx(()=>[createTextVNode(toDisplayString(t.cardPreview[u.card.cardID]),1)]),_:2},1032,[`class`]),createVNode(w,null,{default:withCtx(()=>[createTextVNode(` ELO: `+toDisplayString(t.cardElos[u.card.cardID]?.global?.score||`(unknown)`),1)]),_:2},1024)])]),append:withCtx(()=>[createVNode(D,{modelValue:u.isOpen,"onUpdate:modelValue":t=>u.isOpen=t,location:`left center`,transition:`slide-x-transition`,style:{display:`flex`,"flex-direction":`row-reverse`},persistent:``},{activator:withCtx(({props:c})=>[createVNode(T,mergeProps({ref_for:!0},c,{icon:u.isOpen?`mdi-close`:`mdi-plus`,size:`small`,variant:`text`,onClick:c=>t.clearSelections(u.card.cardID)}),null,16,[`icon`,`onClick`])]),default:withCtx(()=>[t.editMode===`full`?(openBlock(),createBlock(T,{key:`tags`,icon:``,size:`small`,variant:t.internalEditMode===`tags`?`elevated`:`outlined`,color:t.internalEditMode===`tags`?`teal`:`teal-darken-3`,onClick:c[1]||(c[1]=withModifiers(c=>t.internalEditMode=`tags`,[`stop`]))},{default:withCtx(()=>[createVNode(E,null,{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-bookmark`)])),_:1})]),_:1},8,[`variant`,`color`])):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(T,{key:`flag`,icon:``,size:`small`,variant:t.internalEditMode===`flag`?`elevated`:`outlined`,color:t.internalEditMode===`flag`?`error`:`error-darken-3`,onClick:c[2]||(c[2]=withModifiers(c=>t.internalEditMode=`flag`,[`stop`]))},{default:withCtx(()=>[createVNode(E,null,{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-flag`)])),_:1})]),_:1},8,[`variant`,`color`])):createCommentVNode(``,!0)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`class`]),u.isOpen?(openBlock(),createElementBlock(`div`,Zn,[createVNode(Or,{qualified_id:u.card,"view-lookup":t.viewLookup,class:`elevation-1`},null,8,[`qualified_id`,`view-lookup`]),t.editMode===`readonly`&&t.cardTags[u.card.cardID]?(openBlock(),createElementBlock(`div`,Qn,[createVNode(Ar,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cardTags[u.card.cardID],t=>(openBlock(),createBlock(kr,{key:t.name,size:`small`,color:`primary`,variant:`outlined`},{default:withCtx(()=>[createTextVNode(toDisplayString(t.name),1)]),_:2},1024))),128))]),_:2},1024)])):createCommentVNode(``,!0),withDirectives(createVNode(jr,{"course-i-d":t.courseId,"card-i-d":u.card.cardID,class:`mt-4`},null,8,[`course-i-d`,`card-i-d`]),[[vShow,t.internalEditMode===`tags`&&t.editMode===`full`]]),withDirectives(createBaseVNode(`div`,$n,[createVNode(T,{color:`error`,variant:`outlined`,onClick:t=>u.delBtn=!0},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(` Delete this card `)])),_:2},1032,[`onClick`]),u.delBtn?(openBlock(),createElementBlock(`span`,er,[c[8]||(c[8]=createBaseVNode(`span`,{class:`mr-2`},`Are you sure?`,-1)),createVNode(T,{color:`error`,variant:`elevated`,onClick:c=>t.deleteCard(u.card.cardID)},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(` Confirm `)])),_:2},1032,[`onClick`])])):createCommentVNode(``,!0)],512),[[vShow,t.internalEditMode===`flag`&&t.editMode===`full`]])])):createCommentVNode(``,!0)],64))),128))]),_:1}),createVNode(S,{class:`elevation-0`,page:t.page,pages:t.pages,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:c[3]||(c[3]=c=>t.setPage(c))},null,8,[`page`,`pages`,`onFirst`,`onPrev`,`onNext`,`onLast`])]))]),_:1})}function _sfc_render$3$2(t,c,u,d,m,g){let b=resolveComponent(`v-btn`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-toolbar-title`),w=resolveComponent(`v-toolbar-items`),T=resolveComponent(`v-toolbar`),E=resolveComponent(`v-chip`),D=resolveComponent(`v-card-text`),O=resolveComponent(`v-card`),Or=resolveComponent(`course-card-browser`);return t.updatePending?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,rr,[renderSlot(t.$slots,`header`,{courseConfig:t.courseConfig,courseId:t.courseId},()=>[createBaseVNode(`h1`,ir,toDisplayString(t.courseConfig.name),1)],!0),createBaseVNode(`p`,ar,toDisplayString(t.courseConfig.description),1),renderSlot(t.$slots,`actions`,{userIsRegistered:t.userIsRegistered,courseId:t.courseId,editMode:t.editMode,register:t.register,drop:t.drop},()=>[createVNode(Transition,{name:`component-fade`,mode:`out-in`},{default:withCtx(()=>[t.userIsRegistered?(openBlock(),createElementBlock(`div`,or,[createVNode(b,{color:`success`,"data-cy":`focused-study-session-btn`,class:`me-2`},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`Start ad study session`)])),_:1}),t.editMode===`full`?(openBlock(),createBlock(b,{key:0,"data-cy":`add-content-btn`,color:`indigo-lighten-1`,class:`me-2`},{default:withCtx(()=>[createVNode(S,{start:``},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-plus`)])),_:1}),c[2]||(c[2]=createTextVNode(` Add content `))]),_:1})):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(b,{key:1,color:`green-darken-2`,title:`Rank course content for difficulty`,class:`me-2`},{default:withCtx(()=>[createVNode(S,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-format-list-numbered`)])),_:1}),c[4]||(c[4]=createTextVNode(` Arrange `))]),_:1})):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(b,{key:2,color:`error`,size:`small`,variant:`outlined`,onClick:t.drop},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(` Drop this course `)])),_:1},8,[`onClick`])):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,sr,[createVNode(b,{"data-cy":`register-btn`,color:`primary`,class:`me-2`,onClick:t.register},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`Register`)])),_:1},8,[`onClick`]),createVNode(b,{variant:`outlined`,color:`primary`,class:`me-2`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`Start a trial study session`)])),_:1})]))]),_:1})],!0),renderSlot(t.$slots,`additional-content`,{},void 0,!0),createVNode(O,{class:`my-2`},{default:withCtx(()=>[createVNode(T,{density:`compact`},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`Tags`)])),_:1}),createVNode(w,null,{default:withCtx(()=>[createVNode(b,{variant:`text`},{default:withCtx(()=>[createTextVNode(`(`+toDisplayString(t.tags.length)+`)`,1)]),_:1})]),_:1})]),_:1}),createVNode(D,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tags,(c,u)=>(openBlock(),createElementBlock(`span`,{key:u},[renderSlot(t.$slots,`tag-link`,{tag:c,courseId:t.courseId},()=>[createVNode(E,{variant:`tonal`,class:`me-2 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(c.name),1)]),_:2},1024)],!0)]))),128))]),_:3})]),_:3}),createVNode(Or,{class:`my-3`,"course-id":t.courseId,"view-lookup-function":t.viewLookupFunction,"edit-mode":t.editMode},null,8,[`course-id`,`view-lookup-function`,`edit-mode`])]))}function _sfc_render$2$2(t,c,u,d,m,g){let b=resolveComponent(`CardViewer`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-btn`),w=resolveComponent(`v-row`);return openBlock(),createBlock(w,{column:``,align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(b,{view:t.views[t.viewIndex],data:t.data,course_id:`[browsing]`,card_id:`[browsing]`},null,8,[`view`,`data`]),c[2]||(c[2]=createBaseVNode(`br`,null,null,-1)),c[3]||(c[3]=createBaseVNode(`br`,null,null,-1)),t.suppressSpinner?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,ur,[t.spinner?(openBlock(),createBlock(C,{key:0,icon:``,variant:`outlined`,color:`primary`,onClick:t.decrementView},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-chevron-left`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0),createTextVNode(` `+toDisplayString(t.views[t.viewIndex].name)+` `,1),t.spinner?(openBlock(),createBlock(C,{key:1,icon:``,variant:`outlined`,color:`primary`,onClick:t.incrementView},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-chevron-right`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0)]))]),_:1})}function _sfc_render$1$5(t,c,u,d,m,g){let b=resolveComponent(`v-chip`),S=resolveComponent(`v-list-item`),C=resolveComponent(`v-autocomplete`),w=resolveComponent(`v-icon`);return openBlock(),createElementBlock(`div`,pr,[createVNode(C,{modelValue:t.localFilter.include,"onUpdate:modelValue":c[0]||(c[0]=c=>t.localFilter.include=c),items:t.availableTags,loading:t.loading,disabled:t.loading,label:`Include tags`,placeholder:`Type to search tags...`,hint:`Cards must have at least one of these tags`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,class:`mb-2`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:withCtx(({props:t,item:c})=>[createVNode(b,mergeProps(t,{color:`primary`,variant:`tonal`,size:`small`}),{default:withCtx(()=>[createTextVNode(toDisplayString(c.raw),1)]),_:2},1040)]),item:withCtx(({props:c,item:u})=>[createVNode(S,mergeProps(c,{title:u.raw}),createSlots({_:2},[t.tagSnippets[u.raw]?{name:`subtitle`,fn:withCtx(()=>[createTextVNode(toDisplayString(t.tagSnippets[u.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),createVNode(C,{modelValue:t.localFilter.exclude,"onUpdate:modelValue":c[1]||(c[1]=c=>t.localFilter.exclude=c),items:t.availableTagsForExclude,loading:t.loading,disabled:t.loading,label:`Exclude tags`,placeholder:`Type to search tags...`,hint:`Cards with these tags will be excluded`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:withCtx(({props:t,item:c})=>[createVNode(b,mergeProps(t,{color:`error`,variant:`tonal`,size:`small`}),{default:withCtx(()=>[createTextVNode(toDisplayString(c.raw),1)]),_:2},1040)]),item:withCtx(({props:c,item:u})=>[createVNode(S,mergeProps(c,{title:u.raw}),createSlots({_:2},[t.tagSnippets[u.raw]?{name:`subtitle`,fn:withCtx(()=>[createTextVNode(toDisplayString(t.tagSnippets[u.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),t.hasActiveFilter?(openBlock(),createElementBlock(`div`,mr,[createVNode(w,{size:`small`,color:`info`,class:`mr-1`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-filter`)])),_:1}),t.localFilter.include.length?(openBlock(),createElementBlock(`span`,hr,` Including: `+toDisplayString(t.localFilter.include.join(`, `)),1)):createCommentVNode(``,!0),t.localFilter.include.length&&t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,gr,` · `)):createCommentVNode(``,!0),t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,_r,` Excluding: `+toDisplayString(t.localFilter.exclude.join(`, `)),1)):createCommentVNode(``,!0)])):createCommentVNode(``,!0)])}function _sfc_render$27(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-card-title`),C=resolveComponent(`v-card-subtitle`),w=resolveComponent(`v-alert`),T=resolveComponent(`v-list-item`),E=resolveComponent(`v-autocomplete`),D=resolveComponent(`v-chip`),O=resolveComponent(`v-slider`),Or=resolveComponent(`v-btn`),kr=resolveComponent(`v-list`),Ar=resolveComponent(`v-progress-circular`),jr=resolveComponent(`v-card-text`),Mr=resolveComponent(`v-spacer`),Nr=resolveComponent(`v-card-actions`),Pr=resolveComponent(`v-card`);return openBlock(),createBlock(Pr,{loading:t.loading},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createVNode(b,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-tune`)])),_:1}),c[4]||(c[4]=createTextVNode(` Learning Preferences `))]),_:1}),t.courseId?(openBlock(),createBlock(C,{key:0},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(` Customize how content is presented in this course `)])),_:1})):createCommentVNode(``,!0),createVNode(jr,null,{default:withCtx(()=>[t.courseId?t.loading?(openBlock(),createElementBlock(`div`,Er,[createVNode(Ar,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,xr,[createBaseVNode(`div`,Sr,[createBaseVNode(`h3`,Cr,[createVNode(b,{start:``,size:`small`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-tune-variant`)])),_:1}),c[8]||(c[8]=createTextVNode(` Tag Preferences `))]),c[10]||(c[10]=createBaseVNode(`p`,{class:`text-body-2 text-medium-emphasis mb-3`},` Adjust how much you want to see cards with specific tags. 0 = exclude, 1 = neutral, higher = prefer more. `,-1)),createVNode(E,{modelValue:t.tagToAdd,"onUpdate:modelValue":[c[0]||(c[0]=c=>t.tagToAdd=c),t.addTag],items:t.availableTagsToAdd,"item-title":`name`,"item-value":`name`,label:`Add tag preference`,placeholder:`Search tags...`,density:`compact`,variant:`outlined`,clearable:``,"hide-details":``,class:`mb-4`},{item:withCtx(({props:t,item:c})=>[createVNode(T,normalizeProps(guardReactiveProps(t)),{subtitle:withCtx(()=>[createTextVNode(toDisplayString(c.raw.snippet),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`onUpdate:modelValue`]),t.tagNames.length>0?(openBlock(),createBlock(kr,{key:0,class:`mt-4`},{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tagNames,c=>(openBlock(),createBlock(T,{key:c,class:`px-0`},{default:withCtx(()=>[createBaseVNode(`div`,wr,[createVNode(D,{size:`small`,variant:`tonal`,class:`flex-shrink-0`,style:{"min-width":`120px`}},{default:withCtx(()=>[createTextVNode(toDisplayString(c),1)]),_:2},1024),createVNode(O,{"model-value":t.preferences.boost[c],min:t.sliderConfigResolved.min,max:t.globalSliderMax,step:.01,"hide-details":``,class:`flex-grow-1`,"thumb-label":``,"onUpdate:modelValue":u=>t.updateBoost(c,u)},{"thumb-label":withCtx(({modelValue:c})=>[createTextVNode(toDisplayString(t.formatMultiplier(c)),1)]),_:2},1032,[`model-value`,`min`,`max`,`onUpdate:modelValue`]),createBaseVNode(`span`,Tr,toDisplayString(t.formatMultiplier(t.preferences.boost[c])),1),createVNode(Or,{icon:`mdi-plus`,size:`small`,variant:`text`,density:`compact`,disabled:t.globalSliderMax>=t.sliderConfigResolved.absoluteMax,onClick:u=>t.expandSliderRange(c)},null,8,[`disabled`,`onClick`]),createVNode(Or,{icon:`mdi-delete`,size:`small`,variant:`text`,density:`compact`,onClick:u=>t.removeTag(c)},null,8,[`onClick`])])]),_:2},1024))),128))]),_:1})):(openBlock(),createBlock(w,{key:1,type:`info`,variant:`tonal`,class:`mt-4`},{default:withCtx(()=>c[9]||(c[9]=[createTextVNode(` No tag preferences configured yet. Add tags above to get started. `)])),_:1}))]),t.saveError?(openBlock(),createBlock(w,{key:0,type:`error`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":c[1]||(c[1]=c=>t.saveError=``)},{default:withCtx(()=>[createTextVNode(toDisplayString(t.saveError),1)]),_:1})):createCommentVNode(``,!0),t.saveSuccess?(openBlock(),createBlock(w,{key:1,type:`success`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":c[2]||(c[2]=c=>t.saveSuccess=!1)},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Preferences saved successfully `)])),_:1})):createCommentVNode(``,!0)])):(openBlock(),createBlock(w,{key:0,type:`info`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(` Select a course to configure your learning preferences. `)])),_:1}))]),_:1}),t.courseId&&!t.loading?(openBlock(),createBlock(Nr,{key:1},{default:withCtx(()=>[createVNode(Mr),createVNode(Or,{variant:`text`,disabled:!t.hasChanges,onClick:t.resetToSaved},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Reset `)])),_:1},8,[`disabled`,`onClick`]),createVNode(Or,{color:`primary`,variant:`flat`,loading:t.saving,disabled:!t.hasChanges,onClick:t.savePreferences},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Save Preferences `)])),_:1},8,[`loading`,`disabled`,`onClick`])]),_:1})):createCommentVNode(``,!0)]),_:1},8,[`loading`])}var Ee$1,De$1,Oe$1,ke$1,Ae$1,je$1,Me$1,Ne$1,Pe$1,Fe$1,Ie$1,Le$1,Z$2,Re$1,ze$1,Be$1,Ve$1,He$1,Ue$1,We$1,Ge$1,Ke$1,qe$1,Je$1,Ye$1,Xe$1,Ze$1,Qe$1,$e$1,et$1,tt$1,nt$1,rt$1,it$1,at$1,Displayable,Question,getApiBase,ot$1,st$1,ct$1,Q$1,lt$1,ut$1,dt$1,ft$1,pt$1,mt$1,ht$1,gt$1,_t,vt$1,yt,bt,xt,St,Ct,wt,Tt,Et,Dt,Ot,kt,At,jt,Mt,Nt,Pt,Ft,It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt,Gt,Kt,qt,Jt,Yt,Xt,Zt,Qt,$t,en,tn,nn,rn,an,on,sn,cn,ln,un,dn,fn,pn,mn,hn,gn,_n,vn,yn,useAuthStore,useConfigStore,bn,xn,Sn,Cn,wn,Tn,En,Dn,On,kn,An,jn,Mn,Nn,Pn,Fn,In,Ln,Rn,zn,Bn,Vn,Hn,Un,Wn,Gn,Kn,qn,Jn,Yn,Xn,Zn,Qn,$n,er,tr,nr,rr,ir,ar,or,sr,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,$$2,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,init_common_ui_es=__esmMin((()=>{init_MarkdownRenderer_DoVbFpA6(),init_vue_runtime_esm_bundler(),init_moment(),init_dist$1(),init_dist(),init_pinia(),init_vue_router(),init_vue_tags_input(),Ee$1=defineComponent({name:`HeatMap`,props:{activityRecords:{type:Array,default:()=>[]},activityRecordsGetter:{type:Function,default:null},inactiveColor:{type:Object,default:()=>({h:0,s:0,l:.9})},activeColor:{type:Object,default:()=>({h:155,s:1,l:.5})},cellSize:{type:Number,default:12},cellMargin:{type:Number,default:3},enableSeasonalColors:{type:Boolean,default:!0}},data(){return{isLoading:!1,localActivityRecords:[],heatmapData:{},weeks:[],tooltipData:null,tooltipStyle:{},maxInRange:0}},computed:{width(){return 53*(this.cellSize+this.cellMargin)},height(){return 7*(this.cellSize+this.cellMargin)},effectiveActivityRecords(){let t=Array.isArray(this.localActivityRecords)&&this.localActivityRecords.length>0,c=t?this.localActivityRecords:this.activityRecords||[];return console.log(`Using effectiveActivityRecords, count:`,c.length,`source:`,t?`local`:`prop`),c}},watch:{activityRecords:{handler(){this.processRecords(),this.createWeeksData()},immediate:!0}},async created(){if(this.activityRecordsGetter)try{this.isLoading=!0,console.log(`Fetching activity records using getter...`);let t=await this.activityRecordsGetter();Array.isArray(t)?(this.localActivityRecords=t.filter(t=>{if(!t||!t.timeStamp)return!1;try{let c=hooks(t.timeStamp);return c.isValid()&&c.year()>2e3&&c.year()<2100}catch{return!1}}),console.log(`Received ${t.length} records, ${this.localActivityRecords.length} valid after filtering`),this.processRecords(),this.createWeeksData()):(console.error(`Activity records getter did not return an array:`,t),this.localActivityRecords=[])}catch(t){console.error(`Error fetching activity records:`,t),this.localActivityRecords=[]}finally{this.isLoading=!1}else console.log(`No activityRecordsGetter provided, using direct activityRecords prop`)},methods:{toDateString(t){let c=hooks(t);return hooks.months()[c.month()]+` `+c.date()},processRecords(){let t=this.effectiveActivityRecords||[];console.log(`Processing ${t.length} records`);let c={};if(t.length===0){console.log(`No records to process`),this.heatmapData=c;return}let u=new Set,d={},m=0,g=0;for(let b=0;b<t.length;b++){let S=t[b];if(!S||typeof S!=`object`||!S.timeStamp){g++;continue}try{let t;if(typeof S.timeStamp==`string`)t=hooks(S.timeStamp).format(`YYYY-MM-DD`);else if(typeof S.timeStamp==`number`)t=hooks(new Date(S.timeStamp)).format(`YYYY-MM-DD`);else if(typeof S.timeStamp==`object`)t=typeof S.timeStamp.format==`function`?S.timeStamp.format(`YYYY-MM-DD`):S.timeStamp instanceof Date?hooks(S.timeStamp).format(`YYYY-MM-DD`):hooks(String(S.timeStamp)).format(`YYYY-MM-DD`);else{g++;continue}if(hooks(t,`YYYY-MM-DD`,!0).isValid()){c[t]=(c[t]||0)+1,u.add(t);let g=t.substring(0,7);d[g]=(d[g]||0)+1,m++}else g++}catch{g++}}console.log(`Processed ${m} valid dates, ${g} invalid dates`),console.log(`Found ${u.size} unique dates`),console.log(`Date distribution by month:`,d),this.heatmapData=c},createWeeksData(){this.weeks=[],this.maxInRange=0;let t=hooks(),c=t.clone().subtract(52,`weeks`),u=c.clone().startOf(`week`);console.log(`Creating weeks data from`,c.format(`YYYY-MM-DD`),`to`,t.format(`YYYY-MM-DD`)),Object.keys(this.heatmapData).length===0&&console.log(`No heatmap data available to display`);let d=Object.keys(this.heatmapData).slice(0,5);for(console.log(`Sample dates in heatmap data:`,d);u.isSameOrBefore(t);){let t=[];for(let c=0;c<7;c++){let c=u.format(`YYYY-MM-DD`),d={date:c,count:this.heatmapData[c]||0};t.push(d),d.count>this.maxInRange&&(this.maxInRange=d.count),u.add(1,`day`)}this.weeks.push(t)}console.log(`Weeks data created, maxInRange:`,this.maxInRange);let m=0,g=0;Object.values(this.heatmapData).forEach(t=>{m++,g+=t}),console.log(`Activity summary: ${g} activities across ${m} days`)},getColor(t){if(this.maxInRange===0)return this.hslToString(this.inactiveColor);let c=t===0?0:Math.min(2*t/this.maxInRange,1),u=this.activeColor;if(this.enableSeasonalColors){let t=hooks();t.month()===11&&t.date()>=5?u=Math.random()>.5?{h:350,s:.8,l:.5}:{h:135,s:.8,l:.4}:t.month()===9&&t.date()>=25&&(u=Math.random()>.5?{h:0,s:0,l:0}:Math.random()>.5?{h:30,s:1,l:.5}:{h:270,s:1,l:.5})}let d=u.h,m=this.interpolate(this.inactiveColor.s,u.s,c),g=this.interpolate(this.inactiveColor.l,u.l,c);return this.hslToString({h:d,s:m,l:g})},interpolate(t,c,u){return t+(c-t)*u},hslToString(t){return`hsl(${t.h}, ${t.s*100}%, ${t.l*100}%)`},showTooltip(t,c){this.tooltipData=t,this.tooltipStyle={position:`absolute`,left:`${c.pageX+10}px`,top:`${c.pageY+10}px`}},hideTooltip(){this.tooltipData=null}}}),De$1=[`width`,`height`],Oe$1=[`transform`],ke$1=[`y`,`width`,`height`,`fill`,`onMouseover`],__name(_sfc_render$26,`_sfc_render`),Ae$1=F$3(Ee$1,[[`render`,_sfc_render$26],[`__scopeId`,`data-v-ca46239a`]]),je$1=defineComponent({name:`SkMouseTrap`,props:{refreshInterval:{type:Number,default:500}},data(){return{commands:[],display:!1,intervalId:null}},created(){this.intervalId=window.setInterval(this.refreshState,this.refreshInterval)},beforeUnmount(){this.intervalId!==null&&clearInterval(this.intervalId)},methods:{refreshState(){this.commands=I$2.commands,this.display=this.commands.length>0}}}),Me$1={class:`text-caption ml-2`},__name(_sfc_render$25,`_sfc_render`),Ne$1=F$3(je$1,[[`render`,_sfc_render$25]]),Pe$1=defineComponent({name:`SkMouseTrapToolTip`,props:{hotkey:{type:[String,Array],required:!0},command:{type:String,required:!0},disabled:{type:Boolean,default:!1},position:{type:String,default:`top`},showTooltip:{type:Boolean,default:!0},highlightEffect:{type:String,default:`glow`}},emits:[`hotkey-triggered`],setup(t,{emit:c}){let u=ref(null),d=ref(!1);ref(`hotkey-${Math.random().toString(36).substring(2,15)}`);let m=computed(()=>{let c=Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey;return c.includes(` `)?c.toLowerCase().split(` `).map(t=>t.charAt(0)+t.slice(1)).join(`, `):c.toLowerCase().split(`+`).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(` + `)});watch(()=>d.value,c=>{if(!u.value||t.disabled)return;let d=u.value.querySelector(`button, a, input[type="button"], [role="button"]`);d&&(d.style.transition=`all 250ms ease`,c&&t.highlightEffect!==`none`?d.style.filter=`brightness(1.1)`:d.style.filter=``)});let handleKeyDown=t=>{t.key===`Control`&&(d.value=!0)},handleKeyUp=t=>{t.key===`Control`&&(d.value=!1)},handleHotkeyPress=()=>{if(t.disabled||!u.value)return;let d=u.value.querySelector(`button, a, input[type="button"], [role="button"]`);if(d||(d=u.value.querySelector(`v-list-item, .v-list-item, router-link, .router-link, a, [to]`)),!d&&(u.value.hasAttribute(`to`)||u.value.tagName===`A`||u.value.classList.contains(`v-list-item`))&&(d=u.value),!d){let t=u.value.closest(`v-list-item, .v-list-item, a, [to]`);t&&(d=t)}if(d)if(d.hasAttribute(`to`)){let u=d.getAttribute(`to`);if(u&&window.location.pathname!==u){let t=window.$nuxt?.$router||window.$router;t&&typeof t.push==`function`?t.push(u):window.location.pathname=u}c(`hotkey-triggered`,t.hotkey)}else d.click(),c(`hotkey-triggered`,t.hotkey);else console.log(`No clickable element found for hotkey`,t.hotkey),c(`hotkey-triggered`,t.hotkey)},registerHotkey=()=>{t.disabled||I$2.addBinding({hotkey:t.hotkey,command:t.command,callback:handleHotkeyPress})},unregisterHotkey=()=>{t.disabled||I$2.removeBinding(t.hotkey)};return watch(()=>t.disabled,t=>{t?unregisterHotkey():registerHotkey()}),onMounted(()=>{document.addEventListener(`keydown`,handleKeyDown),document.addEventListener(`keyup`,handleKeyUp),registerHotkey()}),onBeforeUnmount(()=>{document.removeEventListener(`keydown`,handleKeyDown),document.removeEventListener(`keyup`,handleKeyUp),unregisterHotkey()}),{wrapperElement:u,isControlKeyPressed:d,formattedHotkey:m}}}),__name(_sfc_render$24,`_sfc_render`),Fe$1=F$3(Pe$1,[[`render`,_sfc_render$24],[`__scopeId`,`data-v-5d6fb09c`]]),{setInstance:Ie$1,getInstance:Le$1,alertUser:Z$2}=(()=>{let t=null;return{setInstance(c){t=c},getInstance(){return t},alertUser(c){let u=t;if(u){u.addSnack(c);return}console.error(`SnackbarService not found`)}}})(),Re$1=defineComponent({name:`SnackbarService`,data(){return{snacks:[],show:[]}},mounted(){Ie$1(this)},methods:{addSnack(t){this.snacks.push(t),this.show.push(!0)},close(){this.show.pop(),this.show.push(!1)},getColor(t){if(t.status===Status.ok)return`success`;if(t.status===Status.error)return`error`;if(t.status===Status.warning)return`yellow`}}}),ze$1={class:`d-flex align-center justify-space-between w-100`},__name(_sfc_render$23,`_sfc_render`),Be$1=F$3(Re$1,[[`render`,_sfc_render$23]]),Ve$1=defineComponent({name:`PaginatingToolbar`,props:{pages:{type:Array,required:!0},page:{type:Number,required:!0},title:{type:String,required:!1,default:``},subtitle:{type:String,required:!1,default:``}},emits:[`first`,`prev`,`next`,`last`,`set-page`]}),He$1={key:0,class:`ms-2 text-subtitle-2`,"data-cy":`paginating-toolbar-subtitle`},__name(_sfc_render$22,`_sfc_render`),Ue$1=F$3(Ve$1,[[`render`,_sfc_render$22],[`__scopeId`,`data-v-a75fea7e`]]),We$1=defineComponent({name:`CardSearch`,emits:{search:t=>typeof t==`string`},data(){return{query:``}},methods:{search(){this.$emit(`search`,this.query)}}}),Ge$1={class:`card-search`},__name(_sfc_render$21,`_sfc_render`),Ke$1=F$3(We$1,[[`render`,_sfc_render$21]]),qe$1=defineComponent({name:`CardSearchResults`,emits:{"card-selected":t=>typeof t.cardId==`string`&&typeof t.courseId==`string`},props:{query:{type:String,required:!0},dataLayer:{type:Object,required:!0},courseFilter:{type:String,default:null}},data(){return{cards:[],loading:!1,error:null,selectedCardId:null}},watch:{query:{immediate:!0,handler(t){t&&this.fetchResults(t)}}},methods:{async fetchResults(t){this.loading=!0,this.error=null;try{let c=[];if(this.courseFilter)c=[this.courseFilter],console.log(`Filtering search to course: ${this.courseFilter}`);else{let{CourseLookup:t}=await Promise.resolve().then(()=>(init_dist(),dist_exports));c=(await t.allCourseWare()).map(t=>t._id).filter(Boolean),console.log(`Searching across all ${c.length} courses`)}let u=[];for(let d of c){let c=await this.dataLayer.getCourseDB(d).searchCards(t);for(let t of c)u.push({...t,courseId:d})}this.cards=u,console.log(`Search completed: found ${u.length} cards across ${c.length} courses`)}catch(t){this.error=`Error fetching search results.`,console.error(`Search error:`,t)}finally{this.loading=!1}},selectCard(t){this.selectedCardId=t._id,this.$emit(`card-selected`,{cardId:t._id,courseId:t.courseId})}}}),Je$1={class:`card-search-results`},Ye$1={key:0},Xe$1={key:1},Ze$1={key:2},__name(_sfc_render$20,`_sfc_render`),Qe$1=F$3(qe$1,[[`render`,_sfc_render$20],[`__scopeId`,`data-v-285e13bd`]]),$e$1=defineComponent({name:`CardHistoryViewer`,props:{cardId:{type:String,required:!0},courseId:{type:String,required:!0},userId:{type:String,required:!0},userDB:{type:Object,required:!0}},data(){return{history:[],cardHistory:null,bestIntervalHumanized:``,loading:!1,error:null,headers:[{title:`Timestamp`,key:`formattedTimeStamp`},{title:`Interval`,key:`userFriendlyInterval`},{title:`Time Spent (s)`,key:`timeSpentSeconds`},{title:`Correct?`,key:`isCorrect`},{title:`Performance`,key:`performance`},{title:`Prior Attempts`,key:`priorAttemps`},{title:`User Answer`,key:`userAnswer`}]}},watch:{cardId:{immediate:!0,handler(t){t&&this.userDB&&this.fetchHistory()}},userDB:{handler(t){t&&this.cardId&&this.fetchHistory()}}},methods:{async fetchHistory(){this.loading=!0,this.error=null;try{let t=getCardHistoryID(this.courseId,this.cardId),c=await this.userDB.get(t);this.cardHistory=c,this.bestIntervalHumanized=hooks.duration(c.bestInterval,`seconds`).humanize();let u=[...c.records].sort((t,c)=>hooks(t.timeStamp).valueOf()-hooks(c.timeStamp).valueOf());this.history=u.map((t,c)=>{let d=hooks(t.timeStamp),m={...t,formattedTimeStamp:d.format(`YYYY-MM-DD HH:mm:ss`),timeSpentSeconds:Math.round(t.timeSpent/1e3),isCorrect:t.isCorrect,performance:t.performance,priorAttemps:t.priorAttemps,userAnswer:t.userAnswer};if(c>0){let t=hooks(u[c-1].timeStamp),g=d.diff(t,`seconds`,!0);m.intervalFromPrevious=Math.round(g*100)/100,m.userFriendlyInterval=`${m.intervalFromPrevious} sec (${hooks.duration(g,`seconds`).humanize()})`}return m})}catch(t){this.error=`Error fetching card history.`,console.error(t)}finally{this.loading=!1}}}}),et$1={class:`card-history-viewer`},tt$1={key:0},nt$1={key:1},rt$1={key:2,class:`error-message`},it$1={key:3},__name(_sfc_render$19,`_sfc_render`),at$1=F$3($e$1,[[`render`,_sfc_render$19],[`__scopeId`,`data-v-a4bdfdfb`]]),Displayable=class{constructor(t){if(t.length===0)throw Error(`
|
|
475
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_unsupportedIterableToArray(t)||_nonIterableSpread()}var b=u(`a352`),S=u.n(b);function removeNode(t){t.parentElement!==null&&t.parentElement.removeChild(t)}function insertNodeAt(t,c,u){var d=u===0?t.children[0]:t.children[u-1].nextSibling;t.insertBefore(c,d)}var C=u(`dbf1`);u(`13d5`),u(`4fad`),u(`ac1f`),u(`5319`);function cached(t){var c=Object.create(null);return function cachedFn(u){return c[u]||(c[u]=t(u))}}var w=/-(\w)/g,T=cached(function(t){return t.replace(w,function(t,c){return c.toUpperCase()})});u(`5db7`),u(`73d9`);var E=[`Start`,`Add`,`Remove`,`Update`,`End`],D=[`Choose`,`Unchoose`,`Sort`,`Filter`,`Clone`],O=[`Move`],Or=[O,E,D].flatMap(function(t){return t}).map(function(t){return`on${t}`}),kr={manage:O,manageAndEmit:E,emit:D};function isReadOnly(t){return Or.indexOf(t)!==-1}u(`caad`),u(`2ca0`);var Ar=`a.abbr.address.area.article.aside.audio.b.base.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.data.datalist.dd.del.details.dfn.dialog.div.dl.dt.em.embed.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.link.main.map.mark.math.menu.menuitem.meta.meter.nav.noscript.object.ol.optgroup.option.output.p.param.picture.pre.progress.q.rb.rp.rt.rtc.ruby.s.samp.script.section.select.slot.small.source.span.strong.style.sub.summary.sup.svg.table.tbody.td.template.textarea.tfoot.th.thead.time.title.tr.track.u.ul.var.video.wbr`.split(`.`);function isHtmlTag(t){return Ar.includes(t)}function isTransition(t){return[`transition-group`,`TransitionGroup`].includes(t)}function isHtmlAttribute(t){return[`id`,`class`,`role`,`style`].includes(t)||t.startsWith(`data-`)||t.startsWith(`aria-`)||t.startsWith(`on`)}function project(t){return t.reduce(function(t,c){var u=_slicedToArray(c,2),d=u[0];return t[d]=u[1],t},{})}function getComponentAttributes(t){var c=t.$attrs,u=t.componentData,d=u===void 0?{}:u;return _objectSpread2(_objectSpread2({},project(Object.entries(c).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],isHtmlAttribute(u)}))),d)}function createSortableOption(t){var c=t.$attrs,u=t.callBackBuilder,d=project(getValidSortableEntries(c));Object.entries(u).forEach(function(t){var c=_slicedToArray(t,2),u=c[0],m=c[1];kr[u].forEach(function(t){d[`on${t}`]=m(t)})});var m=`[data-draggable]${d.draggable||``}`;return _objectSpread2(_objectSpread2({},d),{},{draggable:m})}function getValidSortableEntries(t){return Object.entries(t).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],!isHtmlAttribute(u)}).map(function(t){var c=_slicedToArray(t,2),u=c[0],d=c[1];return[T(u),d]}).filter(function(t){var c=_slicedToArray(t,2),u=c[0];return c[1],!isReadOnly(u)})}u(`c740`);function _classCallCheck(t,c){if(!(t instanceof c))throw TypeError(`Cannot call a class as a function`)}function _defineProperties(t,c){for(var u=0;u<c.length;u++){var d=c[u];d.enumerable=d.enumerable||!1,d.configurable=!0,`value`in d&&(d.writable=!0),Object.defineProperty(t,d.key,d)}}function _createClass(t,c,u){return c&&_defineProperties(t.prototype,c),u&&_defineProperties(t,u),t}var jr=function getHtmlElementFromNode(t){return t.el},Mr=function addContext(t,c){return t.__draggable_context=c},Nr=function getContext(t){return t.__draggable_context},Pr=function(){function ComponentStructure(t){var c=t.nodes,u=c.header,d=c.default,m=c.footer,g=t.root,b=t.realList;_classCallCheck(this,ComponentStructure),this.defaultNodes=d,this.children=[].concat(_toConsumableArray(u),_toConsumableArray(d),_toConsumableArray(m)),this.externalComponent=g.externalComponent,this.rootTransition=g.transition,this.tag=g.tag,this.realList=b}return _createClass(ComponentStructure,[{key:`render`,value:function render(t,c){var u=this.tag,d=this.children;return t(u,c,this._isRootComponent?{default:function _default(){return d}}:d)}},{key:`updated`,value:function updated(){var t=this.defaultNodes,c=this.realList;t.forEach(function(t,u){Mr(jr(t),{element:c[u],index:u})})}},{key:`getUnderlyingVm`,value:function getUnderlyingVm(t){return Nr(t)}},{key:`getVmIndexFromDomIndex`,value:function getVmIndexFromDomIndex(t,c){var u=this.defaultNodes,d=u.length,m=c.children,g=m.item(t);if(g===null)return d;var b=Nr(g);if(b)return b.index;if(d===0)return 0;var S=jr(u[0]);return t<_toConsumableArray(m).findIndex(function(t){return t===S})?0:d}},{key:`_isRootComponent`,get:function get(){return this.externalComponent||this.rootTransition}}]),ComponentStructure}(),Fr=u(`8bbf`);function getSlot(t,c){var u=t[c];return u?u():[]}function computeNodes(t){var c=t.$slots,u=t.realList,d=t.getKey,m=u||[],g=_slicedToArray([`header`,`footer`].map(function(t){return getSlot(c,t)}),2),b=g[0],S=g[1],C=c.item;if(!C)throw Error(`draggable element must have an item slot`);var w=m.flatMap(function(t,c){return C({element:t,index:c}).map(function(c){return c.key=d(t),c.props=_objectSpread2(_objectSpread2({},c.props||{}),{},{"data-draggable":!0}),c})});if(w.length!==m.length)throw Error(`Item slot must have only one child`);return{header:b,footer:S,default:w}}function getRootInformation(t){var c=isTransition(t),u=!isHtmlTag(t)&&!c;return{transition:c,externalComponent:u,tag:u?(0,Fr.resolveComponent)(t):c?Fr.TransitionGroup:t}}function computeComponentStructure(t){var c=t.$slots,u=t.tag,d=t.realList,m=t.getKey;return new Pr({nodes:computeNodes({$slots:c,realList:d,getKey:m}),root:getRootInformation(u),realList:d})}function _emit(t,c){var u=this;(0,Fr.nextTick)(function(){return u.$emit(t.toLowerCase(),c)})}function _manage(t){var c=this;return function(u,d){if(c.realList!==null)return c[`onDrag${t}`](u,d)}}function _manageAndEmit(t){var c=this,u=_manage.call(this,t);return function(d,m){u.call(c,d,m),_emit.call(c,t,d)}}var Ir=null,Lr={list:{type:Array,required:!1,default:null},modelValue:{type:Array,required:!1,default:null},itemKey:{type:[String,Function],required:!0},clone:{type:Function,default:function _default(t){return t}},tag:{type:String,default:`div`},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},Rr=[`update:modelValue`,`change`].concat(_toConsumableArray([].concat(_toConsumableArray(kr.manageAndEmit),_toConsumableArray(kr.emit)).map(function(t){return t.toLowerCase()})));c.default=(0,Fr.defineComponent)({name:`draggable`,inheritAttrs:!1,props:Lr,emits:Rr,data:function data(){return{error:!1}},render:function render(){try{this.error=!1;var t=this.$slots,c=this.$attrs,u=this.tag,d=this.componentData,m=this.realList,g=this.getKey,b=computeComponentStructure({$slots:t,tag:u,realList:m,getKey:g});this.componentStructure=b;var S=getComponentAttributes({$attrs:c,componentData:d});return b.render(Fr.h,S)}catch(t){return this.error=!0,(0,Fr.h)(`pre`,{style:{color:`red`}},t.stack)}},created:function created(){this.list!==null&&this.modelValue!==null&&C.a.error(`modelValue and list props are mutually exclusive! Please set one or another.`)},mounted:function mounted(){var t=this;if(!this.error){var c=this.$attrs,u=this.$el;this.componentStructure.updated();var d=createSortableOption({$attrs:c,callBackBuilder:{manageAndEmit:function manageAndEmit(c){return _manageAndEmit.call(t,c)},emit:function emit(c){return _emit.bind(t,c)},manage:function manage(c){return _manage.call(t,c)}}}),m=u.nodeType===1?u:u.parentElement;this._sortable=new S.a(m,d),this.targetDomElement=m,m.__draggable_component__=this}},updated:function updated(){this.componentStructure.updated()},beforeUnmount:function beforeUnmount(){this._sortable!==void 0&&this._sortable.destroy()},computed:{realList:function realList(){return this.list||this.modelValue},getKey:function getKey(){var t=this.itemKey;return typeof t==`function`?t:function(c){return c[t]}}},watch:{$attrs:{handler:function handler(t){var c=this._sortable;c&&getValidSortableEntries(t).forEach(function(t){var u=_slicedToArray(t,2),d=u[0],m=u[1];c.option(d,m)})},deep:!0}},methods:{getUnderlyingVm:function getUnderlyingVm(t){return this.componentStructure.getUnderlyingVm(t)||null},getUnderlyingPotencialDraggableComponent:function getUnderlyingPotencialDraggableComponent(t){return t.__draggable_component__},emitChanges:function emitChanges(t){var c=this;(0,Fr.nextTick)(function(){return c.$emit(`change`,t)})},alterList:function alterList(t){if(this.list){t(this.list);return}var c=_toConsumableArray(this.modelValue);t(c),this.$emit(`update:modelValue`,c)},spliceList:function spliceList(){var t=arguments;this.alterList(function spliceList(c){return c.splice.apply(c,_toConsumableArray(t))})},updatePosition:function updatePosition(t,c){this.alterList(function updatePosition(u){return u.splice(c,0,u.splice(t,1)[0])})},getRelatedContextFromMoveEvent:function getRelatedContextFromMoveEvent(t){var c=t.to,u=t.related,d=this.getUnderlyingPotencialDraggableComponent(c);if(!d)return{component:d};var m=d.realList,g={list:m,component:d};return c!==u&&m?_objectSpread2(_objectSpread2({},d.getUnderlyingVm(u)||{}),g):g},getVmIndexFromDomIndex:function getVmIndexFromDomIndex(t){return this.componentStructure.getVmIndexFromDomIndex(t,this.targetDomElement)},onDragStart:function onDragStart(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),Ir=t.item},onDragAdd:function onDragAdd(t){var c=t.item._underlying_vm_;if(c!==void 0){removeNode(t.item);var u=this.getVmIndexFromDomIndex(t.newIndex);this.spliceList(u,0,c);var d={element:c,newIndex:u};this.emitChanges({added:d})}},onDragRemove:function onDragRemove(t){if(insertNodeAt(this.$el,t.item,t.oldIndex),t.pullMode===`clone`){removeNode(t.clone);return}var c=this.context,u=c.index,d=c.element;this.spliceList(u,1);var m={element:d,oldIndex:u};this.emitChanges({removed:m})},onDragUpdate:function onDragUpdate(t){removeNode(t.item),insertNodeAt(t.from,t.item,t.oldIndex);var c=this.context.index,u=this.getVmIndexFromDomIndex(t.newIndex);this.updatePosition(c,u);var d={element:this.context.element,oldIndex:c,newIndex:u};this.emitChanges({moved:d})},computeFutureIndex:function computeFutureIndex(t,c){if(!t.element)return 0;var u=_toConsumableArray(c.to.children).filter(function(t){return t.style.display!==`none`}),d=u.indexOf(c.related),m=t.component.getVmIndexFromDomIndex(d);return u.indexOf(Ir)!==-1||!c.willInsertAfter?m:m+1},onDragMove:function onDragMove(t,c){var u=this.move,d=this.realList;if(!u||!d)return!0;var m=this.getRelatedContextFromMoveEvent(t),g=this.computeFutureIndex(m,t),b=_objectSpread2(_objectSpread2({},this.context),{},{futureIndex:g});return u(_objectSpread2(_objectSpread2({},t),{},{relatedContext:m,draggedContext:b}),c)},onDragEnd:function onDragEnd(){Ir=null}}})}),fb6a:(function(t,c,u){"use strict";var d=u(`23e7`),m=u(`861d`),g=u(`e8b5`),b=u(`23cb`),S=u(`50c4`),C=u(`fc6a`),w=u(`8418`),T=u(`b622`),E=u(`1dde`),D=u(`ae40`),O=E(`slice`),Or=D(`slice`,{ACCESSORS:!0,0:0,1:2}),kr=T(`species`),Ar=[].slice,jr=Math.max;d({target:`Array`,proto:!0,forced:!O||!Or},{slice:function slice(t,c){var u=C(this),d=S(u.length),T=b(t,d),E=b(c===void 0?d:c,d),D,O,Or;if(g(u)&&(D=u.constructor,typeof D==`function`&&(D===Array||g(D.prototype))?D=void 0:m(D)&&(D=D[kr],D===null&&(D=void 0)),D===Array||D===void 0))return Ar.call(u,T,E);for(O=new(D===void 0?Array:D)(jr(E-T,0)),Or=0;T<E;T++,Or++)T in u&&w(O,Or,u[T]);return O.length=Or,O}})}),fc6a:(function(t,c,u){var d=u(`44ad`),m=u(`1d80`);t.exports=function(t){return d(m(t))}}),fdbc:(function(t,c){t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}}),fdbf:(function(t,c,u){t.exports=u(`4930`)&&!Symbol.sham&&typeof Symbol.iterator==`symbol`})}).default})}));function K$2(t,c,u,d,m,g){return u.scope.edit?withDirectives((openBlock(),createElementBlock(`input`,{key:0,"onUpdate:modelValue":c[0]||(c[0]=t=>u.scope.element.text=t),maxlength:u.scope.maxlength,type:`text`,class:`ti-tag-input`,size:`1`,onInput:c[1]||(c[1]=t=>u.scope.validateTag(u.scope.index,t)),onBlur:c[2]||(c[2]=t=>u.scope.performCancelEdit(u.scope.index)),onKeydown:c[3]||(c[3]=t=>u.scope.performSaveEdit(u.scope.index,t))},null,40,R$1)),[[vModelText,u.scope.element.text]]):createCommentVNode(``,!0)}function L$1(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,`default`)?t.default:t}function ke$2(t,c,u,d,m,g){let b=resolveComponent(`tag-input`),S=resolveComponent(`draggable`);return openBlock(),createElementBlock(`div`,{class:normalizeClass([`vue-tags-input`,[{"ti-disabled":t.disabled},{"ti-focus":t.focused},t.$attrs.class]]),style:normalizeStyle(t.$attrs.style)},[createBaseVNode(`div`,X$2,[t.isDraggable?(openBlock(),createBlock(S,{key:0,modelValue:t.tagsCopy,"onUpdate:modelValue":c[9]||(c[9]=c=>t.tagsCopy=c),group:`tags`,class:`ti-tags`,tag:`ul`,draggable:`.item`,handle:t.draggableHandle?`.handle`:``,"ghost-class":`ghost-tag`,"drag-class":`drag-tag`,"item-key":t.getTagIndex,onStart:c[10]||(c[10]=c=>t.drag=!0),onEnd:c[11]||(c[11]=c=>{t.drag=!1,t.tagOrderChanged()})},{item:withCtx(({element:c,index:u})=>[(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[{"ti-editing":t.tagsEditStatus[u]},c.tiClasses,c.classes,{"ti-deletion-mark":t.isMarked(u)}],`ti-tag item`]),tabindex:`0`,onClick:d=>t.$emit(`tag-clicked`,{element:c,index:u})},[createBaseVNode(`div`,Z$3,[t.draggableHandle?(openBlock(),createElementBlock(`span`,_,`::`)):createCommentVNode(``,!0),t.$slots[`tag-left`]?(openBlock(),createElementBlock(`div`,x,[renderSlot(t.$slots,`tag-left`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0),createBaseVNode(`div`,{ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass({"ti-hidden":t.tagsEditStatus[u]}),onClick:c=>t.performEditTag(u)},toDisplayString(c.text),11,ee)),t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:1,scope:{edit:t.tagsEditStatus[u],maxlength:t.maxlength,element:c,index:u,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),renderSlot(t.$slots,`tag-center`,{tag:c,index:u,maxlength:t.maxlength,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)],512),t.$slots[`tag-right`]?(openBlock(),createElementBlock(`div`,te$1,[renderSlot(t.$slots,`tag-right`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0)]),createBaseVNode(`div`,se$2,[t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:0,class:`ti-icon-undo`,onClick:c=>t.cancelEdit(u)},null,8,ae$2)),[[vShow,t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:1,class:`ti-icon-close`,onClick:c=>t.performDeleteTag(u)},null,8,ie$2)),[[vShow,!t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?renderSlot(t.$slots,`tag-actions`,{key:2,tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0):createCommentVNode(``,!0)])],14,Y$2))]),footer:withCtx(()=>[createBaseVNode(`li`,re$2,[createBaseVNode(`input`,mergeProps({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[c[0]||(c[0]=c=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,c)),c[2]||(c[2]=withKeys((...c)=>t.invokeDelete&&t.invokeDelete(...c),[`delete`])),c[3]||(c[3]=withKeys((...c)=>t.performBlur&&t.performBlur(...c),[`tab`])),c[4]||(c[4]=withKeys(c=>t.selectItem(c,`before`),[`up`])),c[5]||(c[5]=withKeys(c=>t.selectItem(c,`after`),[`down`]))],onPaste:c[1]||(c[1]=(...c)=>t.addTagsFromPaste&&t.addTagsFromPaste(...c)),onInput:c[6]||(c[6]=(...c)=>t.updateNewTag&&t.updateNewTag(...c)),onFocus:c[7]||(c[7]=c=>t.focused=!0),onClick:c[8]||(c[8]=c=>t.performClick(c))}),null,16,oe$2)])]),_:3},8,[`modelValue`,`handle`,`item-key`])):(openBlock(),createElementBlock(`ul`,le$2,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tagsCopy,(c,u)=>(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[{"ti-editing":t.tagsEditStatus[u]},c.tiClasses,c.classes,{"ti-deletion-mark":t.isMarked(u)}],`ti-tag item`]),tabindex:`0`,onClick:d=>t.$emit(`tag-clicked`,{element:c,index:u})},[createBaseVNode(`div`,de$1,[t.$slots[`tag-left`]?(openBlock(),createElementBlock(`div`,ue$1,[renderSlot(t.$slots,`tag-left`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0),createBaseVNode(`div`,{ref_for:!0,ref:t.setTagCenter,class:`ti-tag-center`},[t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass({"ti-hidden":t.tagsEditStatus[u]}),onClick:c=>t.performEditTag(u)},toDisplayString(c.text),11,ge$1)),t.$slots[`tag-center`]?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:1,scope:{edit:t.tagsEditStatus[u],maxlength:t.maxlength,element:c,index:u,validateTag:t.createChangedTag,performCancelEdit:t.cancelEdit,performSaveEdit:t.performSaveTag}},null,8,[`scope`])),renderSlot(t.$slots,`tag-center`,{tag:c,index:u,maxlength:t.maxlength,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,validateTag:t.createChangedTag,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)],512),t.$slots[`tag-right`]?(openBlock(),createElementBlock(`div`,pe$2,[renderSlot(t.$slots,`tag-right`,{tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0)])):createCommentVNode(``,!0)]),createBaseVNode(`div`,fe$1,[t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:0,class:`ti-icon-undo`,onClick:c=>t.cancelEdit(u)},null,8,me$1)),[[vShow,t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?createCommentVNode(``,!0):withDirectives((openBlock(),createElementBlock(`i`,{key:1,class:`ti-icon-close`,onClick:c=>t.performDeleteTag(u)},null,8,he$1)),[[vShow,!t.tagsEditStatus[u]]]),t.$slots[`tag-actions`]?renderSlot(t.$slots,`tag-actions`,{key:2,tag:c,index:u,edit:t.tagsEditStatus[u],performSaveEdit:t.performSaveTag,performDelete:t.performDeleteTag,performCancelEdit:t.cancelEdit,performOpenEdit:t.performEditTag,deletionMark:t.isMarked(u)},void 0,!0):createCommentVNode(``,!0)])],14,ne$2))),128)),createBaseVNode(`li`,ce$2,[createBaseVNode(`input`,mergeProps({ref:`newTagInput`},t.$attrs,{class:[[t.createClasses(t.newTag,t.tags,t.validation,t.isDuplicate)],`ti-new-tag-input`],placeholder:t.placeholder,value:t.newTag,maxlength:t.maxlength,disabled:t.disabled,type:`text`,size:`1`,onKeydown:[c[12]||(c[12]=c=>t.performAddTags(t.filteredAutocompleteItems[t.selectedItem]||t.newTag,c)),c[14]||(c[14]=withKeys((...c)=>t.invokeDelete&&t.invokeDelete(...c),[`delete`])),c[15]||(c[15]=withKeys((...c)=>t.performBlur&&t.performBlur(...c),[`tab`])),c[16]||(c[16]=withKeys(c=>t.selectItem(c,`before`),[`up`])),c[17]||(c[17]=withKeys(c=>t.selectItem(c,`after`),[`down`]))],onPaste:c[13]||(c[13]=(...c)=>t.addTagsFromPaste&&t.addTagsFromPaste(...c)),onInput:c[18]||(c[18]=(...c)=>t.updateNewTag&&t.updateNewTag(...c)),onFocus:c[19]||(c[19]=c=>t.focused=!0),onClick:c[20]||(c[20]=c=>t.performClick(c))}),null,16,ye$1)])]))]),renderSlot(t.$slots,`between-elements`,{},void 0,!0),t.autocompleteOpen?(openBlock(),createElementBlock(`div`,{key:0,class:`ti-autocomplete`,onMouseout:c[21]||(c[21]=c=>t.selectedItem=null)},[renderSlot(t.$slots,`autocomplete-header`,{},void 0,!0),createBaseVNode(`ul`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.filteredAutocompleteItems,(c,u)=>(openBlock(),createElementBlock(`li`,{key:u,style:normalizeStyle(c.style),class:normalizeClass([[c.tiClasses,c.classes,{"ti-selected-item":t.isSelected(u)}],`ti-item`]),onMouseover:c=>t.disabled?!1:t.selectedItem=u},[t.$slots[`autocomplete-item`]?renderSlot(t.$slots,`autocomplete-item`,{key:1,item:c,index:u,performAdd:c=>t.performAddTags(c,void 0,`autocomplete`),selected:t.isSelected(u)},void 0,!0):(openBlock(),createElementBlock(`div`,{key:0,onClick:u=>t.performAddTags(c,void 0,`autocomplete`)},toDisplayString(c.text),9,ve$1))],46,Te$1))),128))]),renderSlot(t.$slots,`autocomplete-footer`,{},void 0,!0)],32)):createCommentVNode(``,!0)],6)}var import_vuedraggable_umd,B$1,N$2,R$1,q$2,M$2,F$2,z$1,H$1,J$2,y,W$2,V$1,v,G$2,Q$2,X$2,Y$2,Z$3,_,x,ee,te$1,se$2,ae$2,ie$2,re$2,oe$2,le$2,ne$2,de$1,ue$1,ge$1,pe$2,fe$1,me$1,he$1,ce$2,ye$1,Te$1,ve$1,$$3,init_vue_tags_input=__esmMin((()=>{init_style(),init_vue_runtime_esm_bundler(),import_vuedraggable_umd=__toESM$2(require_vuedraggable_umd(),1),B$1=__name$2((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`B`),N$2={name:`TagInput`,props:{scope:{type:Object,required:!0}}},R$1=[`maxlength`],__name$2(K$2,`K`),q$2=B$1(N$2,[[`render`,K$2],[`__scopeId`,`data-v-a3408643`]]),M$2=__name$2(t=>!t.some(t=>{let c=!t.text;c&&console.warn(`Missing property "text"`,t);let u=!1;return t.classes&&(u=typeof t.classes!=`string`),u&&console.warn(`Property "classes" must be type of string`,t),c||u}),`M`),F$2=__name$2(t=>!t.some(t=>{if(typeof t==`number`){let c=isFinite(t)&&Math.floor(t)===t;return c||console.warn(`Only numerics are allowed for this prop. Found:`,t),!c}else if(typeof t==`string`){let c=/\W|[a-z]|!\d/i.test(t);return c||console.warn(`Only alpha strings are allowed for this prop. Found:`,t),!c}else return console.warn(`Only numeric and string values are allowed. Found:`,t),!1}),`F`),z$1={modelValue:{type:String,default:``,required:!0},tags:{type:Array,default:()=>[],validator:M$2},autocompleteItems:{type:Array,default:()=>[],validator:M$2},allowEditTags:{type:Boolean,default:!1},autocompleteFilterDuplicates:{default:!0,type:Boolean},addOnlyFromAutocomplete:{type:Boolean,default:!1},autocompleteMinLength:{type:Number,default:1},autocompleteAlwaysOpen:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:`Add Tag`},addOnKey:{type:Array,default:()=>[13],validator:F$2},saveOnKey:{type:Array,default:()=>[13],validator:F$2},maxTags:{type:Number},maxlength:{type:Number},validation:{type:Array,default:()=>[],validator(t){return!t.some(t=>{let c=!t.rule;c&&console.warn(`Property "rule" is missing`,t);let u=t.rule&&(typeof t.rule==`string`||t.rule instanceof RegExp||{}.toString.call(t.rule)===`[object Function]`);u||console.warn(`A rule must be type of string, RegExp or function. Found:`,JSON.stringify(t.rule));let d=!t.classes;d&&console.warn(`Property "classes" is missing`,t);let m=t.type&&typeof t.type!=`string`;return m&&console.warn(`Property "type" must be type of string. Found:`,t),!u||c||d||m})}},separators:{type:Array,default:()=>[`;`],validator(t){return!t.some(t=>{let c=typeof t!=`string`;return c&&console.warn(`Separators must be type of string. Found:`,t),c})}},avoidAddingDuplicates:{type:Boolean,default:!0},addOnBlur:{type:Boolean,default:!0},isDuplicate:{type:Function,default:null},addFromPaste:{type:Boolean,default:!0},deleteOnBackspace:{default:!0,type:Boolean},isDraggable:{type:Boolean,default:!1},draggableHandle:{type:Boolean,default:!1},onBeforeAddingTag:Function,onBeforeDeletingTag:Function,onBeforeEditingTag:Function,onBeforeSavingTag:Function},__name$2(L$1,`L`),H$1=L$1(function e(t,c){if(t===c)return!0;if(t&&c&&typeof t==`object`&&typeof c==`object`){if(t.constructor!==c.constructor)return!1;var u,d,m;if(Array.isArray(t)){if(u=t.length,u!=c.length)return!1;for(d=u;d--!==0;)if(!e(t[d],c[d]))return!1;return!0}if(t.constructor===RegExp)return t.source===c.source&&t.flags===c.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===c.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===c.toString();if(m=Object.keys(t),u=m.length,u!==Object.keys(c).length)return!1;for(d=u;d--!==0;)if(!Object.prototype.hasOwnProperty.call(c,m[d]))return!1;for(d=u;d--!==0;){var g=m[d];if(!e(t[g],c[g]))return!1}return!0}return t!==t&&c!==c}),J$2=__name$2((t,c)=>c.filter(c=>{let{text:u}=t;return typeof c.rule==`string`?!new RegExp(c.rule).test(u):c.rule instanceof RegExp?!c.rule.test(u):{}.toString.call(c.rule)===`[object Function]`?c.rule(t):!1}).map(t=>t.classes),`J`),y=t=>JSON.parse(JSON.stringify(t)),W$2=__name$2((t,c)=>{let u=0;for(;u<t.length;){if(c(t[u],u,t))return u;u++}return-1},`W`),V$1=__name$2((t,c,u=[],d)=>{t.text===void 0&&(t={text:t});let m=J$2(t,u),g=W$2(c,c=>c===t),b=y(c),S=g===-1?y(t):b.splice(g,1)[0];return(d?d(b,S):b.map(t=>t.text).indexOf(S.text)!==-1)&&m.push(`ti-duplicate`),m.length===0?m.push(`ti-valid`):m.push(`ti-invalid`),m},`V`),v=(t,...c)=>{t.text===void 0&&(t={text:t});let u=y(t);return u.tiClasses=V$1(t,...c),u},G$2=__name$2((t,...c)=>t.map(u=>v(u,t,...c)),`G`),Q$2={name:`VueTagsInput`,components:{TagInput:q$2,draggable:import_vuedraggable_umd.default},props:z$1,emits:[`adding-duplicate`,`before-adding-tag`,`before-deleting-tag`,`before-editing-tag`,`before-saving-tag`,`max-tags-reached`,`saving-duplicate`,`tags-changed`,`tag-clicked`,`update:modelValue`,`update:tags`,`tag-order-changed`,`click`],inheritAttrs:!1,data(){return{tagCenter:[],newTag:null,tagsCopy:[],tagsEditStatus:null,deletionMark:null,deletionMarkTime:null,selectedItem:null,focused:null}},computed:{autocompleteOpen(){return this.autocompleteAlwaysOpen?!0:this.newTag!==null&&this.newTag.length>=this.autocompleteMinLength&&this.filteredAutocompleteItems.length>0&&this.focused},filteredAutocompleteItems(){let t=this.autocompleteItems.map(t=>v(t,this.tags,this.validation,this.isDuplicate));return this.autocompleteFilterDuplicates?t.filter(this.duplicateFilter):t}},methods:{createClasses:V$1,getSelectedIndex(t){let c=this.filteredAutocompleteItems,u=this.selectedItem,d=c.length-1;if(c.length!==0)return u===null?0:t===`before`&&u===0?d:t===`after`&&u===d?0:t===`after`?u+1:u-1},selectDefaultItem(){this.addOnlyFromAutocomplete&&this.filteredAutocompleteItems.length>0?this.selectedItem=0:this.selectedItem=null},selectItem(t,c){t.preventDefault(),this.selectedItem=this.getSelectedIndex(c)},isSelected(t){return this.selectedItem===t},isMarked(t){return this.deletionMark===t},setTagCenter(t){t&&this.tagCenter.push(t)},invokeDelete(){if(!this.deleteOnBackspace||this.newTag.length>0)return;let t=this.tagsCopy.length-1;this.deletionMark===null?(this.deletionMarkTime=setTimeout(()=>{this.deletionMark=null},1e3),this.deletionMark=t):this.performDeleteTag(t)},addTagsFromPaste(){this.addFromPaste&&setTimeout(()=>this.performAddTags(this.newTag),10)},performEditTag(t){this.allowEditTags&&(this.onBeforeAddingTag||this.editTag(t),this.$emit(`before-editing-tag`,{index:t,tag:this.tagsCopy[t],editTag:()=>this.editTag(t)}))},editTag(t){this.allowEditTags&&(this.toggleEditMode(t),this.focus(t))},toggleEditMode(t){!this.allowEditTags||this.disabled||(this.tagsEditStatus[t]=!this.tagsEditStatus[t])},createChangedTag(t,c){let u=this.tagsCopy[t];u.text=c?c.target.value:this.tagsCopy[t].text,this.tagsCopy[t]=v(u,this.tagsCopy,this.validation,this.isDuplicate)},focus(t){this.$nextTick(()=>{let c=this.tagCenter[t].querySelector(`input.ti-tag-input`);c&&c.focus()})},quote(t){return t.replace(/([()[{*+.$^\\|?])/g,`\\$1`)},cancelEdit(t){this.tags[t]&&(this.tagsCopy[t]=y(v(this.tags[t],this.tags,this.validation,this.isDuplicate)),this.tagsEditStatus[t]=!1)},hasForbiddingAddRule(t){return t.some(t=>{let c=this.validation.find(c=>t===c.classes);return c?c.disableAdd:!1})},createTagTexts(t){let c=new RegExp(this.separators.map(t=>this.quote(t)).join(`|`));return t.split(c).map(t=>({text:t}))},performDeleteTag(t){this.onBeforeDeletingTag||this.deleteTag(t),this.$emit(`before-deleting-tag`,{index:t,tag:this.tagsCopy[t],deleteTag:()=>this.deleteTag(t)})},deleteTag(t){this.disabled||(this.deletionMark=null,clearTimeout(this.deletionMarkTime),this.tagsCopy.splice(t,1),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},noTriggerKey(t,c){let u=this[c].indexOf(t.keyCode)!==-1||this[c].indexOf(t.key)!==-1;return u&&t.preventDefault(),!u},performAddTags(t,c,u){if(this.disabled||c&&this.noTriggerKey(c,`addOnKey`))return;let d=[];typeof t==`object`&&(d=[t]),typeof t==`string`&&(d=this.createTagTexts(t)),d=d.filter(t=>t.text.trim().length>0),d.forEach(t=>{t=v(t,this.tags,this.validation,this.isDuplicate),this.onBeforeAddingTag||this.addTag(t,u),this.$emit(`before-adding-tag`,{tag:t,addTag:()=>this.addTag(t,u)})})},duplicateFilter(t){return this.isDuplicate?!this.isDuplicate(this.tagsCopy,t):!this.tagsCopy.find(c=>c.text===t.text)},addTag(t,c=`new-tag-input`){let u=this.filteredAutocompleteItems.map(t=>t.text);this.addOnlyFromAutocomplete&&u.indexOf(t.text)===-1||this.$nextTick(()=>{if(this.maxTags&&this.maxTags<=this.tagsCopy.length)return this.$emit(`max-tags-reached`,t);if(this.avoidAddingDuplicates&&!this.duplicateFilter(t))return this.$emit(`adding-duplicate`,t);this.hasForbiddingAddRule(t.tiClasses)||(this.newTag=``,this.tagsCopy.push(t),this.$emit(`update:tags`,this.tagsCopy),c===`autocomplete`&&this.$refs.newTagInput.focus(),this.$emit(`tags-changed`,this.tagsCopy))})},performSaveTag(t,c){let u=this.tagsCopy[t];this.disabled||c&&this.noTriggerKey(c,`addOnKey`)||u.text.trim().length!==0&&(this[`on-before-saving-tag`]||this.saveTag(t,u),this.$emit(`before-saving-tag`,{index:t,tag:u,saveTag:()=>this.saveTag(t,u)}))},saveTag(t,c){if(this.avoidAddingDuplicates){let u=y(this.tagsCopy),d=u.splice(t,1)[0];if(this.isDuplicate?this.isDuplicate(u,d):u.map(t=>t.text).indexOf(d.text)!==-1)return this.$emit(`saving-duplicate`,c)}this.hasForbiddingAddRule(c.tiClasses)||(this.tagsCopy[t]=c,this.toggleEditMode(t),this.$emit(`update:tags`,this.tagsCopy),this.$emit(`tags-changed`,this.tagsCopy))},tagsEqual(){return!this.tagsCopy.some((t,c)=>!H$1(t,this.tags[c]))},updateNewTag(t){let c=t.target.value;this.newTag=c,this.$emit(`update:modelValue`,c)},initTags(){this.tagsCopy=G$2(this.tags,this.validation,this.isDuplicate),this.tagsEditStatus=y(this.tags).map(()=>!1),this.tagsEqual()||this.$emit(`update:tags`,this.tagsCopy)},blurredOnClick(t){this.$el.contains(t.target)||this.$el.contains(document.activeElement)||this.performBlur(t)},performBlur(){this.addOnBlur&&this.focused&&this.performAddTags(this.newTag),this.focused=!1},tagOrderChanged(){this.$emit(`tag-order-changed`,this.tagsCopy)},performClick(t){if(this.addOnlyFromAutocomplete)return this.$emit(`click`,t),!1;this.selectedItem=null,this.$emit(`click`,t)},getTagIndex(t){return this.tagsCopy.findIndex(c=>c.text===t.text)}},watch:{modelValue(t){this.addOnlyFromAutocomplete||(this.selectedItem=null),this.newTag=t},tags:{handler(){this.initTags()},deep:!0},autocompleteOpen:`selectDefaultItem`},created(){this.newTag=this.modelValue,this.initTags()},mounted(){this.selectDefaultItem(),document.addEventListener(`click`,this.blurredOnClick)},beforeUpdate(){this.tagCenter=[]},unmounted(){document.removeEventListener(`click`,this.blurredOnClick)}},X$2={class:`ti-input`},Y$2=[`onClick`],Z$3={class:`ti-content`},_={key:0,class:`handle`},x={key:1,class:`ti-tag-left`},ee=[`onClick`],te$1={key:2,class:`ti-tag-right`},se$2={class:`ti-actions`},ae$2=[`onClick`],ie$2=[`onClick`],re$2={class:`ti-new-tag-input-wrapper`},oe$2=[`placeholder`,`value`,`maxlength`,`disabled`],le$2={key:1,class:`ti-tags`},ne$2=[`onClick`],de$1={class:`ti-content`},ue$1={key:0,class:`ti-tag-left`},ge$1=[`onClick`],pe$2={key:1,class:`ti-tag-right`},fe$1={class:`ti-actions`},me$1=[`onClick`],he$1=[`onClick`],ce$2={class:`ti-new-tag-input-wrapper`},ye$1=[`placeholder`,`value`,`maxlength`,`disabled`],Te$1=[`onMouseover`],ve$1=[`onClick`],__name$2(ke$2,`ke`),$$3=B$1(Q$2,[[`render`,ke$2],[`__scopeId`,`data-v-63864685`]]),$$3.install=t=>t.component($$3.name,$$3),typeof window<`u`&&window.Vue&&window.Vue.use($$3)})),common_ui_es_exports=__exportAll$1({AudioAutoPlayer:()=>ut$2,CardBrowser:()=>dr,CardHistoryViewer:()=>at$1,CardLoader:()=>yn,CardSearch:()=>Ke$1,CardSearchResults:()=>Qe$1,CardViewer:()=>Q$1,CodeBlockRenderer:()=>Lt$1,CourseCardBrowser:()=>tr,CourseInformation:()=>cr,CourseTagFilterWidget:()=>vr,Displayable:()=>Displayable,FillInInput:()=>me$2,HeatMap:()=>Ae$1,MarkdownRenderer:()=>yn$1,MdTokenRenderer:()=>gn$1,MultipleChoiceOption:()=>ln,PaginatingToolbar:()=>Ue$1,Question:()=>Question,RadioMultipleChoice:()=>fn,RequestPasswordReset:()=>On,ResetPassword:()=>Hn,SessionControllerDebug:()=>Yt,SkMouseTrap:()=>Ne$1,SkMouseTrapToolTip:()=>Fe$1,SkldrMouseTrap:()=>I$2,SnackbarService:()=>Be$1,StudySession:()=>sn,StudySessionTimer:()=>st$1,TFSelect:()=>hn,TagsInput:()=>qn,UserChip:()=>bn,UserInputNumber:()=>_n,UserInputString:()=>de$2,UserLogin:()=>Cn,UserLoginAndRegistrationContainer:()=>Mn,UserRegistration:()=>Tn,UserTagPreferences:()=>Dr,VerifyEmail:()=>zn,alertUser:()=>Z$2,containsComponent:()=>containsComponent,getCurrentUser:()=>getCurrentUser,getUserStatus:()=>getUserStatus,isComponent:()=>isComponent$2,isDefineComponent:()=>isDefineComponent,isInlineComponent:()=>isInlineComponent,isPasswordValid:()=>isPasswordValid,isQuestionView:()=>isQuestionView,parseComponentSyntax:()=>parseComponentSyntax,parseComponentToken:()=>parseComponentToken,piniaPlugin:()=>oe$3,requestPasswordReset:()=>requestPasswordReset,resetPassword:()=>resetPassword,sendVerificationEmail:()=>sendVerificationEmail,splitByDelimiters:()=>splitByDelimiters,splitParagraphToken:()=>splitParagraphToken,splitTextToken:()=>splitTextToken,useAuthStore:()=>useAuthStore,useCardPreviewModeStore:()=>useCardPreviewModeStore,useConfigStore:()=>useConfigStore,useEntitlements:()=>useEntitlements,useQuestionView:()=>useQuestionView,useViewable:()=>useViewable,validatePassword:()=>validatePassword,verifyEmail:()=>verifyEmail});function _sfc_render$26(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,null,[(openBlock(),createElementBlock(`svg`,{width:t.width,height:t.height},[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.weeks,(u,d)=>(openBlock(),createElementBlock(`g`,{key:d,transform:`translate(${d*(t.cellSize+t.cellMargin)}, 0)`},[(openBlock(!0),createElementBlock(Fragment,null,renderList(u,(u,d)=>(openBlock(),createElementBlock(`rect`,{key:u.date,x:0,y:d*(t.cellSize+t.cellMargin),width:t.cellSize,height:t.cellSize,fill:t.getColor(u.count),onMouseover:c=>t.showTooltip(u,c),onMouseout:c[0]||(c[0]=(...c)=>t.hideTooltip&&t.hideTooltip(...c))},null,40,ke$1))),128))],8,Oe$1))),128))],8,De$1)),t.tooltipData?(openBlock(),createElementBlock(`div`,{key:0,class:`tooltip`,style:normalizeStyle(t.tooltipStyle)},toDisplayString(t.tooltipData.count)+` review`+toDisplayString(t.tooltipData.count===1?``:`s`)+` on `+toDisplayString(t.toDateString(t.tooltipData.date)),5)):createCommentVNode(``,!0)])}function _sfc_render$25(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-toolbar-title`),w=resolveComponent(`v-toolbar`),T=resolveComponent(`v-spacer`),E=resolveComponent(`v-list-item`),D=resolveComponent(`v-list`),O=resolveComponent(`v-card`),Or=resolveComponent(`v-dialog`);return t.display?(openBlock(),createBlock(Or,{key:0,"max-width":`500px`,transition:`dialog-transition`},{activator:withCtx(({props:t})=>[createVNode(S,mergeProps({icon:``,color:`primary`},t),{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-keyboard`)])),_:1})]),_:2},1040)]),default:withCtx(()=>[createVNode(O,null,{default:withCtx(()=>[createVNode(w,{color:`secondary`,dark:``,dense:``},{default:withCtx(()=>[createVNode(C,{class:`text-subtitle-1`},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`Shortcut keys:`)])),_:1})]),_:1}),createVNode(D,{dense:``},{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.commands,t=>(openBlock(),createBlock(E,{key:Array.isArray(t.hotkey)?t.hotkey.join(`,`):t.hotkey,class:`py-1`},{default:withCtx(()=>[createVNode(S,{variant:`outlined`,color:`primary`,class:`text-white`,size:`small`},{default:withCtx(()=>[createTextVNode(toDisplayString(Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey),1)]),_:2},1024),createVNode(T),createBaseVNode(`span`,Me$1,toDisplayString(t.command),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):createCommentVNode(``,!0)}function _sfc_render$24(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,{class:normalizeClass([`sk-mousetrap-tooltip-wrapper`,[t.isControlKeyPressed&&!t.disabled&&t.highlightEffect!==`none`?`sk-mousetrap-highlight-${t.highlightEffect}`:``]]),ref:`wrapperElement`},[renderSlot(t.$slots,`default`,{},void 0,!0),createVNode(Transition,{name:`fade`},{default:withCtx(()=>[t.showTooltip&&t.isControlKeyPressed&&!t.disabled?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`sk-mousetrap-tooltip`,{"sk-mt-tooltip-top":t.position===`top`,"sk-mt-tooltip-bottom":t.position===`bottom`,"sk-mt-tooltip-left":t.position===`left`,"sk-mt-tooltip-right":t.position===`right`}])},toDisplayString(t.formattedHotkey),3)):createCommentVNode(``,!0)]),_:1})],2)}function _sfc_render$23(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-snackbar`);return openBlock(),createElementBlock(`div`,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.snacks,u=>(openBlock(),createBlock(C,{key:t.snacks.indexOf(u),modelValue:t.show[t.snacks.indexOf(u)],"onUpdate:modelValue":c=>t.show[t.snacks.indexOf(u)]=c,timeout:u.timeout,location:`bottom right`,color:t.getColor(u)},{default:withCtx(()=>[createBaseVNode(`div`,ze$1,[createBaseVNode(`span`,null,toDisplayString(u.text),1),createVNode(S,{icon:``,variant:`text`,onClick:c[0]||(c[0]=c=>t.close())},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-close`)])),_:1})]),_:1})])]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`timeout`,`color`]))),128))])}function _sfc_render$22(t,c,u,d,m,g){let b=resolveComponent(`v-toolbar-title`),S=resolveComponent(`v-spacer`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-select`),E=resolveComponent(`v-toolbar`);return openBlock(),createBlock(E,{density:`compact`},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(t.title),1),t.subtitle?(openBlock(),createElementBlock(`span`,He$1,toDisplayString(t.subtitle),1)):createCommentVNode(``,!0)]),_:1}),createVNode(S),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:c[0]||(c[0]=c=>t.$emit(`first`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-page-first`)])),_:1})]),_:1},8,[`disabled`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==1,onClick:c[1]||(c[1]=c=>t.$emit(`prev`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-chevron-left`)])),_:1})]),_:1},8,[`disabled`]),createVNode(T,{"model-value":t.page,items:t.pages,class:`pageSelect`,density:`compact`,"hide-details":``,"return-object":!1,variant:`outlined`,"onUpdate:modelValue":c[2]||(c[2]=c=>t.$emit(`set-page`,c))},{selection:withCtx(({item:t})=>[createTextVNode(toDisplayString(t.value),1)]),_:1},8,[`model-value`,`items`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:c[3]||(c[3]=c=>t.$emit(`next`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-chevron-right`)])),_:1})]),_:1},8,[`disabled`]),createVNode(w,{variant:`text`,icon:``,color:`secondary`,disabled:t.page==t.pages.length,onClick:c[4]||(c[4]=c=>t.$emit(`last`))},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-page-last`)])),_:1})]),_:1},8,[`disabled`])]),_:1})}function _sfc_render$21(t,c,u,d,m,g){let b=resolveComponent(`v-text-field`);return openBlock(),createElementBlock(`div`,Ge$1,[createVNode(b,{modelValue:t.query,"onUpdate:modelValue":c[0]||(c[0]=c=>t.query=c),label:`Search for cards...`,"append-icon":`mdi-magnify`,"onClick:append":t.search,onKeydown:withKeys(t.search,[`enter`])},null,8,[`modelValue`,`onClick:append`,`onKeydown`])])}function _sfc_render$20(t,c,u,d,m,g){let b=resolveComponent(`v-list-item-title`),S=resolveComponent(`v-list-item-subtitle`),C=resolveComponent(`v-list-item`),w=resolveComponent(`v-list`);return openBlock(),createElementBlock(`div`,Je$1,[t.loading?(openBlock(),createElementBlock(`div`,Ye$1,`Loading...`)):t.error?(openBlock(),createElementBlock(`div`,Xe$1,toDisplayString(t.error),1)):(openBlock(),createElementBlock(`div`,Ze$1,[createVNode(w,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cards,c=>(openBlock(),createBlock(C,{key:c._id,onClick:u=>t.selectCard(c),class:normalizeClass([{"selected-card":c._id===t.selectedCardId},`cursor-pointer`])},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>[createTextVNode(toDisplayString(c._id),1)]),_:2},1024),createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Course: `+toDisplayString(c.courseId),1)]),_:2},1024)]),_:2},1032,[`onClick`,`class`]))),128))]),_:1})]))])}function _sfc_render$19(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-list-item-title`),C=resolveComponent(`v-list-item-subtitle`),w=resolveComponent(`v-list-item-content`),T=resolveComponent(`v-list-item`),E=resolveComponent(`v-card`),D=resolveComponent(`v-data-table`);return openBlock(),createElementBlock(`div`,et$1,[t.userId?(openBlock(),createElementBlock(`h3`,tt$1,`Card History for User: `+toDisplayString(t.userId),1)):createCommentVNode(``,!0),t.loading?(openBlock(),createElementBlock(`div`,nt$1,`Loading...`)):t.error?(openBlock(),createElementBlock(`div`,rt$1,toDisplayString(t.error),1)):t.cardHistory?(openBlock(),createElementBlock(`div`,it$1,[createVNode(E,{class:`mb-4`},{default:withCtx(()=>[createVNode(b,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`Summary`)])),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Best Interval: `+toDisplayString(t.cardHistory.bestInterval)+` seconds (`+toDisplayString(t.bestIntervalHumanized)+`)`,1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`The to-date largest interval between successful card reviews.`)])),_:1})]),_:1})]),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Lapses: `+toDisplayString(t.cardHistory.lapses),1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`The number of times that a card has been failed in review.`)])),_:1})]),_:1})]),_:1}),createVNode(T,null,{default:withCtx(()=>[createVNode(w,null,{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createTextVNode(`Streak: `+toDisplayString(t.cardHistory.streak),1)]),_:1}),createVNode(C,null,{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`The number of consecutive successful impressions on this card.`)])),_:1})]),_:1})]),_:1})]),_:1}),createVNode(D,{headers:t.headers,items:t.history,class:`elevation-1`},null,8,[`headers`,`items`])])):createCommentVNode(``,!0)])}function isDefineComponent(t){return t.__isFragment!==void 0}function validateData(t,c){for(let u=0;u<t.length;u++)t[u].fields.forEach((t,d)=>{console.log(`[Displayable] shape[${u}].field[${d}]:\n ${JSON.stringify(t)}`),c[u][t.name]===void 0&&t.type!==FieldType.MEDIA_UPLOADS&&console.warn(`[Displayable] missing data`)})}async function sendVerificationEmail(t,c,u){try{let d={username:t,email:c};u&&(d.origin=u);let m=await fetch(`${getApiBase()}/auth/send-verification`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(d)});if(!m.ok){let t=await m.text();return console.error(`Send verification email error:`,t),{ok:!1,error:`HTTP ${m.status}: ${m.statusText}`}}return await m.json()}catch(t){return console.error(`Send verification email fetch error:`,t),{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function verifyEmail(t){try{let c=await fetch(`${getApiBase()}/auth/verify`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t})});return c.ok?await c.json():{ok:!1,error:`HTTP ${c.status}: ${c.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function getUserStatus(){try{let t=await fetch(`${getApiBase()}/auth/status`,{method:`GET`,headers:{"Content-Type":`application/json`},credentials:`include`});return t.ok?await t.json():{ok:!1,error:`HTTP ${t.status}: ${t.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function requestPasswordReset(t,c){try{let u={email:t};c&&(u.origin=c);let d=await fetch(`${getApiBase()}/auth/request-reset`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(u)});return d.ok?await d.json():{ok:!1,error:`HTTP ${d.status}: ${d.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}async function resetPassword(t,c){try{let u=await fetch(`${getApiBase()}/auth/reset-password`,{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({token:t,newPassword:c})});return u.ok?await u.json():{ok:!1,error:`HTTP ${u.status}: ${u.statusText}`}}catch(t){return{ok:!1,error:t instanceof Error?t.message:`Network error`}}}function useEntitlements(t){let c=ref({}),u=ref(!1),d=ref(null),m=computed(()=>{let u=c.value[t];if(!u)return{isActive:!1,isPaid:!1,daysRemaining:null,expiresDate:null};if(u.status===`paid`)return{isActive:!0,isPaid:!0,daysRemaining:null,expiresDate:null};let d=u.expires;if(!d)return{isActive:!0,isPaid:!1,daysRemaining:null,expiresDate:null};let m=new Date(d),g=new Date,b=Math.ceil((m.getTime()-g.getTime())/(1e3*60*60*24));return{isActive:b>0,isPaid:!1,daysRemaining:Math.max(0,b),expiresDate:d}}),g=computed(()=>m.value.isPaid);async function fetchEntitlements(){u.value=!0,d.value=null;try{let t=await getUserStatus();t.ok?c.value=t.entitlements||{}:(d.value=t.error||`Failed to fetch entitlements`,console.error(`[useEntitlements] Error:`,d.value))}catch(t){d.value=t instanceof Error?t.message:`Unknown error`,console.error(`[useEntitlements] Exception:`,t)}finally{u.value=!1}}return{entitlements:c,trialStatus:m,hasPremiumAccess:g,loading:u,error:d,fetchEntitlements}}function _sfc_render$18(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-btn`),C=resolveComponent(`v-progress-circular`),w=resolveComponent(`v-tooltip`);return openBlock(),createBlock(w,{location:`right`,"open-delay":0,"close-delay":200,color:`secondary`,class:`text-subtitle-1`},{activator:withCtx(({props:u})=>[createBaseVNode(`div`,mergeProps({class:`timer-container`},u,{onMouseenter:c[0]||(c[0]=c=>t.hovered=!0),onMouseleave:c[1]||(c[1]=c=>t.hovered=!1)}),[createVNode(C,{alt:`Time remaining in study session`,size:`64`,width:`8`,rotate:`0`,color:t.timerColor,"model-value":t.percentageRemaining},{default:withCtx(()=>[t.timeRemaining>0&&t.hovered?(openBlock(),createBlock(S,{key:0,icon:``,color:`transparent`,location:`bottom left`,onClick:t.addSessionTime},{default:withCtx(()=>[createVNode(b,{size:`large`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-plus`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0)]),_:1},8,[`color`,`model-value`])],16)]),default:withCtx(()=>[createTextVNode(` `+toDisplayString(t.formattedTimeRemaining),1)]),_:1})}function _sfc_render$17(t,c,u,d,m,g){let b=resolveComponent(`v-card`);return t.frameless?(openBlock(),createBlock(resolveDynamicComponent(t.view),{ref:`activeView`,key:t.course_id+`-`+t.card_id+`-`+t.sessionOrder,data:t.data,"modify-difficulty":t.user_elo.global.score-t.card_elo,class:`cardView`,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c)),onRequestReplan:c[1]||(c[1]=c=>t.$emit(`requestReplan`,c)),onReadyToAdvance:c[2]||(c[2]=c=>t.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`])):(openBlock(),createBlock(b,{key:1,elevation:`12`},{default:withCtx(()=>[(openBlock(),createBlock(resolveDynamicComponent(t.view),{ref:`activeView`,key:t.course_id+`-`+t.card_id+`-`+t.sessionOrder,data:t.data,"modify-difficulty":t.user_elo.global.score-t.card_elo,class:`cardView ma-2 pa-2`,onEmitResponse:c[3]||(c[3]=c=>t.processResponse(c)),onRequestReplan:c[4]||(c[4]=c=>t.$emit(`requestReplan`,c)),onReadyToAdvance:c[5]||(c[5]=c=>t.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`]))]),_:1}))}function _sfc_render$16(t,c,u,d,m,g){let b=resolveComponent(`v-spacer`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-card-title`),w=resolveComponent(`v-col`),T=resolveComponent(`v-row`),E=resolveComponent(`v-divider`),D=resolveComponent(`v-card-text`),O=resolveComponent(`v-card`);return t.sessionController?(openBlock(),createBlock(O,{key:0,class:`session-debug ma-2`,elevation:`2`},{default:withCtx(()=>[createVNode(C,{class:`text-caption bg-grey-darken-3`},{default:withCtx(()=>[c[1]||(c[1]=createTextVNode(` Session Controller Debug `)),createVNode(b),createVNode(S,{size:`small`},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-bug`)])),_:1})]),_:1}),createVNode(D,{class:`pa-2`},{default:withCtx(()=>[createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,ut$1,[createBaseVNode(`div`,dt$1,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-calendar-check`)])),_:1}),c[3]||(c[3]=createBaseVNode(`strong`,null,`Review Queue`,-1))]),createBaseVNode(`div`,ft$1,[createBaseVNode(`span`,pt$1,`Length: `+toDisplayString(t.debugInfo.reviewQueue.length),1),createBaseVNode(`span`,mt$1,`Dequeued: `+toDisplayString(t.debugInfo.reviewQueue.dequeueCount),1)]),t.debugInfo.reviewQueue.items.length>0?(openBlock(),createElementBlock(`div`,ht$1,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.reviewQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,gt$1,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,_t,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.reviewQueue.items.length>5?(openBlock(),createElementBlock(`div`,vt$1,` ... +`+toDisplayString(t.debugInfo.reviewQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,yt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,bt,[createBaseVNode(`div`,xt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-file-document-plus`)])),_:1}),c[5]||(c[5]=createBaseVNode(`strong`,null,`New Cards Queue`,-1))]),createBaseVNode(`div`,St,[createBaseVNode(`span`,Ct,`Length: `+toDisplayString(t.debugInfo.newQueue.length),1),createBaseVNode(`span`,wt,`Dequeued: `+toDisplayString(t.debugInfo.newQueue.dequeueCount),1)]),t.debugInfo.newQueue.items.length>0?(openBlock(),createElementBlock(`div`,Tt,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.newQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,Et,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Dt,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.newQueue.items.length>5?(openBlock(),createElementBlock(`div`,Ot,` ... +`+toDisplayString(t.debugInfo.newQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,kt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,At,[createBaseVNode(`div`,jt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[7]||(c[7]=createBaseVNode(`strong`,null,`Failed Cards Queue`,-1))]),createBaseVNode(`div`,Mt,[createBaseVNode(`span`,Nt,`Length: `+toDisplayString(t.debugInfo.failedQueue.length),1),createBaseVNode(`span`,Pt,`Dequeued: `+toDisplayString(t.debugInfo.failedQueue.dequeueCount),1)]),t.debugInfo.failedQueue.items.length>0?(openBlock(),createElementBlock(`div`,Ft,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.failedQueue.items.slice(0,5),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item`},[createBaseVNode(`span`,It,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Lt,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.failedQueue.items.length>5?(openBlock(),createElementBlock(`div`,Rt,` ... +`+toDisplayString(t.debugInfo.failedQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,zt,` (empty) `))])]),_:1})]),_:1}),createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`},{default:withCtx(()=>[createVNode(E,{class:`my-2`}),createBaseVNode(`div`,Bt,[createBaseVNode(`div`,Vt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-database`)])),_:1}),c[9]||(c[9]=createBaseVNode(`strong`,null,`Hydrated Cards Cache`,-1))]),createBaseVNode(`div`,Ht,[createBaseVNode(`span`,Ut,`Cached: `+toDisplayString(t.debugInfo.hydratedCache.count),1),createBaseVNode(`span`,Wt,`Failed Cache: `+toDisplayString(t.debugInfo.hydratedCache.failedCacheSize),1)]),t.debugInfo.hydratedCache.items.length>0?(openBlock(),createElementBlock(`div`,Gt,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.hydratedCache.items.slice(0,8),(t,c)=>(openBlock(),createElementBlock(`div`,{key:c,class:`debug-item d-inline-block mr-3`},[createBaseVNode(`span`,Kt,toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1)]))),128)),t.debugInfo.hydratedCache.items.length>8?(openBlock(),createElementBlock(`div`,qt,` ... +`+toDisplayString(t.debugInfo.hydratedCache.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,Jt,` (empty) `))])]),_:1})]),_:1})]),_:1})]),_:1})):createCommentVNode(``,!0)}function _sfc_render$15(t,c,u,d,m,g){let b=resolveComponent(`v-spacer`),S=resolveComponent(`v-progress-circular`),C=resolveComponent(`v-row`),w=resolveComponent(`session-controller-debug`),T=resolveComponent(`heat-map`),E=resolveComponent(`card-viewer`),D=resolveComponent(`StudySessionTimer`),O=resolveComponent(`v-col`),Or=resolveComponent(`SkMouseTrap`);return t.sessionPrepared?(openBlock(),createElementBlock(`div`,$t,[t.frameless?createCommentVNode(``,!0):(openBlock(),createBlock(C,{key:0,align:`center`},{default:withCtx(()=>[createVNode(b),t.loading?(openBlock(),createBlock(S,{key:0,color:`primary`,indeterminate:``,size:`32`,width:`4`})):createCommentVNode(``,!0)]),_:1})),t.debugMode?(openBlock(),createBlock(w,{key:1,"session-controller":t.sessionController},null,8,[`session-controller`])):createCommentVNode(``,!0),t.frameless?createCommentVNode(``,!0):(openBlock(),createElementBlock(`br`,en)),t.sessionFinished?(openBlock(),createElementBlock(`div`,tn,[renderSlot(t.$slots,`session-finished`,{sessionRecord:t.sessionRecord,report:t.sessionController?.report},()=>[createBaseVNode(`div`,nn,[c[1]||(c[1]=createBaseVNode(`p`,null,`Study session finished! Great job!`,-1)),t.sessionController?(openBlock(),createElementBlock(`p`,rn,toDisplayString(t.sessionController.report),1)):createCommentVNode(``,!0),createVNode(T,{"activity-records-getter":()=>t.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):(openBlock(),createElementBlock(`div`,an,[createVNode(Transition,{name:t.transitionName},{default:withCtx(()=>[t.view?(openBlock(),createBlock(E,{ref:`cardViewer`,key:t.cardID,class:normalizeClass(t.loading?`muted`:``),view:t.view,data:t.data,card_id:t.cardID,course_id:t.courseID,"session-order":t.cardCount,user_elo:t.user_elo(t.courseID),card_elo:t.card_elo,frameless:t.frameless,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c)),onRequestReplan:t.handleReplanRequest,onReadyToAdvance:t.handleReadyToAdvance},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`,`user_elo`,`card_elo`,`frameless`,`onRequestReplan`,`onReadyToAdvance`])):createCommentVNode(``,!0)]),_:1},8,[`name`])],512)),t.frameless?createCommentVNode(``,!0):(openBlock(),createElementBlock(Fragment,{key:5},[c[2]||(c[2]=createBaseVNode(`br`,null,null,-1)),t.sessionController?(openBlock(),createElementBlock(`div`,on,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.sessionController.failedCount,t=>(openBlock(),createElementBlock(`span`,{key:t,class:`text-h5`},`•`))),128))])):createCommentVNode(``,!0)],64)),t.hideFooter?createCommentVNode(``,!0):(openBlock(),createBlock(C,{key:6,align:`center`,class:`footer-controls pa-5`},{default:withCtx(()=>[createVNode(O,{cols:`auto`,class:`d-flex flex-grow-0 mr-auto`},{default:withCtx(()=>[createVNode(D,{"time-remaining":t.timeRemaining,"session-time-limit":t.sessionTimeLimit,onAddTime:t.incrementSessionClock},null,8,[`time-remaining`,`session-time-limit`,`onAddTime`])]),_:1}),createVNode(b),createVNode(O,{cols:`auto`,class:`footer-right`},{default:withCtx(()=>[createVNode(Or)]),_:1})]),_:1}))])):createCommentVNode(``,!0)}function _sfc_render$14(t,c,u,d,m,g){let b=resolveComponent(`markdown-renderer`),S=resolveComponent(`v-card`);return openBlock(),createBlock(S,{class:normalizeClass(`${t.className}`),onMouseover:t.select,onClick:t.submitThisOption},{default:withCtx(()=>[createVNode(b,{md:t.content},null,8,[`md`])]),_:1},8,[`class`,`onMouseover`,`onClick`])}function _sfc_render$13(t,c,u,d,m,g){let b=resolveComponent(`MultipleChoiceOption`);return openBlock(),createElementBlock(`div`,dn,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.choiceList,(c,u)=>(openBlock(),createBlock(b,{key:u,content:c,selected:t.choiceList.indexOf(c)===t.currentSelection,number:t.choiceList.indexOf(c),"set-selection":t.setSelection,submit:t.forwardSelection,"marked-wrong":t.choiceIsWrong(c)},null,8,[`content`,`selected`,`number`,`set-selection`,`submit`,`marked-wrong`]))),128))],512)}function _sfc_render$12(t,c,u,d,m,g){let b=resolveComponent(`RadioMultipleChoice`);return openBlock(),createElementBlock(`div`,mn,[createVNode(b,{"choice-list":[`True`,`False`],MouseTrap:t.MouseTrap,submit:t.submit},null,8,[`MouseTrap`,`submit`])])}function _sfc_render$11(t,c,u,d,m,g){let b=resolveComponent(`v-text-field`),S=resolveComponent(`v-container`);return openBlock(),createBlock(S,{class:`pa-0`},{default:withCtx(()=>[createVNode(b,{ref:`input`,modelValue:t.answer,"onUpdate:modelValue":c[0]||(c[0]=c=>t.answer=c),"prepend-icon":`edit`,autofocus:t.autofocus,"row-height":`24`,"toggle-keys":`[13,32]`,class:`text-h5`,rules:[t.isNumeric],onKeyup:c[1]||(c[1]=withKeys(c=>t.submitAnswer(t.makeNumeric(t.answer)),[`enter`]))},null,8,[`modelValue`,`autofocus`,`rules`])]),_:1})}function _sfc_render$10(t,c,u,d,m,g){let b=resolveComponent(`card-viewer`);return t.loading?createCommentVNode(``,!0):(openBlock(),createBlock(b,{key:0,class:normalizeClass([`ma-2`,t.loading?`muted`:``]),view:t.view,data:t.data,card_id:t.cardID,course_id:t.courseID,"session-order":t.sessionOrder,onEmitResponse:c[0]||(c[0]=c=>t.processResponse(c))},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`]))}async function getCurrentUser(){let t=useAuthStore();if(!t.onLoadComplete){let c=200;for(;!t.onLoadComplete&&c>0;)await new Promise(t=>setTimeout(t,50)),c--;if(!t.onLoadComplete)throw Error(`User initialization timed out`)}return getDataLayer().getUserDB()}function useAuthUI(){let t=ref(!0),c=ref(!1),u=ref(!1),d=computed(()=>u.value?{showLoginRegistration:!1,showLogout:!1,showResetData:!0,logoutLabel:``,resetLabel:`Reset User Data`}:{showLoginRegistration:!0,showLogout:!0,showResetData:!1,logoutLabel:`Log out`,resetLabel:``}),detectSyncStrategy=async()=>{try{t.value=!0,u.value=!(await getCurrentUser()).syncStrategy?.canCreateAccount?.(),c.value=!0}catch(t){console.error(`Failed to detect sync strategy:`,t),u.value=!1,c.value=!0}finally{t.value=!1}};return{config:d,isLoading:t,syncStrategyDetected:c,isLocalOnlyMode:u,detectSyncStrategy}}function validatePassword(t){return t?t.length<6?`Password must be at least 6 characters`:new Set(t).size<2?`Password must contain at least 2 different characters`:``:``}function isPasswordValid(t){return validatePassword(t)===``}function _sfc_render$9(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-btn`),w=resolveComponent(`v-snackbar`),T=resolveComponent(`v-icon`),E=resolveComponent(`router-link`),D=resolveComponent(`v-form`),O=resolveComponent(`v-card-text`),Or=resolveComponent(`v-card`);return openBlock(),createBlock(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(` Create an Account `)])),_:1}),createVNode(O,null,{default:withCtx(()=>[createVNode(D,{onSubmit:withModifiers(t.createUser,[`prevent`])},{default:withCtx(()=>[createVNode(S,{modelValue:t.email,"onUpdate:modelValue":c[0]||(c[0]=c=>t.email=c),name:`email`,label:`Email address`,type:`email`,"prepend-icon":`mdi-email`,error:t.emailError,hint:t.emailHint,onBlur:t.validateEmail},null,8,[`modelValue`,`error`,`hint`,`onBlur`]),createVNode(S,{id:``,ref:`userNameTextField`,modelValue:t.username,"onUpdate:modelValue":c[1]||(c[1]=c=>t.username=c),name:`username`,label:`Choose a Username`,"prepend-icon":`mdi-account-circle`,error:t.usernameError,hint:t.usernameHint,onBlur:t.validateUsername},null,8,[`modelValue`,`error`,`hint`,`onBlur`]),createVNode(S,{modelValue:t.password,"onUpdate:modelValue":c[2]||(c[2]=c=>t.password=c),"prepend-icon":`mdi-lock`,name:`password`,hover:`Show password`,label:`Create a password`,hint:t.passwordError,error:!!t.passwordError,min:`4`,"append-icon":t.passwordVisible?`mdi-eye-off`:`mdi-eye`,type:t.passwordVisible?`text`:`password`,"onClick:append":c[3]||(c[3]=()=>t.passwordVisible=!t.passwordVisible)},null,8,[`modelValue`,`hint`,`error`,`append-icon`,`type`]),createVNode(S,{modelValue:t.retypedPassword,"onUpdate:modelValue":c[4]||(c[4]=c=>t.retypedPassword=c),"prepend-icon":`mdi-lock`,name:`retypedPassword`,hover:`Show password`,label:`Retype your password`,disabled:t.password===``||!!t.passwordError,hint:t.passwordRetypeError,min:`4`,type:t.passwordVisible?`text`:`password`},null,8,[`modelValue`,`disabled`,`hint`,`type`]),createVNode(w,{modelValue:t.badLoginAttempt,"onUpdate:modelValue":c[6]||(c[6]=c=>t.badLoginAttempt=c),location:`bottom right`,timeout:5e3},{default:withCtx(()=>[c[9]||(c[9]=createTextVNode(` Username or password was incorrect. `)),createVNode(C,{color:`pink`,variant:`text`,onClick:c[5]||(c[5]=c=>t.badLoginAttempt=!1)},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(` Close `)])),_:1})]),_:1},8,[`modelValue`]),createVNode(C,{class:`mr-2 my-2`,type:`submit`,loading:t.awaitingResponse,color:t.buttonStatus.color,disabled:!!t.passwordError||t.password!==t.retypedPassword},{default:withCtx(()=>[createVNode(T,{start:``},{default:withCtx(()=>c[10]||(c[10]=[createTextVNode(`mdi-lock-open`)])),_:1}),c[11]||(c[11]=createTextVNode(` Create Account `))]),_:1},8,[`loading`,`color`,`disabled`]),t.registrationRoute?(openBlock(),createBlock(E,{key:0,to:`login`},{default:withCtx(()=>[createVNode(C,{variant:`text`},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(`Log In`)])),_:1})]),_:1})):(openBlock(),createBlock(C,{key:1,variant:`text`,onClick:t.toggle},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Log In `)])),_:1},8,[`onClick`]))]),_:1},8,[`onSubmit`])]),_:1})]),_:1})}function _sfc_render$8(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-form`),E=resolveComponent(`v-card-text`),D=resolveComponent(`v-spacer`),O=resolveComponent(`v-card-actions`),Or=resolveComponent(`v-card`);return openBlock(),createBlock(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(` Reset Password `)])),_:1}),createVNode(E,{class:`pa-6`},{default:withCtx(()=>[t.requestSent?(openBlock(),createElementBlock(`div`,Dn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-email-check`)])),_:1}),c[9]||(c[9]=createBaseVNode(`h3`,{class:`mb-2`},`Check Your Email`,-1)),createBaseVNode(`p`,null,[c[7]||(c[7]=createTextVNode(` If an account exists with `)),createBaseVNode(`strong`,null,toDisplayString(t.email),1),c[8]||(c[8]=createTextVNode(`, you will receive a password reset link shortly. `))]),c[10]||(c[10]=createBaseVNode(`p`,{class:`text-caption mt-4`},`Didn't receive an email? Check your spam folder.`,-1))])):(openBlock(),createBlock(T,{key:0,onSubmit:withModifiers(t.handleSubmit,[`prevent`])},{default:withCtx(()=>[c[5]||(c[5]=createBaseVNode(`p`,{class:`mb-4`},` Enter your email address and we'll send you a link to reset your password. `,-1)),createVNode(S,{modelValue:t.email,"onUpdate:modelValue":c[0]||(c[0]=c=>t.email=c),name:`email`,label:`Email address`,type:`email`,"prepend-icon":`mdi-email`,error:t.emailError,hint:t.emailHint,disabled:t.isSubmitting,onBlur:t.validateEmail},null,8,[`modelValue`,`error`,`hint`,`disabled`,`onBlur`]),createVNode(w,{type:`submit`,color:`primary`,class:`mt-4`,loading:t.isSubmitting,disabled:!t.email||t.emailError,block:``},{default:withCtx(()=>[createVNode(C,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-email-send`)])),_:1}),c[4]||(c[4]=createTextVNode(` Send Reset Link `))]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`onSubmit`]))]),_:1}),t.requestSent?createCommentVNode(``,!0):(openBlock(),createBlock(O,{key:0},{default:withCtx(()=>[renderSlot(t.$slots,`back-action`,{},()=>[createVNode(w,{variant:`text`,onClick:c[1]||(c[1]=c=>t.$emit(`cancel`))},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Cancel `)])),_:1})]),createVNode(D)]),_:3}))]),_:3})}function _sfc_render$7(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-progress-circular`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-card-text`),T=resolveComponent(`v-spacer`),E=resolveComponent(`v-btn`),D=resolveComponent(`v-card-actions`),O=resolveComponent(`v-card`),Or=resolveComponent(`v-col`),kr=resolveComponent(`v-row`),Ar=resolveComponent(`v-container`);return openBlock(),createBlock(Ar,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(kr,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(Or,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(O,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(` Email Verification `)])),_:1}),createVNode(w,{class:`pa-6`},{default:withCtx(()=>[t.isVerifying?(openBlock(),createElementBlock(`div`,Pn,[createVNode(S,{indeterminate:``,color:`primary`,size:`64`,class:`mb-4`}),c[3]||(c[3]=createBaseVNode(`p`,null,`Verifying your email...`,-1))])):t.verificationStatus===`success`?(openBlock(),createElementBlock(`div`,Fn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-check-circle`)])),_:1}),c[5]||(c[5]=createBaseVNode(`h3`,{class:`mb-2`},`Email Verified!`,-1)),c[6]||(c[6]=createBaseVNode(`p`,null,`Your account has been successfully verified.`,-1)),t.username?(openBlock(),createElementBlock(`p`,In,`Welcome, `+toDisplayString(t.username)+`!`,1)):createCommentVNode(``,!0)])):t.verificationStatus===`error`?(openBlock(),createElementBlock(`div`,Ln,[createVNode(C,{color:`error`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[8]||(c[8]=createBaseVNode(`h3`,{class:`mb-2`},`Verification Failed`,-1)),createBaseVNode(`p`,null,toDisplayString(t.errorMessage),1)])):(openBlock(),createElementBlock(`div`,Rn,[createVNode(C,{color:`warning`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[9]||(c[9]=[createTextVNode(`mdi-help-circle`)])),_:1}),c[10]||(c[10]=createBaseVNode(`h3`,{class:`mb-2`},`No Verification Token`,-1)),c[11]||(c[11]=createBaseVNode(`p`,null,`Please use the link from your verification email.`,-1))]))]),_:1}),createVNode(D,null,{default:withCtx(()=>[createVNode(T),renderSlot(t.$slots,`actions`,{status:t.verificationStatus,username:t.username},()=>[t.verificationStatus===`success`?(openBlock(),createBlock(E,{key:0,color:`primary`,onClick:c[0]||(c[0]=c=>t.$emit(`verified`,t.username))},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Continue `)])),_:1})):t.verificationStatus===`error`?(openBlock(),createBlock(E,{key:1,variant:`text`,onClick:c[1]||(c[1]=c=>t.$emit(`error`,t.errorMessage))},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Close `)])),_:1})):createCommentVNode(``,!0)])]),_:3})]),_:3})]),_:3})]),_:3})]),_:3})}function _sfc_render$6(t,c,u,d,m,g){let b=resolveComponent(`v-card-title`),S=resolveComponent(`v-text-field`),C=resolveComponent(`v-icon`),w=resolveComponent(`v-btn`),T=resolveComponent(`v-form`),E=resolveComponent(`v-card-text`),D=resolveComponent(`v-spacer`),O=resolveComponent(`v-card-actions`),Or=resolveComponent(`v-card`),kr=resolveComponent(`v-col`),Ar=resolveComponent(`v-row`),jr=resolveComponent(`v-container`);return openBlock(),createBlock(jr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(Ar,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(kr,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(Or,null,{default:withCtx(()=>[createVNode(b,{class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(` Set New Password `)])),_:1}),createVNode(E,{class:`pa-6`},{default:withCtx(()=>[t.isComplete?(openBlock(),createElementBlock(`div`,Vn,[createVNode(C,{color:`success`,size:`64`,class:`mb-4`},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-check-circle`)])),_:1}),c[9]||(c[9]=createBaseVNode(`h3`,{class:`mb-2`},`Password Reset Successful!`,-1)),c[10]||(c[10]=createBaseVNode(`p`,null,`Your password has been updated. You can now log in with your new password.`,-1))])):(openBlock(),createBlock(T,{key:0,onSubmit:withModifiers(t.handleSubmit,[`prevent`])},{default:withCtx(()=>[c[7]||(c[7]=createBaseVNode(`p`,{class:`mb-4`},`Enter your new password below.`,-1)),createVNode(S,{modelValue:t.password,"onUpdate:modelValue":c[0]||(c[0]=c=>t.password=c),"prepend-icon":`mdi-lock`,name:`password`,label:`New password`,min:`4`,"append-icon":t.passwordVisible?`mdi-eye-off`:`mdi-eye`,type:t.passwordVisible?`text`:`password`,disabled:t.isSubmitting,"onClick:append":c[1]||(c[1]=()=>t.passwordVisible=!t.passwordVisible)},null,8,[`modelValue`,`append-icon`,`type`,`disabled`]),createVNode(S,{modelValue:t.confirmPassword,"onUpdate:modelValue":c[2]||(c[2]=c=>t.confirmPassword=c),"prepend-icon":`mdi-lock`,name:`confirmPassword`,label:`Confirm new password`,min:`4`,type:t.passwordVisible?`text`:`password`,error:t.confirmPasswordError,hint:t.confirmPasswordHint,disabled:t.isSubmitting,onBlur:t.validateConfirmPassword},null,8,[`modelValue`,`type`,`error`,`hint`,`disabled`,`onBlur`]),createVNode(w,{type:`submit`,color:`primary`,class:`mt-4`,loading:t.isSubmitting,disabled:!t.canSubmit,block:``},{default:withCtx(()=>[createVNode(C,{start:``},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-lock-reset`)])),_:1}),c[6]||(c[6]=createTextVNode(` Reset Password `))]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`onSubmit`]))]),_:1}),t.isComplete?(openBlock(),createBlock(O,{key:0},{default:withCtx(()=>[createVNode(D),renderSlot(t.$slots,`success-action`,{},()=>[createVNode(w,{color:`primary`,onClick:c[3]||(c[3]=c=>t.$emit(`complete`))},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Continue to Login `)])),_:1})])]),_:3})):createCommentVNode(``,!0)]),_:3})]),_:3})]),_:3})]),_:3})}function _sfc_render$5(t,c,u,d,m,g){let b=resolveComponent(`vue-tags-input`),S=resolveComponent(`v-btn`);return openBlock(),createElementBlock(`div`,Wn,[createVNode(b,{modelValue:t.tag,"onUpdate:modelValue":c[0]||(c[0]=c=>t.tag=c),tags:t.tags,"autocomplete-items":t.autoCompleteSuggestions,separators:t.separators,"add-on-key":t.separators,onTagsChanged:t.tagsChanged},{"autocomplete-item":withCtx(t=>[createBaseVNode(`div`,{class:normalizeClass([`autocomplete-item`,{"is-active":t.selected}])},[createBaseVNode(`span`,Gn,toDisplayString(t.item.text),1),t.item.data&&t.item.data.snippet?(openBlock(),createElementBlock(`span`,Kn,` - `+toDisplayString(t.item.data.snippet),1)):createCommentVNode(``,!0)],2)]),_:1},8,[`modelValue`,`tags`,`autocomplete-items`,`separators`,`add-on-key`,`onTagsChanged`]),t.hideSubmit?createCommentVNode(``,!0):(openBlock(),createBlock(S,{key:0,color:`success`,loading:t.loading,onClick:t.submit},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`Save Changes`)])),_:1},8,[`loading`,`onClick`]))])}function _sfc_render$4$1(t,c,u,d,m,g){let b=resolveComponent(`v-progress-circular`),S=resolveComponent(`paginating-toolbar`),C=resolveComponent(`v-list-item-title`),w=resolveComponent(`v-list-item-subtitle`),T=resolveComponent(`v-btn`),E=resolveComponent(`v-icon`),D=resolveComponent(`v-speed-dial`),O=resolveComponent(`v-list-item`),Or=resolveComponent(`card-loader`),kr=resolveComponent(`v-chip`),Ar=resolveComponent(`v-chip-group`),jr=resolveComponent(`tags-input`),Mr=resolveComponent(`v-list`),Nr=resolveComponent(`v-card`);return openBlock(),createBlock(Nr,null,{default:withCtx(()=>[t.updatePending?(openBlock(),createElementBlock(`div`,Yn,[createVNode(b,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,Xn,[createVNode(S,{title:`Exercises`,page:t.page,pages:t.pages,subtitle:`(${t.questionCount})`,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:c[0]||(c[0]=c=>t.setPage(c))},null,8,[`page`,`pages`,`subtitle`,`onFirst`,`onPrev`,`onNext`,`onLast`]),createVNode(Mr,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cards,u=>(openBlock(),createElementBlock(Fragment,{key:u.card.cardID},[createVNode(O,{class:normalizeClass({"bg-blue-grey-lighten-5":u.isOpen,"elevation-4":u.isOpen}),density:`compact`,"data-cy":`course-card`},{prepend:withCtx(()=>[createBaseVNode(`div`,null,[createVNode(C,{class:normalizeClass([{"text-blue-grey-darken-1":u.isOpen},`font-weight-medium`])},{default:withCtx(()=>[createTextVNode(toDisplayString(t.cardPreview[u.card.cardID]),1)]),_:2},1032,[`class`]),createVNode(w,null,{default:withCtx(()=>[createTextVNode(` ELO: `+toDisplayString(t.cardElos[u.card.cardID]?.global?.score||`(unknown)`),1)]),_:2},1024)])]),append:withCtx(()=>[createVNode(D,{modelValue:u.isOpen,"onUpdate:modelValue":t=>u.isOpen=t,location:`left center`,transition:`slide-x-transition`,style:{display:`flex`,"flex-direction":`row-reverse`},persistent:``},{activator:withCtx(({props:c})=>[createVNode(T,mergeProps({ref_for:!0},c,{icon:u.isOpen?`mdi-close`:`mdi-plus`,size:`small`,variant:`text`,onClick:c=>t.clearSelections(u.card.cardID)}),null,16,[`icon`,`onClick`])]),default:withCtx(()=>[t.editMode===`full`?(openBlock(),createBlock(T,{key:`tags`,icon:``,size:`small`,variant:t.internalEditMode===`tags`?`elevated`:`outlined`,color:t.internalEditMode===`tags`?`teal`:`teal-darken-3`,onClick:c[1]||(c[1]=withModifiers(c=>t.internalEditMode=`tags`,[`stop`]))},{default:withCtx(()=>[createVNode(E,null,{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-bookmark`)])),_:1})]),_:1},8,[`variant`,`color`])):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(T,{key:`flag`,icon:``,size:`small`,variant:t.internalEditMode===`flag`?`elevated`:`outlined`,color:t.internalEditMode===`flag`?`error`:`error-darken-3`,onClick:c[2]||(c[2]=withModifiers(c=>t.internalEditMode=`flag`,[`stop`]))},{default:withCtx(()=>[createVNode(E,null,{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-flag`)])),_:1})]),_:1},8,[`variant`,`color`])):createCommentVNode(``,!0)]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])]),_:2},1032,[`class`]),u.isOpen?(openBlock(),createElementBlock(`div`,Zn,[createVNode(Or,{qualified_id:u.card,"view-lookup":t.viewLookup,class:`elevation-1`},null,8,[`qualified_id`,`view-lookup`]),t.editMode===`readonly`&&t.cardTags[u.card.cardID]?(openBlock(),createElementBlock(`div`,Qn,[createVNode(Ar,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cardTags[u.card.cardID],t=>(openBlock(),createBlock(kr,{key:t.name,size:`small`,color:`primary`,variant:`outlined`},{default:withCtx(()=>[createTextVNode(toDisplayString(t.name),1)]),_:2},1024))),128))]),_:2},1024)])):createCommentVNode(``,!0),withDirectives(createVNode(jr,{"course-i-d":t.courseId,"card-i-d":u.card.cardID,class:`mt-4`},null,8,[`course-i-d`,`card-i-d`]),[[vShow,t.internalEditMode===`tags`&&t.editMode===`full`]]),withDirectives(createBaseVNode(`div`,$n,[createVNode(T,{color:`error`,variant:`outlined`,onClick:t=>u.delBtn=!0},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(` Delete this card `)])),_:2},1032,[`onClick`]),u.delBtn?(openBlock(),createElementBlock(`span`,er,[c[8]||(c[8]=createBaseVNode(`span`,{class:`mr-2`},`Are you sure?`,-1)),createVNode(T,{color:`error`,variant:`elevated`,onClick:c=>t.deleteCard(u.card.cardID)},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(` Confirm `)])),_:2},1032,[`onClick`])])):createCommentVNode(``,!0)],512),[[vShow,t.internalEditMode===`flag`&&t.editMode===`full`]])])):createCommentVNode(``,!0)],64))),128))]),_:1}),createVNode(S,{class:`elevation-0`,page:t.page,pages:t.pages,onFirst:t.first,onPrev:t.prev,onNext:t.next,onLast:t.last,onSetPage:c[3]||(c[3]=c=>t.setPage(c))},null,8,[`page`,`pages`,`onFirst`,`onPrev`,`onNext`,`onLast`])]))]),_:1})}function _sfc_render$3$2(t,c,u,d,m,g){let b=resolveComponent(`v-btn`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-toolbar-title`),w=resolveComponent(`v-toolbar-items`),T=resolveComponent(`v-toolbar`),E=resolveComponent(`v-chip`),D=resolveComponent(`v-card-text`),O=resolveComponent(`v-card`),Or=resolveComponent(`course-card-browser`);return t.updatePending?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,rr,[renderSlot(t.$slots,`header`,{courseConfig:t.courseConfig,courseId:t.courseId},()=>[createBaseVNode(`h1`,ir,toDisplayString(t.courseConfig.name),1)],!0),createBaseVNode(`p`,ar,toDisplayString(t.courseConfig.description),1),renderSlot(t.$slots,`actions`,{userIsRegistered:t.userIsRegistered,courseId:t.courseId,editMode:t.editMode,register:t.register,drop:t.drop},()=>[createVNode(Transition,{name:`component-fade`,mode:`out-in`},{default:withCtx(()=>[t.userIsRegistered?(openBlock(),createElementBlock(`div`,or,[createVNode(b,{color:`success`,"data-cy":`focused-study-session-btn`,class:`me-2`},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`Start ad study session`)])),_:1}),t.editMode===`full`?(openBlock(),createBlock(b,{key:0,"data-cy":`add-content-btn`,color:`indigo-lighten-1`,class:`me-2`},{default:withCtx(()=>[createVNode(S,{start:``},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-plus`)])),_:1}),c[2]||(c[2]=createTextVNode(` Add content `))]),_:1})):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(b,{key:1,color:`green-darken-2`,title:`Rank course content for difficulty`,class:`me-2`},{default:withCtx(()=>[createVNode(S,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-format-list-numbered`)])),_:1}),c[4]||(c[4]=createTextVNode(` Arrange `))]),_:1})):createCommentVNode(``,!0),t.editMode===`full`?(openBlock(),createBlock(b,{key:2,color:`error`,size:`small`,variant:`outlined`,onClick:t.drop},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(` Drop this course `)])),_:1},8,[`onClick`])):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,sr,[createVNode(b,{"data-cy":`register-btn`,color:`primary`,class:`me-2`,onClick:t.register},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`Register`)])),_:1},8,[`onClick`]),createVNode(b,{variant:`outlined`,color:`primary`,class:`me-2`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`Start a trial study session`)])),_:1})]))]),_:1})],!0),renderSlot(t.$slots,`additional-content`,{},void 0,!0),createVNode(O,{class:`my-2`},{default:withCtx(()=>[createVNode(T,{density:`compact`},{default:withCtx(()=>[createVNode(C,null,{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`Tags`)])),_:1}),createVNode(w,null,{default:withCtx(()=>[createVNode(b,{variant:`text`},{default:withCtx(()=>[createTextVNode(`(`+toDisplayString(t.tags.length)+`)`,1)]),_:1})]),_:1})]),_:1}),createVNode(D,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tags,(c,u)=>(openBlock(),createElementBlock(`span`,{key:u},[renderSlot(t.$slots,`tag-link`,{tag:c,courseId:t.courseId},()=>[createVNode(E,{variant:`tonal`,class:`me-2 mb-2`},{default:withCtx(()=>[createTextVNode(toDisplayString(c.name),1)]),_:2},1024)],!0)]))),128))]),_:3})]),_:3}),createVNode(Or,{class:`my-3`,"course-id":t.courseId,"view-lookup-function":t.viewLookupFunction,"edit-mode":t.editMode},null,8,[`course-id`,`view-lookup-function`,`edit-mode`])]))}function _sfc_render$2$2(t,c,u,d,m,g){let b=resolveComponent(`CardViewer`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-btn`),w=resolveComponent(`v-row`);return openBlock(),createBlock(w,{column:``,align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(b,{view:t.views[t.viewIndex],data:t.data,course_id:`[browsing]`,card_id:`[browsing]`},null,8,[`view`,`data`]),c[2]||(c[2]=createBaseVNode(`br`,null,null,-1)),c[3]||(c[3]=createBaseVNode(`br`,null,null,-1)),t.suppressSpinner?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,ur,[t.spinner?(openBlock(),createBlock(C,{key:0,icon:``,variant:`outlined`,color:`primary`,onClick:t.decrementView},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`mdi-chevron-left`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0),createTextVNode(` `+toDisplayString(t.views[t.viewIndex].name)+` `,1),t.spinner?(openBlock(),createBlock(C,{key:1,icon:``,variant:`outlined`,color:`primary`,onClick:t.incrementView},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`mdi-chevron-right`)])),_:1})]),_:1},8,[`onClick`])):createCommentVNode(``,!0)]))]),_:1})}function _sfc_render$1$5(t,c,u,d,m,g){let b=resolveComponent(`v-chip`),S=resolveComponent(`v-list-item`),C=resolveComponent(`v-autocomplete`),w=resolveComponent(`v-icon`);return openBlock(),createElementBlock(`div`,pr,[createVNode(C,{modelValue:t.localFilter.include,"onUpdate:modelValue":c[0]||(c[0]=c=>t.localFilter.include=c),items:t.availableTags,loading:t.loading,disabled:t.loading,label:`Include tags`,placeholder:`Type to search tags...`,hint:`Cards must have at least one of these tags`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,class:`mb-2`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:withCtx(({props:t,item:c})=>[createVNode(b,mergeProps(t,{color:`primary`,variant:`tonal`,size:`small`}),{default:withCtx(()=>[createTextVNode(toDisplayString(c.raw),1)]),_:2},1040)]),item:withCtx(({props:c,item:u})=>[createVNode(S,mergeProps(c,{title:u.raw}),createSlots({_:2},[t.tagSnippets[u.raw]?{name:`subtitle`,fn:withCtx(()=>[createTextVNode(toDisplayString(t.tagSnippets[u.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),createVNode(C,{modelValue:t.localFilter.exclude,"onUpdate:modelValue":c[1]||(c[1]=c=>t.localFilter.exclude=c),items:t.availableTagsForExclude,loading:t.loading,disabled:t.loading,label:`Exclude tags`,placeholder:`Type to search tags...`,hint:`Cards with these tags will be excluded`,"persistent-hint":``,multiple:``,chips:``,"closable-chips":``,clearable:``,density:`compact`,variant:`outlined`,"custom-filter":t.fuzzyFilter,"no-data-text":`No matching tags found`},{chip:withCtx(({props:t,item:c})=>[createVNode(b,mergeProps(t,{color:`error`,variant:`tonal`,size:`small`}),{default:withCtx(()=>[createTextVNode(toDisplayString(c.raw),1)]),_:2},1040)]),item:withCtx(({props:c,item:u})=>[createVNode(S,mergeProps(c,{title:u.raw}),createSlots({_:2},[t.tagSnippets[u.raw]?{name:`subtitle`,fn:withCtx(()=>[createTextVNode(toDisplayString(t.tagSnippets[u.raw]),1)]),key:`0`}:void 0]),1040,[`title`])]),_:1},8,[`modelValue`,`items`,`loading`,`disabled`,`custom-filter`]),t.hasActiveFilter?(openBlock(),createElementBlock(`div`,mr,[createVNode(w,{size:`small`,color:`info`,class:`mr-1`},{default:withCtx(()=>c[2]||(c[2]=[createTextVNode(`mdi-filter`)])),_:1}),t.localFilter.include.length?(openBlock(),createElementBlock(`span`,hr,` Including: `+toDisplayString(t.localFilter.include.join(`, `)),1)):createCommentVNode(``,!0),t.localFilter.include.length&&t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,gr,` · `)):createCommentVNode(``,!0),t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,_r,` Excluding: `+toDisplayString(t.localFilter.exclude.join(`, `)),1)):createCommentVNode(``,!0)])):createCommentVNode(``,!0)])}function _sfc_render$27(t,c,u,d,m,g){let b=resolveComponent(`v-icon`),S=resolveComponent(`v-card-title`),C=resolveComponent(`v-card-subtitle`),w=resolveComponent(`v-alert`),T=resolveComponent(`v-list-item`),E=resolveComponent(`v-autocomplete`),D=resolveComponent(`v-chip`),O=resolveComponent(`v-slider`),Or=resolveComponent(`v-btn`),kr=resolveComponent(`v-list`),Ar=resolveComponent(`v-progress-circular`),jr=resolveComponent(`v-card-text`),Mr=resolveComponent(`v-spacer`),Nr=resolveComponent(`v-card-actions`),Pr=resolveComponent(`v-card`);return openBlock(),createBlock(Pr,{loading:t.loading},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>[createVNode(b,{start:``},{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`mdi-tune`)])),_:1}),c[4]||(c[4]=createTextVNode(` Learning Preferences `))]),_:1}),t.courseId?(openBlock(),createBlock(C,{key:0},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(` Customize how content is presented in this course `)])),_:1})):createCommentVNode(``,!0),createVNode(jr,null,{default:withCtx(()=>[t.courseId?t.loading?(openBlock(),createElementBlock(`div`,Er,[createVNode(Ar,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,xr,[createBaseVNode(`div`,Sr,[createBaseVNode(`h3`,Cr,[createVNode(b,{start:``,size:`small`},{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-tune-variant`)])),_:1}),c[8]||(c[8]=createTextVNode(` Tag Preferences `))]),c[10]||(c[10]=createBaseVNode(`p`,{class:`text-body-2 text-medium-emphasis mb-3`},` Adjust how much you want to see cards with specific tags. 0 = exclude, 1 = neutral, higher = prefer more. `,-1)),createVNode(E,{modelValue:t.tagToAdd,"onUpdate:modelValue":[c[0]||(c[0]=c=>t.tagToAdd=c),t.addTag],items:t.availableTagsToAdd,"item-title":`name`,"item-value":`name`,label:`Add tag preference`,placeholder:`Search tags...`,density:`compact`,variant:`outlined`,clearable:``,"hide-details":``,class:`mb-4`},{item:withCtx(({props:t,item:c})=>[createVNode(T,normalizeProps(guardReactiveProps(t)),{subtitle:withCtx(()=>[createTextVNode(toDisplayString(c.raw.snippet),1)]),_:2},1040)]),_:1},8,[`modelValue`,`items`,`onUpdate:modelValue`]),t.tagNames.length>0?(openBlock(),createBlock(kr,{key:0,class:`mt-4`},{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.tagNames,c=>(openBlock(),createBlock(T,{key:c,class:`px-0`},{default:withCtx(()=>[createBaseVNode(`div`,wr,[createVNode(D,{size:`small`,variant:`tonal`,class:`flex-shrink-0`,style:{"min-width":`120px`}},{default:withCtx(()=>[createTextVNode(toDisplayString(c),1)]),_:2},1024),createVNode(O,{"model-value":t.preferences.boost[c],min:t.sliderConfigResolved.min,max:t.globalSliderMax,step:.01,"hide-details":``,class:`flex-grow-1`,"thumb-label":``,"onUpdate:modelValue":u=>t.updateBoost(c,u)},{"thumb-label":withCtx(({modelValue:c})=>[createTextVNode(toDisplayString(t.formatMultiplier(c)),1)]),_:2},1032,[`model-value`,`min`,`max`,`onUpdate:modelValue`]),createBaseVNode(`span`,Tr,toDisplayString(t.formatMultiplier(t.preferences.boost[c])),1),createVNode(Or,{icon:`mdi-plus`,size:`small`,variant:`text`,density:`compact`,disabled:t.globalSliderMax>=t.sliderConfigResolved.absoluteMax,onClick:u=>t.expandSliderRange(c)},null,8,[`disabled`,`onClick`]),createVNode(Or,{icon:`mdi-delete`,size:`small`,variant:`text`,density:`compact`,onClick:u=>t.removeTag(c)},null,8,[`onClick`])])]),_:2},1024))),128))]),_:1})):(openBlock(),createBlock(w,{key:1,type:`info`,variant:`tonal`,class:`mt-4`},{default:withCtx(()=>c[9]||(c[9]=[createTextVNode(` No tag preferences configured yet. Add tags above to get started. `)])),_:1}))]),t.saveError?(openBlock(),createBlock(w,{key:0,type:`error`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":c[1]||(c[1]=c=>t.saveError=``)},{default:withCtx(()=>[createTextVNode(toDisplayString(t.saveError),1)]),_:1})):createCommentVNode(``,!0),t.saveSuccess?(openBlock(),createBlock(w,{key:1,type:`success`,variant:`tonal`,class:`mt-4`,closable:``,"onClick:close":c[2]||(c[2]=c=>t.saveSuccess=!1)},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(` Preferences saved successfully `)])),_:1})):createCommentVNode(``,!0)])):(openBlock(),createBlock(w,{key:0,type:`info`,variant:`tonal`,class:`mb-4`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(` Select a course to configure your learning preferences. `)])),_:1}))]),_:1}),t.courseId&&!t.loading?(openBlock(),createBlock(Nr,{key:1},{default:withCtx(()=>[createVNode(Mr),createVNode(Or,{variant:`text`,disabled:!t.hasChanges,onClick:t.resetToSaved},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Reset `)])),_:1},8,[`disabled`,`onClick`]),createVNode(Or,{color:`primary`,variant:`flat`,loading:t.saving,disabled:!t.hasChanges,onClick:t.savePreferences},{default:withCtx(()=>c[13]||(c[13]=[createTextVNode(` Save Preferences `)])),_:1},8,[`loading`,`disabled`,`onClick`])]),_:1})):createCommentVNode(``,!0)]),_:1},8,[`loading`])}var Ee$1,De$1,Oe$1,ke$1,Ae$1,je$1,Me$1,Ne$1,Pe$1,Fe$1,Ie$1,Le$1,Z$2,Re$1,ze$1,Be$1,Ve$1,He$1,Ue$1,We$1,Ge$1,Ke$1,qe$1,Je$1,Ye$1,Xe$1,Ze$1,Qe$1,$e$1,et$1,tt$1,nt$1,rt$1,it$1,at$1,Displayable,Question,getApiBase,ot$1,st$1,ct$1,Q$1,lt$1,ut$1,dt$1,ft$1,pt$1,mt$1,ht$1,gt$1,_t,vt$1,yt,bt,xt,St,Ct,wt,Tt,Et,Dt,Ot,kt,At,jt,Mt,Nt,Pt,Ft,It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt,Gt,Kt,qt,Jt,Yt,Xt,Zt,Qt,$t,en,tn,nn,rn,an,on,sn,cn,ln,un,dn,fn,pn,mn,hn,gn,_n,vn,yn,useAuthStore,useConfigStore,bn,xn,Sn,Cn,wn,Tn,En,Dn,On,kn,An,jn,Mn,Nn,Pn,Fn,In,Ln,Rn,zn,Bn,Vn,Hn,Un,Wn,Gn,Kn,qn,Jn,Yn,Xn,Zn,Qn,$n,er,tr,nr,rr,ir,ar,or,sr,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,$$2,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,init_common_ui_es=__esmMin((()=>{init_MarkdownRenderer_kStoDRNE(),init_vue_runtime_esm_bundler(),init_moment(),init_dist$1(),init_dist(),init_pinia(),init_vue_router(),init_vue_tags_input(),Ee$1=defineComponent({name:`HeatMap`,props:{activityRecords:{type:Array,default:()=>[]},activityRecordsGetter:{type:Function,default:null},inactiveColor:{type:Object,default:()=>({h:0,s:0,l:.9})},activeColor:{type:Object,default:()=>({h:155,s:1,l:.5})},cellSize:{type:Number,default:12},cellMargin:{type:Number,default:3},enableSeasonalColors:{type:Boolean,default:!0}},data(){return{isLoading:!1,localActivityRecords:[],heatmapData:{},weeks:[],tooltipData:null,tooltipStyle:{},maxInRange:0}},computed:{width(){return 53*(this.cellSize+this.cellMargin)},height(){return 7*(this.cellSize+this.cellMargin)},effectiveActivityRecords(){let t=Array.isArray(this.localActivityRecords)&&this.localActivityRecords.length>0,c=t?this.localActivityRecords:this.activityRecords||[];return console.log(`Using effectiveActivityRecords, count:`,c.length,`source:`,t?`local`:`prop`),c}},watch:{activityRecords:{handler(){this.processRecords(),this.createWeeksData()},immediate:!0}},async created(){if(this.activityRecordsGetter)try{this.isLoading=!0,console.log(`Fetching activity records using getter...`);let t=await this.activityRecordsGetter();Array.isArray(t)?(this.localActivityRecords=t.filter(t=>{if(!t||!t.timeStamp)return!1;try{let c=hooks(t.timeStamp);return c.isValid()&&c.year()>2e3&&c.year()<2100}catch{return!1}}),console.log(`Received ${t.length} records, ${this.localActivityRecords.length} valid after filtering`),this.processRecords(),this.createWeeksData()):(console.error(`Activity records getter did not return an array:`,t),this.localActivityRecords=[])}catch(t){console.error(`Error fetching activity records:`,t),this.localActivityRecords=[]}finally{this.isLoading=!1}else console.log(`No activityRecordsGetter provided, using direct activityRecords prop`)},methods:{toDateString(t){let c=hooks(t);return hooks.months()[c.month()]+` `+c.date()},processRecords(){let t=this.effectiveActivityRecords||[];console.log(`Processing ${t.length} records`);let c={};if(t.length===0){console.log(`No records to process`),this.heatmapData=c;return}let u=new Set,d={},m=0,g=0;for(let b=0;b<t.length;b++){let S=t[b];if(!S||typeof S!=`object`||!S.timeStamp){g++;continue}try{let t;if(typeof S.timeStamp==`string`)t=hooks(S.timeStamp).format(`YYYY-MM-DD`);else if(typeof S.timeStamp==`number`)t=hooks(new Date(S.timeStamp)).format(`YYYY-MM-DD`);else if(typeof S.timeStamp==`object`)t=typeof S.timeStamp.format==`function`?S.timeStamp.format(`YYYY-MM-DD`):S.timeStamp instanceof Date?hooks(S.timeStamp).format(`YYYY-MM-DD`):hooks(String(S.timeStamp)).format(`YYYY-MM-DD`);else{g++;continue}if(hooks(t,`YYYY-MM-DD`,!0).isValid()){c[t]=(c[t]||0)+1,u.add(t);let g=t.substring(0,7);d[g]=(d[g]||0)+1,m++}else g++}catch{g++}}console.log(`Processed ${m} valid dates, ${g} invalid dates`),console.log(`Found ${u.size} unique dates`),console.log(`Date distribution by month:`,d),this.heatmapData=c},createWeeksData(){this.weeks=[],this.maxInRange=0;let t=hooks(),c=t.clone().subtract(52,`weeks`),u=c.clone().startOf(`week`);console.log(`Creating weeks data from`,c.format(`YYYY-MM-DD`),`to`,t.format(`YYYY-MM-DD`)),Object.keys(this.heatmapData).length===0&&console.log(`No heatmap data available to display`);let d=Object.keys(this.heatmapData).slice(0,5);for(console.log(`Sample dates in heatmap data:`,d);u.isSameOrBefore(t);){let t=[];for(let c=0;c<7;c++){let c=u.format(`YYYY-MM-DD`),d={date:c,count:this.heatmapData[c]||0};t.push(d),d.count>this.maxInRange&&(this.maxInRange=d.count),u.add(1,`day`)}this.weeks.push(t)}console.log(`Weeks data created, maxInRange:`,this.maxInRange);let m=0,g=0;Object.values(this.heatmapData).forEach(t=>{m++,g+=t}),console.log(`Activity summary: ${g} activities across ${m} days`)},getColor(t){if(this.maxInRange===0)return this.hslToString(this.inactiveColor);let c=t===0?0:Math.min(2*t/this.maxInRange,1),u=this.activeColor;if(this.enableSeasonalColors){let t=hooks();t.month()===11&&t.date()>=5?u=Math.random()>.5?{h:350,s:.8,l:.5}:{h:135,s:.8,l:.4}:t.month()===9&&t.date()>=25&&(u=Math.random()>.5?{h:0,s:0,l:0}:Math.random()>.5?{h:30,s:1,l:.5}:{h:270,s:1,l:.5})}let d=u.h,m=this.interpolate(this.inactiveColor.s,u.s,c),g=this.interpolate(this.inactiveColor.l,u.l,c);return this.hslToString({h:d,s:m,l:g})},interpolate(t,c,u){return t+(c-t)*u},hslToString(t){return`hsl(${t.h}, ${t.s*100}%, ${t.l*100}%)`},showTooltip(t,c){this.tooltipData=t,this.tooltipStyle={position:`absolute`,left:`${c.pageX+10}px`,top:`${c.pageY+10}px`}},hideTooltip(){this.tooltipData=null}}}),De$1=[`width`,`height`],Oe$1=[`transform`],ke$1=[`y`,`width`,`height`,`fill`,`onMouseover`],__name(_sfc_render$26,`_sfc_render`),Ae$1=F$3(Ee$1,[[`render`,_sfc_render$26],[`__scopeId`,`data-v-ca46239a`]]),je$1=defineComponent({name:`SkMouseTrap`,props:{refreshInterval:{type:Number,default:500}},data(){return{commands:[],display:!1,intervalId:null}},created(){this.intervalId=window.setInterval(this.refreshState,this.refreshInterval)},beforeUnmount(){this.intervalId!==null&&clearInterval(this.intervalId)},methods:{refreshState(){this.commands=I$2.commands,this.display=this.commands.length>0}}}),Me$1={class:`text-caption ml-2`},__name(_sfc_render$25,`_sfc_render`),Ne$1=F$3(je$1,[[`render`,_sfc_render$25]]),Pe$1=defineComponent({name:`SkMouseTrapToolTip`,props:{hotkey:{type:[String,Array],required:!0},command:{type:String,required:!0},disabled:{type:Boolean,default:!1},position:{type:String,default:`top`},showTooltip:{type:Boolean,default:!0},highlightEffect:{type:String,default:`glow`}},emits:[`hotkey-triggered`],setup(t,{emit:c}){let u=ref(null),d=ref(!1);ref(`hotkey-${Math.random().toString(36).substring(2,15)}`);let m=computed(()=>{let c=Array.isArray(t.hotkey)?t.hotkey[0]:t.hotkey;return c.includes(` `)?c.toLowerCase().split(` `).map(t=>t.charAt(0)+t.slice(1)).join(`, `):c.toLowerCase().split(`+`).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(` + `)});watch(()=>d.value,c=>{if(!u.value||t.disabled)return;let d=u.value.querySelector(`button, a, input[type="button"], [role="button"]`);d&&(d.style.transition=`all 250ms ease`,c&&t.highlightEffect!==`none`?d.style.filter=`brightness(1.1)`:d.style.filter=``)});let handleKeyDown=t=>{t.key===`Control`&&(d.value=!0)},handleKeyUp=t=>{t.key===`Control`&&(d.value=!1)},handleHotkeyPress=()=>{if(t.disabled||!u.value)return;let d=u.value.querySelector(`button, a, input[type="button"], [role="button"]`);if(d||(d=u.value.querySelector(`v-list-item, .v-list-item, router-link, .router-link, a, [to]`)),!d&&(u.value.hasAttribute(`to`)||u.value.tagName===`A`||u.value.classList.contains(`v-list-item`))&&(d=u.value),!d){let t=u.value.closest(`v-list-item, .v-list-item, a, [to]`);t&&(d=t)}if(d)if(d.hasAttribute(`to`)){let u=d.getAttribute(`to`);if(u&&window.location.pathname!==u){let t=window.$nuxt?.$router||window.$router;t&&typeof t.push==`function`?t.push(u):window.location.pathname=u}c(`hotkey-triggered`,t.hotkey)}else d.click(),c(`hotkey-triggered`,t.hotkey);else console.log(`No clickable element found for hotkey`,t.hotkey),c(`hotkey-triggered`,t.hotkey)},registerHotkey=()=>{t.disabled||I$2.addBinding({hotkey:t.hotkey,command:t.command,callback:handleHotkeyPress})},unregisterHotkey=()=>{t.disabled||I$2.removeBinding(t.hotkey)};return watch(()=>t.disabled,t=>{t?unregisterHotkey():registerHotkey()}),onMounted(()=>{document.addEventListener(`keydown`,handleKeyDown),document.addEventListener(`keyup`,handleKeyUp),registerHotkey()}),onBeforeUnmount(()=>{document.removeEventListener(`keydown`,handleKeyDown),document.removeEventListener(`keyup`,handleKeyUp),unregisterHotkey()}),{wrapperElement:u,isControlKeyPressed:d,formattedHotkey:m}}}),__name(_sfc_render$24,`_sfc_render`),Fe$1=F$3(Pe$1,[[`render`,_sfc_render$24],[`__scopeId`,`data-v-5d6fb09c`]]),{setInstance:Ie$1,getInstance:Le$1,alertUser:Z$2}=(()=>{let t=null;return{setInstance(c){t=c},getInstance(){return t},alertUser(c){let u=t;if(u){u.addSnack(c);return}console.error(`SnackbarService not found`)}}})(),Re$1=defineComponent({name:`SnackbarService`,data(){return{snacks:[],show:[]}},mounted(){Ie$1(this)},methods:{addSnack(t){this.snacks.push(t),this.show.push(!0)},close(){this.show.pop(),this.show.push(!1)},getColor(t){if(t.status===Status.ok)return`success`;if(t.status===Status.error)return`error`;if(t.status===Status.warning)return`yellow`}}}),ze$1={class:`d-flex align-center justify-space-between w-100`},__name(_sfc_render$23,`_sfc_render`),Be$1=F$3(Re$1,[[`render`,_sfc_render$23]]),Ve$1=defineComponent({name:`PaginatingToolbar`,props:{pages:{type:Array,required:!0},page:{type:Number,required:!0},title:{type:String,required:!1,default:``},subtitle:{type:String,required:!1,default:``}},emits:[`first`,`prev`,`next`,`last`,`set-page`]}),He$1={key:0,class:`ms-2 text-subtitle-2`,"data-cy":`paginating-toolbar-subtitle`},__name(_sfc_render$22,`_sfc_render`),Ue$1=F$3(Ve$1,[[`render`,_sfc_render$22],[`__scopeId`,`data-v-a75fea7e`]]),We$1=defineComponent({name:`CardSearch`,emits:{search:t=>typeof t==`string`},data(){return{query:``}},methods:{search(){this.$emit(`search`,this.query)}}}),Ge$1={class:`card-search`},__name(_sfc_render$21,`_sfc_render`),Ke$1=F$3(We$1,[[`render`,_sfc_render$21]]),qe$1=defineComponent({name:`CardSearchResults`,emits:{"card-selected":t=>typeof t.cardId==`string`&&typeof t.courseId==`string`},props:{query:{type:String,required:!0},dataLayer:{type:Object,required:!0},courseFilter:{type:String,default:null}},data(){return{cards:[],loading:!1,error:null,selectedCardId:null}},watch:{query:{immediate:!0,handler(t){t&&this.fetchResults(t)}}},methods:{async fetchResults(t){this.loading=!0,this.error=null;try{let c=[];if(this.courseFilter)c=[this.courseFilter],console.log(`Filtering search to course: ${this.courseFilter}`);else{let{CourseLookup:t}=await Promise.resolve().then(()=>(init_dist(),dist_exports));c=(await t.allCourseWare()).map(t=>t._id).filter(Boolean),console.log(`Searching across all ${c.length} courses`)}let u=[];for(let d of c){let c=await this.dataLayer.getCourseDB(d).searchCards(t);for(let t of c)u.push({...t,courseId:d})}this.cards=u,console.log(`Search completed: found ${u.length} cards across ${c.length} courses`)}catch(t){this.error=`Error fetching search results.`,console.error(`Search error:`,t)}finally{this.loading=!1}},selectCard(t){this.selectedCardId=t._id,this.$emit(`card-selected`,{cardId:t._id,courseId:t.courseId})}}}),Je$1={class:`card-search-results`},Ye$1={key:0},Xe$1={key:1},Ze$1={key:2},__name(_sfc_render$20,`_sfc_render`),Qe$1=F$3(qe$1,[[`render`,_sfc_render$20],[`__scopeId`,`data-v-285e13bd`]]),$e$1=defineComponent({name:`CardHistoryViewer`,props:{cardId:{type:String,required:!0},courseId:{type:String,required:!0},userId:{type:String,required:!0},userDB:{type:Object,required:!0}},data(){return{history:[],cardHistory:null,bestIntervalHumanized:``,loading:!1,error:null,headers:[{title:`Timestamp`,key:`formattedTimeStamp`},{title:`Interval`,key:`userFriendlyInterval`},{title:`Time Spent (s)`,key:`timeSpentSeconds`},{title:`Correct?`,key:`isCorrect`},{title:`Performance`,key:`performance`},{title:`Prior Attempts`,key:`priorAttemps`},{title:`User Answer`,key:`userAnswer`}]}},watch:{cardId:{immediate:!0,handler(t){t&&this.userDB&&this.fetchHistory()}},userDB:{handler(t){t&&this.cardId&&this.fetchHistory()}}},methods:{async fetchHistory(){this.loading=!0,this.error=null;try{let t=getCardHistoryID(this.courseId,this.cardId),c=await this.userDB.get(t);this.cardHistory=c,this.bestIntervalHumanized=hooks.duration(c.bestInterval,`seconds`).humanize();let u=[...c.records].sort((t,c)=>hooks(t.timeStamp).valueOf()-hooks(c.timeStamp).valueOf());this.history=u.map((t,c)=>{let d=hooks(t.timeStamp),m={...t,formattedTimeStamp:d.format(`YYYY-MM-DD HH:mm:ss`),timeSpentSeconds:Math.round(t.timeSpent/1e3),isCorrect:t.isCorrect,performance:t.performance,priorAttemps:t.priorAttemps,userAnswer:t.userAnswer};if(c>0){let t=hooks(u[c-1].timeStamp),g=d.diff(t,`seconds`,!0);m.intervalFromPrevious=Math.round(g*100)/100,m.userFriendlyInterval=`${m.intervalFromPrevious} sec (${hooks.duration(g,`seconds`).humanize()})`}return m})}catch(t){this.error=`Error fetching card history.`,console.error(t)}finally{this.loading=!1}}}}),et$1={class:`card-history-viewer`},tt$1={key:0},nt$1={key:1},rt$1={key:2,class:`error-message`},it$1={key:3},__name(_sfc_render$19,`_sfc_render`),at$1=F$3($e$1,[[`render`,_sfc_render$19],[`__scopeId`,`data-v-a4bdfdfb`]]),Displayable=class{constructor(t){if(t.length===0)throw Error(`
|
|
473
476
|
Displayable Constructor was called with no view Data.
|
|
474
477
|
`);validateData(this.dataShapes(),t)}},_defineProperty$1(Displayable,`dataShapes`,void 0),_defineProperty$1(Displayable,`views`,void 0),_defineProperty$1(Displayable,`seedData`,void 0),_defineProperty$1(Displayable,`acceptsUserData`,!0),Question=class extends Displayable{displayedSkill(t,c){console.warn(`Question is running the reference implementation of displayedSkill.
|
|
475
478
|
Consider overriding!`);let u=5e3,d=Math.min(c,10*u),m=d/u,g=d>u?.8**m:1,b=this.isCorrect(t)?1:0;return b*=g,Math.min(b,1)}evaluate(t,c){return{isCorrect:this.isCorrect(t),performance:this.displayedSkill(t,c)}}},getApiBase=()=>{let t=`fallback (empty string)`,c=``;if(!c&&typeof window<`u`&&window.__SKUILDER_CONFIG__?.apiBase){let u=window.__SKUILDER_CONFIG__.apiBase.replace(/\/$/,``);c=u.startsWith(`/`)?u:`/${u}`,t=`window.__SKUILDER_CONFIG__.apiBase`}return console.log(`[authAPI] getApiBase() called`),console.log(`[authAPI] source:`,t),console.log(`[authAPI] result:`,c),c},ot$1=defineComponent({name:`StudySessionTimer`,props:{timeRemaining:{type:Number,required:!0},sessionTimeLimit:{type:Number,required:!0,default:5}},emits:[`add-time`],setup(t,{emit:c}){let u=ref(!1),d=computed(()=>{let c=``,u=t.timeRemaining;u>60&&(c=Math.floor(u/60).toString()+`:`);let d=u%60;return c+=d>=10?d:`0`+d,u<=60&&(c+=` seconds`),c+=` left!`,c}),m=computed(()=>t.timeRemaining>60?100*(t.timeRemaining/(60*t.sessionTimeLimit)):100*(t.timeRemaining/60)),g=computed(()=>t.timeRemaining>60?`primary`:`orange darken-3`),addSessionTime=()=>{c(`add-time`)};return{hovered:u,formattedTimeRemaining:d,percentageRemaining:m,timerColor:g,addSessionTime}}}),__name(_sfc_render$18,`_sfc_render`),st$1=F$3(ot$1,[[`render`,_sfc_render$18],[`__scopeId`,`data-v-5960940a`]]),ct$1=defineComponent({name:`CardViewer`,ref:{},props:{sessionOrder:{type:Number,required:!1,default:0},card_id:{type:String,required:!0,default:``},course_id:{type:String,required:!0,default:``},view:{type:[Function,Object],required:!0},data:{type:Array,required:!0},user_elo:{type:Object,default:()=>({global:{score:1e3,count:0},tags:{},misc:{}})},card_elo:{type:Number,default:1e3},frameless:{type:Boolean,default:!1}},emits:[`emitResponse`,`requestReplan`,`readyToAdvance`],methods:{processResponse(t){console.log(`
|
|
@@ -480,7 +483,7 @@ Displayable Constructor was called with no view Data.
|
|
|
480
483
|
${this.sessionController?.toString()||`Session controller not initialized`}
|
|
481
484
|
User courses: ${this.contentSources.filter(t=>t.type===`course`).map(t=>t.id).toString()}
|
|
482
485
|
User classrooms: ${t.map(t=>t._id).toString()||`No classrooms`}
|
|
483
|
-
`)}catch(t){console.error(`[StudySession] Error during final session setup:`,t)}if(this.sessionController)try{this.$emit(`session-started`),this.loadCard(await this.sessionController.nextCard())}catch(t){console.error(`[StudySession] Error loading next card:`,t),this.$emit(`session-error`,{message:`Failed to load study card`,error:t})}else console.error(`[StudySession] Cannot load card: session controller not initialized`),this.$emit(`session-error`,{message:`Study session initialization failed`})},countCardViews(t,c){return this.sessionRecord.filter(u=>u.card.course_id===t&&u.card.card_id===c).length},async processResponse(t){this.$emit(`card-response`,t),this.timerIsActive=!0,t.cardID=this.cardID,t.courseID=this.courseID,this.currentCard.records.push(t),console.log(`[StudySession] StudySession.processResponse is running...`);let c=this.logCardRecord(t).catch(t=>{throw console.error(`[StudySession] putCardRecord failed:`,t),t}),u=1,d=1;if(isQuestionView(this.$refs.cardViewer?.$refs.activeView)){let t=this.$refs.cardViewer.$refs.activeView;u=t.maxAttemptsPerView,d=t.maxSessionViews}let m=this.countCardViews(this.courseID,this.cardID),g=await this.sessionController.submitResponse(t,c,this.userCourseRegDoc,this.currentCard,this.courseID,this.cardID,u,d,m);try{this.handleUIFeedback(g)}catch(t){console.error(`[StudySession] Error handling UI feedback: ${t}.\n\nResult: ${JSON.stringify(g)}`)}if(this.replanPending){let t=this.replanOptions,c=t?.label,u=c?` [${c}]`:``;console.log(`[StudySession] Firing deferred replan (post-submitResponse)${u}`),this.replanPending=!1,this.replanOptions=null,this.sessionController.requestReplan(t??void 0),this.$emit(`replan-requested`)}g.deferred?(console.log(`[StudySession] Deferred advance — stashing action: ${g.nextCardAction}`),this.deferredNextCardAction=g.nextCardAction):g.shouldLoadNextCard&&this.loadCard(await this.sessionController.nextCard(g.nextCardAction)),g.shouldClearFeedbackShadow&&this.clearFeedbackShadow()},handleUIFeedback(t){if(t.isCorrect){if(!this.frameless)try{this.$refs.shadowWrapper&&t.performanceScore!==void 0&&(this.$refs.shadowWrapper.setAttribute(`style`,`--r: ${255*(1-t.performanceScore)}; --g:255`),this.$refs.shadowWrapper.classList.add(`correct`))}catch(t){console.warn(`[StudySession] Error setting shadowWrapper style: ${t}`)}this.sessionConfig.likesConfetti&&Zt({origin:{y:1,x:.25+.5*Math.random()},disableForReducedMotion:!0,angle:60+60*Math.random()})}else if(!this.frameless)try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.add(`incorrect`)}catch(t){console.warn(`[StudySession] Error setting shadowWrapper style: ${t}`)}},clearFeedbackShadow(){this.frameless||setTimeout(()=>{try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.remove(`correct`,`incorrect`)}catch(t){console.warn(`[StudySession] Error clearing shadowWrapper style: ${t}`)}},1250)},async logCardRecord(t){console.log(`[StudySession] About to call user.putCardRecord...`);let c=await this.user.putCardRecord(t);return console.log(`[StudySession] user.putCardRecord completed`),c},async loadCard(t){if(this.loading){console.warn(`Attempted to load card while loading another...`);return}if(console.log(`[StudySession] loading: ${JSON.stringify(t)}`),t===null){this.sessionFinished=!0,this.$emit(`session-finished`,this.sessionRecord);return}this.cardType=t.item.status,this.loading=!0,this.cardCount++,this.data=t.data,this.view=markRaw(t.view),this.cardID=t.item.cardID,this.courseID=t.item.courseID,this.card_elo=t.item.elo||1e3,this.sessionRecord.push({card:{course_id:t.item.courseID,card_id:t.item.cardID,card_elo:this.card_elo,tags:t.tags??[]},item:t.item,records:[]}),this.$emit(`card-loaded`,{courseID:t.item.courseID,cardID:t.item.cardID,cardCount:this.cardCount}),this.loading=!1}}}),$t={key:0,class:`StudySession`},en={key:2},tn={key:3},nn={class:`text-h4`},rn={key:0},an={key:4,ref:`shadowWrapper`,class:`card-transition-container`},on={key:0},__name(_sfc_render$15,`_sfc_render`),sn=F$3(Qt,[[`render`,_sfc_render$15],[`__scopeId`,`data-v-de7119e9`]]),cn=defineComponent({name:`MultipleChoiceOption`,components:{MarkdownRenderer:defineAsyncComponent(()=>Promise.resolve().then(()=>(
|
|
486
|
+
`)}catch(t){console.error(`[StudySession] Error during final session setup:`,t)}if(this.sessionController)try{this.$emit(`session-started`),this.loadCard(await this.sessionController.nextCard())}catch(t){console.error(`[StudySession] Error loading next card:`,t),this.$emit(`session-error`,{message:`Failed to load study card`,error:t})}else console.error(`[StudySession] Cannot load card: session controller not initialized`),this.$emit(`session-error`,{message:`Study session initialization failed`})},countCardViews(t,c){return this.sessionRecord.filter(u=>u.card.course_id===t&&u.card.card_id===c).length},async processResponse(t){this.$emit(`card-response`,t),this.timerIsActive=!0,t.cardID=this.cardID,t.courseID=this.courseID,this.currentCard.records.push(t),console.log(`[StudySession] StudySession.processResponse is running...`);let c=this.logCardRecord(t).catch(t=>{throw console.error(`[StudySession] putCardRecord failed:`,t),t}),u=1,d=1;if(isQuestionView(this.$refs.cardViewer?.$refs.activeView)){let t=this.$refs.cardViewer.$refs.activeView;u=t.maxAttemptsPerView,d=t.maxSessionViews}let m=this.countCardViews(this.courseID,this.cardID),g=await this.sessionController.submitResponse(t,c,this.userCourseRegDoc,this.currentCard,this.courseID,this.cardID,u,d,m);try{this.handleUIFeedback(g)}catch(t){console.error(`[StudySession] Error handling UI feedback: ${t}.\n\nResult: ${JSON.stringify(g)}`)}if(this.replanPending){let t=this.replanOptions,c=t?.label,u=c?` [${c}]`:``;console.log(`[StudySession] Firing deferred replan (post-submitResponse)${u}`),this.replanPending=!1,this.replanOptions=null,this.sessionController.requestReplan(t??void 0),this.$emit(`replan-requested`)}g.deferred?(console.log(`[StudySession] Deferred advance — stashing action: ${g.nextCardAction}`),this.deferredNextCardAction=g.nextCardAction):g.shouldLoadNextCard&&this.loadCard(await this.sessionController.nextCard(g.nextCardAction)),g.shouldClearFeedbackShadow&&this.clearFeedbackShadow()},handleUIFeedback(t){if(t.isCorrect){if(!this.frameless)try{this.$refs.shadowWrapper&&t.performanceScore!==void 0&&(this.$refs.shadowWrapper.setAttribute(`style`,`--r: ${255*(1-t.performanceScore)}; --g:255`),this.$refs.shadowWrapper.classList.add(`correct`))}catch(t){console.warn(`[StudySession] Error setting shadowWrapper style: ${t}`)}this.sessionConfig.likesConfetti&&Zt({origin:{y:1,x:.25+.5*Math.random()},disableForReducedMotion:!0,angle:60+60*Math.random()})}else if(!this.frameless)try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.add(`incorrect`)}catch(t){console.warn(`[StudySession] Error setting shadowWrapper style: ${t}`)}},clearFeedbackShadow(){this.frameless||setTimeout(()=>{try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.remove(`correct`,`incorrect`)}catch(t){console.warn(`[StudySession] Error clearing shadowWrapper style: ${t}`)}},1250)},async logCardRecord(t){console.log(`[StudySession] About to call user.putCardRecord...`);let c=await this.user.putCardRecord(t);return console.log(`[StudySession] user.putCardRecord completed`),c},async loadCard(t){if(this.loading){console.warn(`Attempted to load card while loading another...`);return}if(console.log(`[StudySession] loading: ${JSON.stringify(t)}`),t===null){this.sessionFinished=!0,this.$emit(`session-finished`,this.sessionRecord);return}this.cardType=t.item.status,this.loading=!0,this.cardCount++,this.data=t.data,this.view=markRaw(t.view),this.cardID=t.item.cardID,this.courseID=t.item.courseID,this.card_elo=t.item.elo||1e3,this.sessionRecord.push({card:{course_id:t.item.courseID,card_id:t.item.cardID,card_elo:this.card_elo,tags:t.tags??[]},item:t.item,records:[]}),this.$emit(`card-loaded`,{courseID:t.item.courseID,cardID:t.item.cardID,cardCount:this.cardCount}),this.loading=!1}}}),$t={key:0,class:`StudySession`},en={key:2},tn={key:3},nn={class:`text-h4`},rn={key:0},an={key:4,ref:`shadowWrapper`,class:`card-transition-container`},on={key:0},__name(_sfc_render$15,`_sfc_render`),sn=F$3(Qt,[[`render`,_sfc_render$15],[`__scopeId`,`data-v-de7119e9`]]),cn=defineComponent({name:`MultipleChoiceOption`,components:{MarkdownRenderer:defineAsyncComponent(()=>Promise.resolve().then(()=>(init_MarkdownRenderer_kStoDRNE(),MarkdownRenderer_kStoDRNE_exports)).then(t=>t.n))},props:{content:{type:String,required:!0},selected:{type:Boolean,required:!0},number:{type:Number,required:!0},setSelection:{type:Function,required:!0},submit:{type:Function,required:!0},markedWrong:{type:Boolean,required:!0}},computed:{className(){let t;switch(this.number){case 0:t=`bg-red`;break;case 1:t=`bg-purple`;break;case 2:t=`bg-indigo`;break;case 3:t=`bg-light-blue`;break;case 4:t=`bg-teal`;break;case 5:t=`bg-deep-orange`;break;default:t=`bg-grey`;break}if(this.selected&&!this.markedWrong)return`choice selected ${t} lighten-3 elevation-8`;if(!this.selected&&!this.markedWrong)return`choice not-selected ${t} lighten-4 elevation-1`;if(this.selected&&this.markedWrong)return`choice selected grey lighten-2 elevation-8`;if(!this.selected&&this.markedWrong)return`choice not-selected grey lighten-2 elevation-0`;throw Error(`'selected' and 'markedWrong' props in MultipleChoiceOption are in an impossible configuration.`)}},methods:{select(){this.setSelection(this.number)},submitThisOption(){this.markedWrong||(this.select(),this.submit())}}}),__name(_sfc_render$14,`_sfc_render`),ln=F$3(cn,[[`render`,_sfc_render$14],[`__scopeId`,`data-v-96de7172`]]),un=defineComponent({name:`RadioMultipleChoice`,components:{MultipleChoiceOption:ln},extends:se$3,props:{choiceList:{type:Array,required:!0}},data(){return{currentSelection:-1,incorrectSelections:[],containerRef:null,_registeredHotkeys:[]}},watch:{choiceList:{immediate:!0,handler(t){t?.length&&this.bindKeys()}}},mounted(){this.containerRef&&this.containerRef.focus()},unmounted(){this.unbindKeys()},methods:{forwardSelection(){if(!this.choiceIsWrong(this.choiceList[this.currentSelection])&&this.currentSelection!==-1){let t={choiceList:this.choiceList,selection:this.currentSelection};this.submitAnswer(t).isCorrect||this.incorrectSelections.push(this.currentSelection)}},setSelection(t){t<this.choiceList.length&&(this.currentSelection=t)},incrementSelection(){this.currentSelection===-1?this.currentSelection=Math.ceil(this.choiceList.length/2):this.currentSelection=Math.min(this.choiceList.length-1,this.currentSelection+1)},decrementSelection(){this.currentSelection===-1?this.currentSelection=Math.floor(this.choiceList.length/2-1):this.currentSelection=Math.max(0,this.currentSelection-1)},choiceIsWrong(t){let c=!1;return this.incorrectSelections.forEach(u=>{this.choiceList[u]===t&&(c=!0)}),c},bindKeys(){let t=[{hotkey:`left`,callback:this.decrementSelection,command:`Move selection left`},{hotkey:`right`,callback:this.incrementSelection,command:`Move selection right`},{hotkey:`enter`,callback:this.forwardSelection,command:`Submit selection`},...Array.from({length:this.choiceList.length},(t,c)=>({hotkey:(c+1).toString(),callback:()=>this.setSelection(c),command:`Select ${(t=>{switch(t){case 0:return`first`;case 1:return`second`;case 2:return`third`;case 3:return`fourth`;case 4:return`fifth`;case 5:return`sixth`;default:return`${t+1}th`}})(c)} option`}))];I$2.addBinding(t),this._registeredHotkeys=t.map(t=>t.hotkey)},unbindKeys(){this._registeredHotkeys&&this._registeredHotkeys.forEach(t=>{I$2.removeBinding(t)})}}}),dn={ref:`containerRef`,class:`multipleChoice`},__name(_sfc_render$13,`_sfc_render`),fn=F$3(un,[[`render`,_sfc_render$13]]),pn=defineComponent({name:`TrueFalse`,components:{RadioMultipleChoice:fn},props:{MouseTrap:{type:Object,required:!0},submit:{type:Function,required:!0}}}),mn={"data-viewable":`TrueFalse`},__name(_sfc_render$12,`_sfc_render`),hn=F$3(pn,[[`render`,_sfc_render$12]]),gn=defineComponent({name:`UserInputNumber`,ref:{},extends:se$3,methods:{mounted(){this.$refs.input.focus()},isNumeric(t){return!isNaN(Number.parseFloat(t))},makeNumeric(t){if(typeof t==`string`)return Number.parseFloat(t);throw Error(`Expected a string, got `+typeof t)}}}),__name(_sfc_render$11,`_sfc_render`),_n=F$3(gn,[[`render`,_sfc_render$11],[`__scopeId`,`data-v-a56dcd1c`]]),vn=defineComponent({name:`CardLoader`,components:{CardViewer:Q$1},props:{sessionOrder:{type:Number,required:!1,default:0},qualified_id:{type:Object,required:!0},viewLookup:{type:Function,required:!0}},data(){return{loading:!0,view:null,data:[],courseID:``,cardID:``}},created(){this.loadCard()},watch:{qualified_id:{immediate:!0,handler(){this.loadCard()}}},methods:{processResponse(t){log$2(`
|
|
484
487
|
Card was displayed at ${t.timeStamp}
|
|
485
488
|
User spent ${t.timeSpent} milliseconds with the card.
|
|
486
489
|
`),this.$emit(`emitResponse`,t)},async loadCard(){let t=this.qualified_id;console.log(`Card Loader displaying: ${t.courseID}::${t.cardID}`),this.loading=!0;let c=t.courseID,u=t.cardID,d=getDataLayer().getCourseDB(c);try{let t=await d.getCourseDoc(u),m=this.viewLookup(t.id_view),g=t.id_displayable_data.map(t=>d.getCourseDoc(t,{attachments:!0,binary:!0})),b=[];for(let t of g){let c=await t;b.unshift(displayableDataToViewData(c))}this.data=b,this.view=markRaw(m),this.cardID=u,this.courseID=c}catch(t){throw Error(`[CardLoader] Error loading card: ${JSON.stringify(t)}, ${t}`)}finally{this.loading=!1,this.$emit(`card-loaded`)}}}}),__name(_sfc_render$10,`_sfc_render`),yn=F$3(vn,[[`render`,_sfc_render$10],[`__scopeId`,`data-v-93f758b5`]]),useAuthStore=()=>{let t=getPinia();return t&&setActivePinia(t),defineStore(`auth`,{state:()=>({_user:void 0,loginAndRegistration:{init:!1,loggedIn:!1,regDialogOpen:!1,loginDialogOpen:!1},onLoadComplete:!1}),actions:{async init(){try{this._user=getDataLayer().getUserDB(),this.loginAndRegistration.loggedIn=this._user?this._user.isLoggedIn():!1,this.onLoadComplete=!0,this.loginAndRegistration.init=!0}catch(t){console.error(`Failed to initialize auth store:`,t),this.loginAndRegistration.loggedIn=!1,this.onLoadComplete=!0,this.loginAndRegistration.init=!0}},setLoginDialog(t){this.loginAndRegistration.loginDialogOpen=t},setRegDialog(t){this.loginAndRegistration.regDialogOpen=t},async resetUserData(){try{if(!this._user)throw Error(`No user available for data reset`);let t=await this._user.resetUserData();if(t.status!==`ok`)throw Error(t.error||`Reset failed`);return console.log(`User data reset successfully`),t}catch(t){throw console.error(`Failed to reset user data:`,t),t}}},getters:{currentUser:async()=>getCurrentUser(),isLoggedIn:t=>t.loginAndRegistration.loggedIn,isInitialized:t=>t.loginAndRegistration.init,status:t=>({loggedIn:t.loginAndRegistration.loggedIn,init:t.loginAndRegistration.init,user:t._user})}})()},useConfigStore=()=>{let t=getPinia();return t&&setActivePinia(t),defineStore(`config`,{state:()=>({config:{darkMode:!1,likesConfetti:!1,sessionTimeLimit:5}}),actions:{updateConfig(t){this.config=t},async updateDarkMode(t){this.config.darkMode=t;let c=await getCurrentUser();c&&await c.setConfig({darkMode:t})},async updateLikesConfetti(t){this.config.likesConfetti=t;let c=await getCurrentUser();c&&await c.setConfig({likesConfetti:t})},async updateSessionTimeLimit(t){this.config.sessionTimeLimit=t;let c=await getCurrentUser();c&&await c.setConfig({sessionTimeLimit:t})},async hydrate(){try{let t=await getCurrentUser();if(t){let c=await t.getConfig();console.log(`user config: ${JSON.stringify(c)}`),this.updateConfig(c)}else console.log(`No user logged in, using default config`)}catch(t){console.warn(`Failed to hydrate config store, using defaults:`,t)}},async init(){await this.hydrate()},resetDefaults(){this.config={darkMode:!1,likesConfetti:!1,sessionTimeLimit:5}}}})()},bn=F$3(defineComponent({__name:`UserChip`,props:{showLoginButton:{type:Boolean},redirectToPath:{}},setup(t){let c=useRouter(),u=useAuthStore(),d=useConfigStore(),m=useAuthUI(),g=ref(``),b=ref([]),S=ref(!1),C=ref(``),w=computed(()=>C.value===`reset`),resetDialogState=()=>{C.value=``,S.value=!1},T=computed(()=>b.value.length>0),E=computed(()=>m.config.value||{showLoginRegistration:!0,showLogout:!0,showResetData:!1,logoutLabel:`Log out`,resetLabel:``});onMounted(async()=>{g.value=(await getCurrentUser()).getUsername(),await m.detectSyncStrategy()});let gotoSettings=async()=>{c.push(`/u/${(await getCurrentUser()).getUsername()}`)},gotoStats=async()=>{c.push(`/u/${(await getCurrentUser()).getUsername()}/stats`)},dismiss=t=>{let c=b.value.indexOf(t);b.value.splice(c,1)},logout=async()=>{(await u._user.logout()).ok&&(u.loginAndRegistration={init:!0,loggedIn:!1,regDialogOpen:!1,loginDialogOpen:!1},d.resetDefaults(),c.push(`/home`))},executeReset=async()=>{try{await u.resetUserData(),d.resetDefaults(),resetDialogState(),c.push(`/home`)}catch(t){console.error(`Failed to reset user data:`,t)}};return(t,c)=>{let u=resolveComponent(`v-icon`),d=resolveComponent(`v-avatar`),m=resolveComponent(`v-chip`),D=resolveComponent(`v-list-item-title`),O=resolveComponent(`v-list-item`),Or=resolveComponent(`v-divider`),kr=resolveComponent(`v-list`),Ar=resolveComponent(`v-menu`),jr=resolveComponent(`v-badge`),Mr=resolveComponent(`v-card-title`),Nr=resolveComponent(`v-text-field`),Pr=resolveComponent(`v-card-text`),Fr=resolveComponent(`v-spacer`),Ir=resolveComponent(`v-btn`),Lr=resolveComponent(`v-card-actions`),Rr=resolveComponent(`v-card`),zr=resolveComponent(`v-dialog`);return openBlock(),createElementBlock(Fragment,null,[createVNode(jr,{content:b.value.length,"model-value":T.value,color:`accent`,location:`end top`},{default:withCtx(()=>[createVNode(Ar,{location:`bottom end`,transition:`scale-transition`},{activator:withCtx(({props:t})=>[createVNode(m,mergeProps(t,{class:`ma-2`}),{default:withCtx(()=>[createVNode(d,{start:``,class:`bg-primary`},{default:withCtx(()=>[createVNode(u,null,{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-school`)])),_:1})]),_:1}),createTextVNode(` `+toDisplayString(g.value),1)]),_:2},1040)]),default:withCtx(()=>[createVNode(kr,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(b.value,t=>(openBlock(),createBlock(O,{key:t,onClick:c=>dismiss(t)},{default:withCtx(()=>[createVNode(D,null,{default:withCtx(()=>[createTextVNode(toDisplayString(t),1)]),_:2},1024)]),_:2},1032,[`onClick`]))),128)),b.value.length?(openBlock(),createBlock(Or,{key:0})):createCommentVNode(``,!0),createVNode(O,{onClick:gotoStats},{prepend:withCtx(()=>[createVNode(u,null,{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`mdi-trending-up`)])),_:1})]),default:withCtx(()=>[createVNode(D,null,{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`Stats`)])),_:1})]),_:1}),createVNode(O,{onClick:gotoSettings},{prepend:withCtx(()=>[createVNode(u,null,{default:withCtx(()=>c[7]||(c[7]=[createTextVNode(`mdi-cog`)])),_:1})]),default:withCtx(()=>[createVNode(D,null,{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`Settings`)])),_:1})]),_:1}),E.value.showLogout?(openBlock(),createBlock(O,{key:1,onClick:logout},{prepend:withCtx(()=>[createVNode(u,null,{default:withCtx(()=>c[9]||(c[9]=[createTextVNode(`mdi-logout`)])),_:1})]),default:withCtx(()=>[createVNode(D,null,{default:withCtx(()=>[createTextVNode(toDisplayString(E.value.logoutLabel),1)]),_:1})]),_:1})):createCommentVNode(``,!0),E.value.showResetData?(openBlock(),createBlock(O,{key:2,onClick:c[0]||(c[0]=t=>S.value=!0)},{prepend:withCtx(()=>[createVNode(u,null,{default:withCtx(()=>c[10]||(c[10]=[createTextVNode(`mdi-delete-sweep`)])),_:1})]),default:withCtx(()=>[createVNode(D,null,{default:withCtx(()=>[createTextVNode(toDisplayString(E.value.resetLabel),1)]),_:1})]),_:1})):createCommentVNode(``,!0)]),_:1})]),_:1})]),_:1},8,[`content`,`model-value`]),createVNode(zr,{modelValue:S.value,"onUpdate:modelValue":c[3]||(c[3]=t=>S.value=t),"max-width":`500px`,persistent:``},{default:withCtx(()=>[createVNode(Rr,null,{default:withCtx(()=>[createVNode(Mr,{class:`text-h5 d-flex align-center`},{default:withCtx(()=>[createVNode(u,{color:`warning`,class:`mr-3`},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[12]||(c[12]=createTextVNode(` Reset All User Data `))]),_:1}),createVNode(Pr,null,{default:withCtx(()=>[c[13]||(c[13]=createBaseVNode(`p`,{class:`mb-4`},`This will permanently delete:`,-1)),c[14]||(c[14]=createBaseVNode(`ul`,{class:`mb-4`},[createBaseVNode(`li`,null,`All course progress and history`),createBaseVNode(`li`,null,`Scheduled card reviews`),createBaseVNode(`li`,null,`Course registrations`),createBaseVNode(`li`,null,`User preferences`)],-1)),c[15]||(c[15]=createBaseVNode(`p`,{class:`mb-4 text-error font-weight-bold`},`This cannot be undone.`,-1)),createVNode(Nr,{modelValue:C.value,"onUpdate:modelValue":c[1]||(c[1]=t=>C.value=t),label:`Type "reset" to confirm`,outlined:``,dense:``,onKeyup:c[2]||(c[2]=withKeys(t=>w.value&&executeReset(),[`enter`]))},null,8,[`modelValue`])]),_:1}),createVNode(Lr,null,{default:withCtx(()=>[createVNode(Fr),createVNode(Ir,{text:``,onClick:resetDialogState},{default:withCtx(()=>c[16]||(c[16]=[createTextVNode(`Cancel`)])),_:1}),createVNode(Ir,{color:`error`,disabled:!w.value,onClick:executeReset},{default:withCtx(()=>c[17]||(c[17]=[createTextVNode(` Reset All Data `)])),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}}),[[`__scopeId`,`data-v-9a38a213`]]),xn={class:`d-flex flex-column align-start`},Sn={class:`mb-2`},Cn=F$3(defineComponent({__name:`UserLogin`,props:{redirectTo:{default:`/study`}},emits:[`toggle`,`loginSuccess`,`forgotPassword`],setup(t,{emit:c}){let u=t,d=c,m=useRouter(),g=useRoute(),b=useAuthStore(),S=useConfigStore(),C=ref(``),w=ref(``),T=ref(!1),E=ref(!1),D=ref(!1),O=ref(7e3),Or=ref(void 0),kr=computed(()=>g.name===`login`),Ar=computed(()=>({color:D.value?`error`:`success`,text:D.value?`Try again`:`Log In`})),initBadLogin=()=>{D.value=!0,Z$2({text:`Username or password was incorrect.`,status:Status.error,timeout:O.value}),setTimeout(()=>{D.value=!1},O.value)},login=async()=>{E.value=!0,log$2(`Starting login attempt`),log$2(`Login attempt for username: ${C.value}`);try{log$2(`Attempting to get User instance`),Or.value=await getCurrentUser(),log$2(`Got User instance, attempting login`),await Or.value.login(C.value,w.value),log$2(`Login successful`),log$2(`Initializing user config`),S.init(),log$2(`User config initialized`),log$2(`Setting authentication state`),b.loginAndRegistration.loggedIn=!0,log$2(`Authentication state set, redirecting to: ${u.redirectTo}`),d(`loginSuccess`,u.redirectTo),m.push(u.redirectTo),log$2(`Login and redirect complete`)}catch(t){log$2(`Login attempt failed`),log$2(`Login error details: ${JSON.stringify(t)}`),console.log(`login error: ${JSON.stringify(t)}`),log$2(`Initiating bad login feedback`),initBadLogin()}log$2(`Resetting awaiting response state`),E.value=!1},toggle=()=>{log$2(`Toggling registration / login forms.`),d(`toggle`)},handleForgotPassword=()=>{log$2(`Forgot password clicked`),kr.value?m.push(`/request-reset`):d(`forgotPassword`)};return(t,c)=>{let u=resolveComponent(`v-card-title`),d=resolveComponent(`v-text-field`),m=resolveComponent(`v-btn`),g=resolveComponent(`v-snackbar`),b=resolveComponent(`v-icon`),S=resolveComponent(`router-link`),Or=resolveComponent(`v-form`),jr=resolveComponent(`v-card-text`),Mr=resolveComponent(`v-card`);return openBlock(),createBlock(Mr,null,{default:withCtx(()=>[kr.value?createCommentVNode(``,!0):(openBlock(),createBlock(u,{key:0,class:`text-h5 bg-grey-lighten-2`},{default:withCtx(()=>c[5]||(c[5]=[createTextVNode(`Log In`)])),_:1})),createVNode(jr,null,{default:withCtx(()=>[createVNode(Or,{onsubmit:`return false;`,onSubmit:withModifiers(login,[`prevent`])},{default:withCtx(()=>[createVNode(d,{id:``,modelValue:C.value,"onUpdate:modelValue":c[0]||(c[0]=t=>C.value=t),autofocus:``,name:`username`,label:`Username`,"prepend-icon":`mdi-account-circle`},null,8,[`modelValue`]),createVNode(d,{modelValue:w.value,"onUpdate:modelValue":c[1]||(c[1]=t=>w.value=t),"prepend-icon":`mdi-lock`,name:`password`,hover:`Show password input`,label:`Enter your password`,hint:``,min:`0`,"append-icon":T.value?`mdi-eye-off`:`mdi-eye`,type:T.value?`text`:`password`,"onClick:append":c[2]||(c[2]=()=>T.value=!T.value)},null,8,[`modelValue`,`append-icon`,`type`]),createVNode(g,{modelValue:D.value,"onUpdate:modelValue":c[4]||(c[4]=t=>D.value=t),location:`bottom right`,timeout:O.value},{default:withCtx(()=>[c[7]||(c[7]=createTextVNode(` Username or password was incorrect. `)),createVNode(m,{color:`pink`,variant:`text`,onClick:c[3]||(c[3]=t=>D.value=!1)},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`Close`)])),_:1})]),_:1},8,[`modelValue`,`timeout`]),createBaseVNode(`div`,xn,[createBaseVNode(`div`,Sn,[createVNode(m,{class:`mr-2`,type:`submit`,loading:E.value,color:Ar.value.color},{default:withCtx(()=>[createVNode(b,{start:``},{default:withCtx(()=>c[8]||(c[8]=[createTextVNode(`mdi-lock-open`)])),_:1}),c[9]||(c[9]=createTextVNode(` Log In `))]),_:1},8,[`loading`,`color`]),kr.value?(openBlock(),createBlock(S,{key:0,to:`signup`},{default:withCtx(()=>[createVNode(m,{variant:`text`},{default:withCtx(()=>c[10]||(c[10]=[createTextVNode(`Create New Account`)])),_:1})]),_:1})):(openBlock(),createBlock(m,{key:1,variant:`text`,onClick:toggle},{default:withCtx(()=>c[11]||(c[11]=[createTextVNode(`Create New Account`)])),_:1}))]),renderSlot(t.$slots,`forgot-password`,{},()=>[createBaseVNode(`a`,{href:`#`,class:`text-caption text-decoration-none`,onClick:withModifiers(handleForgotPassword,[`prevent`])},` Forgot password? `)],!0)])]),_:3})]),_:3})]),_:3})}}}),[[`__scopeId`,`data-v-563b0048`]]),wn=defineComponent({name:`UserRegistration`,props:{onSignupSuccess:{type:Function,required:!1}},emits:[`toggle`,`signup-success`],data(){return{email:``,username:``,password:``,retypedPassword:``,passwordVisible:!1,emailError:!1,emailHint:``,usernameValidationInProgress:!1,usernameError:!1,usernameHint:``,awaitingResponse:!1,badLoginAttempt:!1,userSecret:``,secret:`goons`,user:null,roles:[`Student`,`Teacher`,`Author`],student:!0,teacher:!1,author:!1,authStore:useAuthStore()}},computed:{registrationRoute(){return typeof this.$route.name==`string`&&this.$route.name.toLowerCase()===`signup`},buttonStatus(){return{color:this.badLoginAttempt?`error`:`success`,text:this.badLoginAttempt?`Try again`:`Log In`}},passwordError(){return validatePassword(this.password)},passwordRetypeError(){return console.log(`[RTE]`),this.password===this.retypedPassword?``:`Passwords must match.`}},async created(){this.user=await getCurrentUser()},methods:{toggle(){log$2(`Toggling registration / login forms.`),this.$emit(`toggle`)},validateEmail(){this.emailError=!1,this.email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this.email)?(this.emailError=!0,this.emailHint=`Please enter a valid email address`):this.emailHint=``},validateUsername(){this.usernameError=!1},async createUser(){if(this.awaitingResponse=!0,this.passwordError){Z$2({text:this.passwordError,status:Status.error}),this.awaitingResponse=!1;return}if(log$2(`
|