@vue-skuilder/standalone-ui 0.2.13 → 0.2.15
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/{TagViewer-nh28Samo.js → TagViewer-Czt6W7JQ.js} +2 -2
- package/dist/assets/{TagViewer-nh28Samo.js.map → TagViewer-Czt6W7JQ.js.map} +1 -1
- package/dist/assets/{common-ui.es-CKDaicTB.js → common-ui.es-ibXGK5ti.js} +7 -7
- package/dist/assets/common-ui.es-ibXGK5ti.js.map +1 -0
- package/dist/assets/common-ui.es-xI0w3GT-.js +1 -0
- package/dist/assets/{dist-mJg7wGOe.js → dist-DlSLFgY8.js} +12 -12
- package/dist/assets/dist-DlSLFgY8.js.map +1 -0
- package/dist/assets/{index-BTx-tECR.js → index-CKXq4U_A.js} +5 -5
- package/dist/assets/{index-BTx-tECR.js.map → index-CKXq4U_A.js.map} +1 -1
- package/dist/assets/{index-BjQg_GYs.css → index-DtCW3YSO.css} +1 -1
- package/dist/index.html +4 -4
- package/dist-lib/questions.cjs.js +15 -15
- package/dist-lib/questions.cjs.js.map +1 -1
- package/dist-lib/questions.mjs +76 -40
- package/dist-lib/questions.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/assets/common-ui.es-CKDaicTB.js.map +0 -1
- package/dist/assets/common-ui.es-CcyGjPTk.js +0 -1
- package/dist/assets/dist-mJg7wGOe.js.map +0 -1
|
@@ -91,9 +91,9 @@ Please double-check your map/reduce function.`),guardedConsole$1(`error`,c,u)}}f
|
|
|
91
91
|
You can debug this error by doing:
|
|
92
92
|
myDatabase.on('error', function (err) { debugger; });
|
|
93
93
|
Please double-check your map/reduce function.`),guardedConsole(`error`,c,u)}}function createAbstractMapReduce(t,c,u,d){function tryMap(t,c,u){try{c(u)}catch(d){emitError$1(t,d,{fun:c,doc:u})}}function tryReduce(t,c,u,d,m){try{return{output:c(u,d,m)}}catch(g){return emitError$1(t,g,{fun:c,keys:u,values:d,rereduce:m}),{error:g}}}function sortByKeyThenValue(t,c){let u=collate(t.key,c.key);return u===0?collate(t.value,c.value):u}function sliceResults(t,c,u){return u=u||0,typeof c==`number`?t.slice(u,c+u):u>0?t.slice(u):t}function rowToDocId(t){let c=t.value;return c&&typeof c==`object`&&c._id||t.id}function readAttachmentsAsBlobOrBuffer(t){for(let c of t.rows){let t=c.doc&&c.doc._attachments;if(t)for(let c of Object.keys(t)){let u=t[c];t[c].data=b64ToBluffer(u.data,u.content_type)}}}function postprocessAttachments(t){return function(c){return t.include_docs&&t.attachments&&t.binary&&readAttachmentsAsBlobOrBuffer(c),c}}function addHttpParam(t,c,u,d){let m=c[t];m!==void 0&&(d&&(m=encodeURIComponent(JSON.stringify(m))),u.push(t+`=`+m))}function coerceInteger(t){if(t!==void 0){let c=Number(t);return!isNaN(c)&&c===parseInt(t,10)?c:t}}function coerceOptions(t){return t.group_level=coerceInteger(t.group_level),t.limit=coerceInteger(t.limit),t.skip=coerceInteger(t.skip),t}function checkPositiveInteger(t){if(t){if(typeof t!=`number`)return new QueryParseError(`Invalid value for integer: "${t}"`);if(t<0)return new QueryParseError(`Invalid value for positive integer: "${t}"`)}}function checkQueryParseError(t,c){let u=t.descending?`endkey`:`startkey`,d=t.descending?`startkey`:`endkey`;if(t[u]!==void 0&&t[d]!==void 0&&collate(t[u],t[d])>0)throw new QueryParseError(`No rows can match your key range, reverse your start_key and end_key or set {descending : true}`);if(c.reduce&&t.reduce!==!1){if(t.include_docs)throw new QueryParseError(`{include_docs:true} is invalid for reduce`);if(t.keys&&t.keys.length>1&&!t.group&&!t.group_level)throw new QueryParseError(`Multi-key fetches for reduce views must use {group: true}`)}for(let c of[`group_level`,`limit`,`skip`]){let u=checkPositiveInteger(t[c]);if(u)throw u}}async function httpQuery(t,c,u){let d=[],m,g=`GET`,b;if(addHttpParam(`reduce`,u,d),addHttpParam(`include_docs`,u,d),addHttpParam(`attachments`,u,d),addHttpParam(`limit`,u,d),addHttpParam(`descending`,u,d),addHttpParam(`group`,u,d),addHttpParam(`group_level`,u,d),addHttpParam(`skip`,u,d),addHttpParam(`stale`,u,d),addHttpParam(`conflicts`,u,d),addHttpParam(`startkey`,u,d,!0),addHttpParam(`start_key`,u,d,!0),addHttpParam(`endkey`,u,d,!0),addHttpParam(`end_key`,u,d,!0),addHttpParam(`inclusive_end`,u,d),addHttpParam(`key`,u,d,!0),addHttpParam(`update_seq`,u,d),d=d.join(`&`),d=d===``?``:`?`+d,u.keys!==void 0){let t=2e3,b=`keys=${encodeURIComponent(JSON.stringify(u.keys))}`;b.length+d.length+1<=2e3?d+=(d[0]===`?`?`&`:`?`)+b:(g=`POST`,typeof c==`string`?m={keys:u.keys}:c.keys=u.keys)}if(typeof c==`string`){let S=parseViewName(c),C=await t.fetch(`_design/`+S[0]+`/_view/`+S[1]+d,{headers:new h({"Content-Type":`application/json`}),method:g,body:JSON.stringify(m)});b=C.ok;let w=await C.json();if(!b)throw w.status=C.status,generateErrorFromResponse(w);for(let t of w.rows)if(t.value&&t.value.error&&t.value.error===`builtin_reduce_error`)throw Error(t.reason);return new Promise(function(t){t(w)}).then(postprocessAttachments(u))}m=m||{};for(let t of Object.keys(c))Array.isArray(c[t])?m[t]=c[t]:m[t]=c[t].toString();let S=await t.fetch(`_temp_view`+d,{headers:new h({"Content-Type":`application/json`}),method:`POST`,body:JSON.stringify(m)});b=S.ok;let C=await S.json();if(!b)throw C.status=S.status,generateErrorFromResponse(C);return new Promise(function(t){t(C)}).then(postprocessAttachments(u))}function customQuery(t,c,u){return new Promise(function(d,m){t._query(c,u,function(t,c){if(t)return m(t);d(c)})})}function customViewCleanup(t){return new Promise(function(c,u){t._viewCleanup(function(t,d){if(t)return u(t);c(d)})})}function defaultsTo(t){return function(c){if(c.status===404)return t;throw c}}async function getDocsToPersist(t,c,u){let d=`_local/doc_`+t,m={_id:d,keys:[]},g=u.get(t),b=g[0],S=g[1];function getMetaDoc(){return isGenOne(S)?Promise.resolve(m):c.db.get(d).catch(defaultsTo(m))}function getKeyValueDocs(t){return t.keys.length?c.db.allDocs({keys:t.keys,include_docs:!0}):Promise.resolve({rows:[]})}function processKeyValueDocs(t,c){let u=[],d=new Set;for(let t of c.rows){let c=t.doc;if(c&&(u.push(c),d.add(c._id),c._deleted=!b.has(c._id),!c._deleted)){let t=b.get(c._id);`value`in t&&(c.value=t.value)}}let m=mapToKeysArray(b);for(let t of m)if(!d.has(t)){let c={_id:t},d=b.get(t);`value`in d&&(c.value=d.value),u.push(c)}return t.keys=uniq$1(m.concat(t.keys)),u.push(t),u}let C=await getMetaDoc();return processKeyValueDocs(C,await getKeyValueDocs(C))}function updatePurgeSeq(t){return t.sourceDB.get(`_local/purges`).then(function(c){let u=c.purgeSeq;return t.db.get(`_local/purgeSeq`).then(function(t){return t._rev}).catch(defaultsTo(void 0)).then(function(c){return t.db.put({_id:`_local/purgeSeq`,_rev:c,purgeSeq:u})})}).catch(function(t){if(t.status!==404)throw t})}function saveKeyValues(t,c,u){var d=`_local/lastSeq`;return t.db.get(d).catch(defaultsTo({_id:d,seq:0})).then(function(d){var m=mapToKeysArray(c);return Promise.all(m.map(function(u){return getDocsToPersist(u,t,c)})).then(function(c){var m=c.flat();return d.seq=u,m.push(d),t.db.bulkDocs({docs:m})}).then(()=>updatePurgeSeq(t))})}function getQueue(t){let c=typeof t==`string`?t:t.name,u=persistentQueues[c];return u||(u=persistentQueues[c]=new TaskQueue),u}async function updateView(t,c){return sequentialize(getQueue(t),function(){return updateViewInQueue(t,c)})()}async function updateViewInQueue(t,u){let d,m,g;function emit(t,c){let u={id:m._id,key:normalizeKey(t)};c!=null&&(u.value=normalizeKey(c)),d.push(u)}let b=c(t.mapFun,emit),S=t.seq||0;function createTask(){return t.sourceDB.info().then(function(c){g=t.sourceDB.activeTasks.add({name:`view_indexing`,total_items:c.update_seq-S})})}function processChange(c,u){return function(){return saveKeyValues(t,c,u)}}let C=0,w={view:t.name,indexed_docs:C};t.sourceDB.emit(`indexing`,w);let T=new TaskQueue;async function processNextBatch(){return processBatch(await t.sourceDB.changes({return_docs:!0,conflicts:!0,include_docs:!0,style:`all_docs`,since:S,limit:u.changes_batch_size}),await getRecentPurges())}function getRecentPurges(){return t.db.get(`_local/purgeSeq`).then(function(t){return t.purgeSeq}).catch(defaultsTo(-1)).then(function(c){return t.sourceDB.get(`_local/purges`).then(function(u){let d=u.purges.filter(function(t,u){return u>c}).map(t=>t.docId),m=d.filter(function(t,c){return d.indexOf(t)===c});return Promise.all(m.map(function(c){return t.sourceDB.get(c).then(function(t){return{docId:c,doc:t}}).catch(defaultsTo({docId:c}))}))}).catch(defaultsTo([]))})}function processBatch(c,d){let m=c.results;if(!m.length&&!d.length)return;for(let t of d)if(m.findIndex(function(c){return c.id===t.docId})<0){let c={_id:t.docId,doc:{_id:t.docId,_deleted:1},changes:[]};t.doc&&(c.doc=t.doc,c.changes.push({rev:t.doc._rev})),m.push(c)}let b=createDocIdsToChangesAndEmits(m);T.add(processChange(b,S)),C+=m.length;let w={view:t.name,last_seq:c.last_seq,results_count:m.length,indexed_docs:C};if(t.sourceDB.emit(`indexing`,w),t.sourceDB.activeTasks.update(g,{completed_items:C}),!(m.length<u.changes_batch_size))return processNextBatch()}function createDocIdsToChangesAndEmits(c){let u=new Map;for(let g of c){if(g.doc._id[0]!==`_`){d=[],m=g.doc,m._deleted||tryMap(t.sourceDB,b,m),d.sort(sortByKeyThenValue);let c=createIndexableKeysToKeyValues(d);u.set(g.doc._id,[c,g.changes])}S=g.seq}return u}function createIndexableKeysToKeyValues(t){let c=new Map,u;for(let d=0,m=t.length;d<m;d++){let m=t[d],g=[m.key,m.id];d>0&&collate(m.key,u)===0&&g.push(d),c.set(toIndexableString(g),m),u=m.key}return c}try{await createTask(),await processNextBatch(),await T.finish(),t.seq=S,t.sourceDB.activeTasks.remove(g)}catch(c){t.sourceDB.activeTasks.remove(g,c)}}function reduceView(t,c,d){d.group_level===0&&delete d.group_level;let m=d.group||d.group_level,g=u(t.reduceFun),b=[],S=isNaN(d.group_level)?1/0:d.group_level;for(let t of c){let c=b[b.length-1],u=m?t.key:null;if(m&&Array.isArray(u)&&(u=u.slice(0,S)),c&&collate(c.groupKey,u)===0){c.keys.push([t.key,t.id]),c.values.push(t.value);continue}b.push({keys:[[t.key,t.id]],values:[t.value],groupKey:u})}c=[];for(let u of b){let d=tryReduce(t.sourceDB,g,u.keys,u.values,!1);if(d.error&&d.error instanceof BuiltInError)throw d.error;c.push({value:d.error?null:d.output,key:u.groupKey})}return{rows:sliceResults(c,d.limit,d.skip)}}function queryView(t,c){return sequentialize(getQueue(t),function(){return queryViewInQueue(t,c)})()}async function queryViewInQueue(t,c){let u,d=t.reduceFun&&c.reduce!==!1,m=c.skip||0;c.keys!==void 0&&!c.keys.length&&(c.limit=0,delete c.keys);async function fetchFromView(c){c.include_docs=!0;let d=await t.db.allDocs(c);return u=d.total_rows,d.rows.map(function(t){if(`value`in t.doc&&typeof t.doc.value==`object`&&t.doc.value!==null){let c=Object.keys(t.doc.value).sort(),u=[`id`,`key`,`value`];if(!(c<u||c>u))return t.doc.value}let c=parseIndexableString(t.doc._id);return{key:c[0],id:c[1],value:`value`in t.doc?t.doc.value:null}})}async function onMapResultsReady(g){let b;if(b=d?reduceView(t,g,c):c.keys===void 0?{total_rows:u,offset:m,rows:g}:{total_rows:u,offset:m,rows:sliceResults(g,c.limit,c.skip)},c.update_seq&&(b.update_seq=t.seq),c.include_docs){let u=uniq$1(g.map(rowToDocId)),d=await t.sourceDB.allDocs({keys:u,include_docs:!0,conflicts:c.conflicts,attachments:c.attachments,binary:c.binary}),m=new Map;for(let t of d.rows)m.set(t.id,t.doc);for(let t of g){let c=rowToDocId(t),u=m.get(c);u&&(t.doc=u)}}return b}if(c.keys!==void 0){let t=c.keys.map(function(t){let u={startkey:toIndexableString([t]),endkey:toIndexableString([t,{}])};return c.update_seq&&(u.update_seq=!0),fetchFromView(u)});return onMapResultsReady((await Promise.all(t)).flat())}else{let t={descending:c.descending};c.update_seq&&(t.update_seq=!0);let u,g;if(`start_key`in c&&(u=c.start_key),`startkey`in c&&(u=c.startkey),`end_key`in c&&(g=c.end_key),`endkey`in c&&(g=c.endkey),u!==void 0&&(t.startkey=c.descending?toIndexableString([u,{}]):toIndexableString([u])),g!==void 0){let u=c.inclusive_end!==!1;c.descending&&(u=!u),t.endkey=toIndexableString(u?[g,{}]:[g])}if(c.key!==void 0){let u=toIndexableString([c.key]),d=toIndexableString([c.key,{}]);t.descending?(t.endkey=u,t.startkey=d):(t.startkey=u,t.endkey=d)}return d||(typeof c.limit==`number`&&(t.limit=c.limit),t.skip=m),onMapResultsReady(await fetchFromView(t))}}async function httpViewCleanup(t){return(await t.fetch(`_view_cleanup`,{headers:new h({"Content-Type":`application/json`}),method:`POST`})).json()}async function localViewCleanup(c){try{let u=await c.get(`_local/`+t),d=new Map;for(let t of Object.keys(u.views)){let c=parseViewName(t),u=`_design/`+c[0],m=c[1],g=d.get(u);g||(g=new Set,d.set(u,g)),g.add(m)}let m={keys:mapToKeysArray(d),include_docs:!0},g=await c.allDocs(m),b={};for(let t of g.rows){let c=t.key.substring(8);for(let m of d.get(t.key)){let d=c+`/`+m;u.views[d]||(d=m);let g=Object.keys(u.views[d]),S=t.doc&&t.doc.views&&t.doc.views[m];for(let t of g)b[t]=b[t]||S}}let S=Object.keys(b).filter(function(t){return!b[t]}).map(function(t){return sequentialize(getQueue(t),function(){return new c.constructor(t,c.__opts).destroy()})()});return Promise.all(S).then(function(){return{ok:!0}})}catch(t){if(t.status===404)return{ok:!0};throw t}}async function queryPromised(c,u,m){if(typeof c._query==`function`)return customQuery(c,u,m);if(isRemote(c))return httpQuery(c,u,m);let g={changes_batch_size:c.__opts.view_update_changes_batch_size||CHANGES_BATCH_SIZE};if(typeof u!=`string`)return checkQueryParseError(m,u),tempViewQueue.add(async function(){let d=await createView(c,`temp_view/temp_view`,u.map,u.reduce,!0,t);return fin(updateView(d,g).then(function(){return queryView(d,m)}),function(){return d.db.destroy()})}),tempViewQueue.finish();{let b=u,S=parseViewName(b),C=S[0],w=S[1],T=await c.get(`_design/`+C);if(u=T.views&&T.views[w],!u)throw new NotFoundError(`ddoc ${T._id} has no view named ${w}`);d(T,w),checkQueryParseError(m,u);let E=await createView(c,b,u.map,u.reduce,!1,t);return m.stale===`ok`||m.stale===`update_after`?(m.stale===`update_after`&&nextTick(function(){updateView(E,g)}),queryView(E,m)):(await updateView(E,g),queryView(E,m))}}function abstractQuery(t,c,u){let d=this;typeof c==`function`&&(u=c,c={}),c=c?coerceOptions(c):{},typeof t==`function`&&(t={map:t});let m=Promise.resolve().then(function(){return queryPromised(d,t,c)});return promisedCallback(m,u),m}return{query:abstractQuery,viewCleanup:callbackify(function(){let t=this;return typeof t._viewCleanup==`function`?customViewCleanup(t):isRemote(t)?httpViewCleanup(t):localViewCleanup(t)})}}var TaskQueue,persistentQueues,tempViewQueue,CHANGES_BATCH_SIZE,init_index_es$2=__esmMin((()=>{init_index_browser_es$3(),init_index_es$4(),init_index_es$5(),init_index_browser_es$4(),init_index_browser_es$1(),init_index_browser_es$2(),init_index_es$3(),TaskQueue=class{constructor(){this.promise=Promise.resolve()}add(t){return this.promise=this.promise.catch(()=>{}).then(()=>t()),this.promise}finish(){return this.promise}},persistentQueues={},tempViewQueue=new TaskQueue,CHANGES_BATCH_SIZE=50,__name$2(emitError$1,`emitError`)}));function getFieldFromDoc(t,c){for(var u=t,d=0,m=c.length;d<m;d++){var g=c[d];if(u=u[g],!u)break}return u}function setFieldInDoc(t,c,u){for(var d=0,m=c.length;d<m-1;d++){var g=c[d];t=t[g]=t[g]||{}}t[c[m-1]]=u}function compare(t,c){return t<c?-1:t>c?1:0}function parseField(t){for(var c=[],u=``,d=0,m=t.length;d<m;d++){var g=t[d];d>0&&t[d-1]===`\\`&&(g===`$`||g===`.`)?u=u.substring(0,u.length-1)+g:g===`.`?(c.push(u),u=``):u+=g}return c.push(u),c}function isCombinationalField(t){return combinationFields.indexOf(t)>-1}function getKey(t){return Object.keys(t)[0]}function getValue(t){return t[getKey(t)]}function mergeAndedSelectors(t){var c={},u={$or:!0,$nor:!0};return t.forEach(function(t){Object.keys(t).forEach(function(d){var m=t[d];if(typeof m!=`object`&&(m={$eq:m}),isCombinationalField(d))if(m instanceof Array){if(u[d]){u[d]=!1,c[d]=m;return}var g=[];c[d].forEach(function(t){Object.keys(m).forEach(function(c){var u=m[c],d=Math.max(Object.keys(t).length,Object.keys(u).length),b=mergeAndedSelectors([t,u]);Object.keys(b).length<=d||g.push(b)})}),c[d]=g}else c[d]=mergeAndedSelectors([m]);else{var b=c[d]=c[d]||{};Object.keys(m).forEach(function(t){var c=m[t];if(t===`$gt`||t===`$gte`)return mergeGtGte(t,c,b);if(t===`$lt`||t===`$lte`)return mergeLtLte(t,c,b);if(t===`$ne`)return mergeNe(c,b);if(t===`$eq`)return mergeEq(c,b);if(t===`$regex`)return mergeRegex(c,b);b[t]=c})}})}),c}function mergeGtGte(t,c,u){u.$eq===void 0&&(u.$gte===void 0?u.$gt===void 0?u[t]=c:t===`$gte`?c>u.$gt&&(delete u.$gt,u.$gte=c):c>u.$gt&&(u.$gt=c):t===`$gte`?c>u.$gte&&(u.$gte=c):c>=u.$gte&&(delete u.$gte,u.$gt=c))}function mergeLtLte(t,c,u){u.$eq===void 0&&(u.$lte===void 0?u.$lt===void 0?u[t]=c:t===`$lte`?c<u.$lt&&(delete u.$lt,u.$lte=c):c<u.$lt&&(u.$lt=c):t===`$lte`?c<u.$lte&&(u.$lte=c):c<=u.$lte&&(delete u.$lte,u.$lt=c))}function mergeNe(t,c){`$ne`in c?c.$ne.push(t):c.$ne=[t]}function mergeEq(t,c){delete c.$gt,delete c.$gte,delete c.$lt,delete c.$lte,delete c.$ne,c.$eq=t}function mergeRegex(t,c){`$regex`in c?c.$regex.push(t):c.$regex=[t]}function mergeAndedSelectorsNested(t){for(var c in t){if(Array.isArray(t))for(var u in t)t[u].$and&&(t[u]=mergeAndedSelectors(t[u].$and));var d=t[c];typeof d==`object`&&mergeAndedSelectorsNested(d)}return t}function isAndInSelector(t,c){for(var u in t){u===`$and`&&(c=!0);var d=t[u];typeof d==`object`&&(c=isAndInSelector(d,c))}return c}function massageSelector(t){var c=clone$1(t);isAndInSelector(c,!1)&&(c=mergeAndedSelectorsNested(c),`$and`in c&&(c=mergeAndedSelectors(c.$and))),[`$or`,`$nor`].forEach(function(t){t in c&&c[t].forEach(function(t){for(var c=Object.keys(t),u=0;u<c.length;u++){var d=c[u],m=t[d];(typeof m!=`object`||!m)&&(t[d]={$eq:m})}})}),`$not`in c&&(c.$not=mergeAndedSelectors([c.$not]));for(var u=Object.keys(c),d=0;d<u.length;d++){var m=u[d],g=c[m];(typeof g!=`object`||!g)&&(g={$eq:g}),c[m]=g}return normalizeArrayOperators(c),c}function normalizeArrayOperators(t){Object.keys(t).forEach(function(c){var u=t[c];Array.isArray(u)?u.forEach(function(t){t&&typeof t==`object`&&normalizeArrayOperators(t)}):c===`$ne`?t.$ne=[u]:c===`$regex`?t.$regex=[u]:u&&typeof u==`object`&&normalizeArrayOperators(u)})}function createFieldSorter(t){function getFieldValuesAsArray(c){return t.map(function(t){return getFieldFromDoc(c,parseField(getKey(t)))})}return function(t,c){var u=collate(getFieldValuesAsArray(t.doc),getFieldValuesAsArray(c.doc));return u===0?compare(t.doc._id,c.doc._id):u}}function filterInMemoryFields(t,c,u){if(t=t.filter(function(t){return rowFilter(t.doc,c.selector,u)}),c.sort){var d=createFieldSorter(c.sort);t=t.sort(d),typeof c.sort[0]!=`string`&&getValue(c.sort[0])===`desc`&&(t=t.reverse())}if(`limit`in c||`skip`in c){var m=c.skip||0,g=(`limit`in c?c.limit:t.length)+m;t=t.slice(m,g)}return t}function rowFilter(t,c,u){return u.every(function(u){var d=c[u],m=parseField(u),g=getFieldFromDoc(t,m);return isCombinationalField(u)?matchCominationalSelector(u,d,t):matchSelector(d,t,m,g)})}function matchSelector(t,c,u,d){return t?typeof t==`object`?Object.keys(t).every(function(m){var g=t[m];if(m.indexOf(`$`)===0)return match(m,c,g,u,d);var b=parseField(m);if(d===void 0&&typeof g!=`object`&&b.length>0)return!1;var S=getFieldFromDoc(d,b);return typeof g==`object`?matchSelector(g,c,u,S):match(`$eq`,c,g,b,S)}):t===d:!0}function matchCominationalSelector(t,c,u){return t===`$or`?c.some(function(t){return rowFilter(u,t,Object.keys(t))}):t===`$not`?!rowFilter(u,c,Object.keys(c)):!c.find(function(t){return rowFilter(u,t,Object.keys(t))})}function match(t,c,u,d,m){if(!matchers[t])throw Error(`unknown operator "`+t+`" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all`);return matchers[t](c,u,d,m)}function fieldExists(t){return t!=null}function fieldIsNotUndefined(t){return t!==void 0}function modField(t,c){if(typeof t!=`number`||parseInt(t,10)!==t)return!1;var u=c[0],d=c[1];return t%u===d}function arrayContainsValue(t,c){return c.some(function(c){return t instanceof Array?t.some(function(t){return collate(c,t)===0}):collate(c,t)===0})}function arrayContainsAllValues(t,c){return c.every(function(c){return t.some(function(t){return collate(c,t)===0})})}function arraySize(t,c){return t.length===c}function regexMatch(t,c){return new RegExp(c).test(t)}function typeMatch(t,c){switch(c){case`null`:return t===null;case`boolean`:return typeof t==`boolean`;case`number`:return typeof t==`number`;case`string`:return typeof t==`string`;case`array`:return t instanceof Array;case`object`:return{}.toString.call(t)===`[object Object]`}}function matchesSelector(t,c){if(typeof c!=`object`)throw Error(`Selector error: expected a JSON object`);c=massageSelector(c);var u=filterInMemoryFields([{doc:t}],{selector:c},Object.keys(c));return u&&u.length===1}var combinationFields,matchers,init_index_es$1=__esmMin((()=>{init_index_browser_es$1(),init_index_es$4(),combinationFields=[`$or`,`$nor`,`$not`],matchers={$elemMatch:function(t,c,u,d){return!Array.isArray(d)||d.length===0?!1:typeof d[0]==`object`&&d[0]!==null?d.some(function(t){return rowFilter(t,c,Object.keys(c))}):d.some(function(d){return matchSelector(c,t,u,d)})},$allMatch:function(t,c,u,d){return!Array.isArray(d)||d.length===0?!1:typeof d[0]==`object`&&d[0]!==null?d.every(function(t){return rowFilter(t,c,Object.keys(c))}):d.every(function(d){return matchSelector(c,t,u,d)})},$eq:function(t,c,u,d){return fieldIsNotUndefined(d)&&collate(d,c)===0},$gte:function(t,c,u,d){return fieldIsNotUndefined(d)&&collate(d,c)>=0},$gt:function(t,c,u,d){return fieldIsNotUndefined(d)&&collate(d,c)>0},$lte:function(t,c,u,d){return fieldIsNotUndefined(d)&&collate(d,c)<=0},$lt:function(t,c,u,d){return fieldIsNotUndefined(d)&&collate(d,c)<0},$exists:function(t,c,u,d){return c?fieldIsNotUndefined(d):!fieldIsNotUndefined(d)},$mod:function(t,c,u,d){return fieldExists(d)&&modField(d,c)},$ne:function(t,c,u,d){return c.every(function(t){return collate(d,t)!==0})},$in:function(t,c,u,d){return fieldExists(d)&&arrayContainsValue(d,c)},$nin:function(t,c,u,d){return fieldExists(d)&&!arrayContainsValue(d,c)},$size:function(t,c,u,d){return fieldExists(d)&&Array.isArray(d)&&arraySize(d,c)},$all:function(t,c,u,d){return Array.isArray(d)&&arrayContainsAllValues(d,c)},$regex:function(t,c,u,d){return fieldExists(d)&&typeof d==`string`&&c.every(function(t){return regexMatch(d,t)})},$type:function(t,c,u,d){return typeMatch(d,c)}}}));function mergeObjects(t){let c={};for(let u of t)Object.assign(c,u);return c}function pick(t,c){let u={};for(let d of c){let c=parseField(d),m=getFieldFromDoc(t,c);m!==void 0&&setFieldInDoc(u,c,m)}return u}function oneArrayIsSubArrayOfOther(t,c){for(let u=0,d=Math.min(t.length,c.length);u<d;u++)if(t[u]!==c[u])return!1;return!0}function oneArrayIsStrictSubArrayOfOther(t,c){return t.length>c.length?!1:oneArrayIsSubArrayOfOther(t,c)}function oneSetIsSubArrayOfOther(t,c){t=t.slice();for(let u of c){if(!t.length)break;let c=t.indexOf(u);if(c===-1)return!1;t.splice(c,1)}return!0}function arrayToObject(t){let c={};for(let u of t)c[u]=!0;return c}function max(t,c){let u=null,d=-1;for(let m of t){let t=c(m);t>d&&(d=t,u=m)}return u}function arrayEquals(t,c){if(t.length!==c.length)return!1;for(let u=0,d=t.length;u<d;u++)if(t[u]!==c[u])return!1;return!0}function uniq(t){return Array.from(new Set(t))}function resolveToCallback(t){return function(...c){let u=c[c.length-1];if(typeof u==`function`){let d=u.bind(null,null),m=u.bind(null);t.apply(this,c.slice(0,-1)).then(d,m)}else return t.apply(this,c)}}function massageCreateIndexRequest(t){t=clone$1(t),t.index||(t.index={});for(let c of[`type`,`name`,`ddoc`])t.index[c]&&(t[c]=t.index[c],delete t.index[c]);return t.fields&&(t.index.fields=t.fields,delete t.fields),t.type||(t.type=`json`),t}function isNonNullObject(t){return typeof t==`object`&&!!t}function checkFieldValueType(t,c,u){let d=``,m=c,g=!0;if([`$in`,`$nin`,`$or`,`$and`,`$mod`,`$nor`,`$all`].indexOf(t)!==-1&&(Array.isArray(c)||(d=`Query operator `+t+` must be an array.`)),[`$not`,`$elemMatch`,`$allMatch`].indexOf(t)!==-1&&(!Array.isArray(c)&&isNonNullObject(c)||(d=`Query operator `+t+` must be an object.`)),t===`$mod`&&Array.isArray(c))if(c.length!==2)d=`Query operator $mod must be in the format [divisor, remainder], where divisor and remainder are both integers.`;else{let t=c[0],u=c[1];t===0&&(d=`Query operator $mod's divisor cannot be 0, cannot divide by zero.`,g=!1),(typeof t!=`number`||parseInt(t,10)!==t)&&(d=`Query operator $mod's divisor is not an integer.`,m=t),parseInt(u,10)!==u&&(d=`Query operator $mod's remainder is not an integer.`,m=u)}if(t===`$exists`&&typeof c!=`boolean`&&(d=`Query operator $exists must be a boolean.`),t===`$type`){let t=[`null`,`boolean`,`number`,`string`,`array`,`object`],u=`"`+t.slice(0,t.length-1).join(`", "`)+`", or "`+t[t.length-1]+`"`;typeof c==`string`?t.indexOf(c)==-1&&(d=`Query operator $type must be a string. Supported values: `+u+`.`):d=`Query operator $type must be a string. Supported values: `+u+`.`}if(t===`$size`&&parseInt(c,10)!==c&&(d=`Query operator $size must be a integer.`),t===`$regex`&&typeof c!=`string`&&(u?d=`Query operator $regex must be a string.`:c instanceof RegExp||(d=`Query operator $regex must be a string or an instance of a javascript regular expression.`)),d){if(g){let t=m===null?` `:Array.isArray(m)?` array`:` `+typeof m,c=isNonNullObject(m)?JSON.stringify(m,null,` `):m;d+=` Received`+t+`: `+c}throw Error(d)}}function validateSelector(t,c){if(Array.isArray(t))for(let u of t)isNonNullObject(u)&&validateSelector(u,c);else for(let[u,d]of Object.entries(t))requireValidation.indexOf(u)!==-1&&checkFieldValueType(u,d,c),equalityOperators.indexOf(u)===-1&&arrayTypeComparisonOperators.indexOf(u)===-1&&isNonNullObject(d)&&validateSelector(d,c)}async function dbFetch(t,c,u){u.body&&(u.body=JSON.stringify(u.body),u.headers=new h({"Content-type":`application/json`}));let d=await t.fetch(c,u),m=await d.json();if(!d.ok)throw m.status=d.status,generateErrorFromResponse(createError(m));return m}async function createIndex(t,c){return await dbFetch(t,`_index`,{method:`POST`,body:massageCreateIndexRequest(c)})}async function find$1(t,c){return validateSelector(c.selector,!0),await dbFetch(t,`_find`,{method:`POST`,body:c})}async function explain(t,c){return await dbFetch(t,`_explain`,{method:`POST`,body:c})}async function getIndexes(t){return await dbFetch(t,`_index`,{method:`GET`})}async function deleteIndex(t,c){let u=c.ddoc,d=c.type||`json`,m=c.name;if(!u)throw Error(`you must provide an index's ddoc`);if(!m)throw Error(`you must provide an index's name`);return await dbFetch(t,`_index/`+[u,d,m].map(encodeURIComponent).join(`/`),{method:`DELETE`})}function getDeepValue(t,c){for(let u of c)if(t=t[u],t===void 0)return;return t}function createDeepMultiMapper(t,c,u){return function(d){if(u&&!matchesSelector(d,u))return;let m=[];for(let c of t){let t=getDeepValue(d,parseField(c));if(t===void 0)return;m.push(t)}c(m)}}function createDeepSingleMapper(t,c,u){let d=parseField(t);return function(t){if(u&&!matchesSelector(t,u))return;let m=getDeepValue(t,d);m!==void 0&&c(m)}}function createShallowSingleMapper(t,c,u){return function(d){u&&!matchesSelector(d,u)||c(d[t])}}function createShallowMultiMapper(t,c,u){return function(d){u&&!matchesSelector(d,u)||c(t.map(t=>d[t]))}}function checkShallow(t){return t.every(t=>t.indexOf(`.`)===-1)}function createMapper(t,c,u){let d=checkShallow(t),m=t.length===1;return d?m?createShallowSingleMapper(t[0],c,u):createShallowMultiMapper(t,c,u):m?createDeepSingleMapper(t[0],c,u):createDeepMultiMapper(t,c,u)}function mapper(t,c){let u=Object.keys(t.fields),d=t.partial_filter_selector;return createMapper(u,c,d)}function reducer(){throw Error(`reduce not supported`)}function ddocValidator(t,c){let u=t.views[c];if(!u.map||!u.map.fields)throw Error(`ddoc `+t._id+` with view `+c+` doesn't have map.fields defined. maybe it wasn't created by this plugin?`)}function abstractMapper$1(t){return t._customFindAbstractMapper?{query:function addQueryFallback(c,u){let d=abstractMapper.query.bind(this);return t._customFindAbstractMapper.query.call(this,c,u,d)},viewCleanup:function addViewCleanupFallback(){let c=abstractMapper.viewCleanup.bind(this);return t._customFindAbstractMapper.viewCleanup.call(this,c)}}:abstractMapper}function massageSort(t){if(!Array.isArray(t))throw Error(`invalid sort json - should be an array`);return t.map(function(t){if(typeof t==`string`){let c={};return c[t]=`asc`,c}else return t})}function massageUseIndex(t){let c=[];return typeof t==`string`?c.push(t):c=t,c.map(function(t){return t.replace(ddocIdPrefix,``)})}function massageIndexDef(t){return t.fields=t.fields.map(function(t){if(typeof t==`string`){let c={};return c[t]=`asc`,c}return t}),t.partial_filter_selector&&(t.partial_filter_selector=massageSelector(t.partial_filter_selector)),t}function getKeyFromDoc(t,c){return c.def.fields.map(c=>getFieldFromDoc(t,parseField(getKey(c))))}function filterInclusiveStart(t,c,u){let d=u.def.fields,m=0;for(let g of t){let t=getKeyFromDoc(g.doc,u);if(d.length===1)t=t[0];else for(;t.length>c.length;)t.pop();if(Math.abs(collate(t,c))>0)break;++m}return m>0?t.slice(m):t}function reverseOptions(t){let c=clone$1(t);return delete c.startkey,delete c.endkey,delete c.inclusive_start,delete c.inclusive_end,`endkey`in t&&(c.startkey=t.endkey),`startkey`in t&&(c.endkey=t.startkey),`inclusive_start`in t&&(c.inclusive_end=t.inclusive_start),`inclusive_end`in t&&(c.inclusive_start=t.inclusive_end),c}function validateIndex(t){let c=t.fields.filter(function(t){return getValue(t)===`asc`});if(c.length!==0&&c.length!==t.fields.length)throw Error(`unsupported mixed sorting`)}function validateSort(t,c){if(c.defaultUsed&&t.sort){let c=t.sort.filter(function(t){return Object.keys(t)[0]!==`_id`}).map(function(t){return Object.keys(t)[0]});if(c.length>0)throw Error(`Cannot sort on field(s) "`+c.join(`,`)+`" when using the default index`)}c.defaultUsed}function validateFindRequest(t){if(typeof t.selector!=`object`)throw Error(`you must provide a selector when you find()`)}function getUserFields(t,c){let u=Object.keys(t),d=c?c.map(getKey):[],m;return m=u.length>=d.length?u:d,d.length===0?{fields:m}:(m=m.sort(function(t,c){let u=d.indexOf(t);u===-1&&(u=Number.MAX_VALUE);let m=d.indexOf(c);return m===-1&&(m=Number.MAX_VALUE),u<m?-1:u>m?1:0}),{fields:m,sortOrder:c.map(getKey)})}async function createIndex$1(t,c){c=massageCreateIndexRequest(c);let u=clone$1(c.index);c.index=massageIndexDef(c.index),validateIndex(c.index);let d;function getMd5(){return d||(d=stringMd5(JSON.stringify(c)))}let m=c.name||`idx-`+getMd5(),g=c.ddoc||`idx-`+getMd5(),b=`_design/`+g,S=!1,C=!1;function updateDdoc(t){return t._rev&&t.language!==`query`&&(S=!0),t.language=`query`,t.views=t.views||{},C=!!t.views[m],C?!1:(t.views[m]={map:{fields:mergeObjects(c.index.fields),partial_filter_selector:c.index.partial_filter_selector},reduce:`_count`,options:{def:u}},t)}if(t.constructor.emit(`debug`,[`find`,`creating index`,b]),await upsert(t,b,updateDdoc),S)throw Error(`invalid language for ddoc with id "`+b+`" (should be "query")`);let w=g+`/`+m;return await abstractMapper$1(t).query.call(t,w,{limit:0,reduce:!1}),{id:b,name:m,result:C?`exists`:`created`}}async function getIndexes$1(t){let c=await t.allDocs({startkey:`_design/`,endkey:`_design/`,include_docs:!0}),u={indexes:[{ddoc:null,name:`_all_docs`,type:`special`,def:{fields:[{_id:`asc`}]}}]};return u.indexes=flatten(u.indexes,c.rows.filter(function(t){return t.doc.language===`query`}).map(function(t){return(t.doc.views===void 0?[]:Object.keys(t.doc.views)).map(function(c){let u=t.doc.views[c];return{ddoc:t.id,name:c,type:`json`,def:massageIndexDef(u.options.def)}})})),u.indexes.sort(function(t,c){return compare(t.name,c.name)}),u.total_rows=u.indexes.length,u}function checkFieldInIndex(t,c){return t.def.fields.some(t=>getKey(t)===c)}function userOperatorLosesPrecision(t,c){let u=t[c];return getKey(u)!==`$eq`}function sortFieldsByIndex(t,c){let u=c.def.fields.map(getKey);return t.slice().sort(function(t,c){let d=u.indexOf(t),m=u.indexOf(c);return d===-1&&(d=Number.MAX_VALUE),m===-1&&(m=Number.MAX_VALUE),compare(d,m)})}function getBasicInMemoryFields(t,c,u){u=sortFieldsByIndex(u,t);let d=!1;for(let m=0,g=u.length;m<g;m++){let b=u[m];if(d||!checkFieldInIndex(t,b))return u.slice(m);m<g-1&&userOperatorLosesPrecision(c,b)&&(d=!0)}return[]}function getInMemoryFieldsFromNe(t){let c=[];for(let[u,d]of Object.entries(t))for(let t of Object.keys(d))t===`$ne`&&c.push(u);return c}function getInMemoryFields(t,c,u,d){return sortFieldsByIndex(uniq(flatten(t,getBasicInMemoryFields(c,u,d),getInMemoryFieldsFromNe(u))),c)}function checkIndexFieldsMatch(t,c,u){if(c){let d=oneArrayIsStrictSubArrayOfOther(c,t),m=oneArrayIsSubArrayOfOther(u,t);return d&&m}return oneSetIsSubArrayOfOther(u,t)}function isNonLogicalMatcher(t){return logicalMatchers.indexOf(t)===-1}function checkFieldsLogicallySound(t,c){let u=c[t[0]];return u===void 0?!0:!(Object.keys(u).length===1&&getKey(u)===`$ne`)}function checkIndexMatches(t,c,u,d){let m=t.def.fields.map(getKey);return checkIndexFieldsMatch(m,c,u)?checkFieldsLogicallySound(m,d):!1}function findMatchingIndexes(t,c,u,d){return d.filter(function(d){return checkIndexMatches(d,u,c,t)})}function findBestMatchingIndex(t,c,u,d,m){let g=findMatchingIndexes(t,c,u,d);if(g.length===0){if(m)throw{error:`no_usable_index`,message:`There is no index available for this selector.`};let t=d[0];return t.defaultUsed=!0,t}if(g.length===1&&!m)return g[0];let b=arrayToObject(c);function scoreIndex(t){let c=t.def.fields.map(getKey),u=0;for(let t of c)b[t]&&u++;return u}if(m){let t=`_design/`+m[0],c=m.length===2?m[1]:!1,u=g.find(function(u){return!!(c&&u.ddoc===t&&c===u.name||u.ddoc===t)});if(!u)throw{error:`unknown_error`,message:`Could not find that index or could not use that index for the query`};return u}return max(g,scoreIndex)}function getSingleFieldQueryOptsFor(t,c){switch(t){case`$eq`:return{key:c};case`$lte`:return{endkey:c};case`$gte`:return{startkey:c};case`$lt`:return{endkey:c,inclusive_end:!1};case`$gt`:return{startkey:c,inclusive_start:!1}}return{startkey:COLLATE_LO}}function getSingleFieldCoreQueryPlan(t,c){let u=getKey(c.def.fields[0]),d=t[u]||{},m=[],g=Object.keys(d),b;for(let t of g){isNonLogicalMatcher(t)&&m.push(u);let c=d[t],g=getSingleFieldQueryOptsFor(t,c);b=b?mergeObjects([b,g]):g}return{queryOpts:b,inMemoryFields:m}}function getMultiFieldCoreQueryPlan(t,c){switch(t){case`$eq`:return{startkey:c,endkey:c};case`$lte`:return{endkey:c};case`$gte`:return{startkey:c};case`$lt`:return{endkey:c,inclusive_end:!1};case`$gt`:return{startkey:c,inclusive_start:!1}}}function getMultiFieldQueryOpts(t,c){let u=c.def.fields.map(getKey),d=[],m=[],g=[],b,S;function finish(t){b!==!1&&m.push(COLLATE_LO),S!==!1&&g.push(COLLATE_HI),d=u.slice(t)}for(let c=0,d=u.length;c<d;c++){let d=t[u[c]];if(!d||!Object.keys(d).length){finish(c);break}else if(Object.keys(d).some(isNonLogicalMatcher)){finish(c);break}else if(c>0){let m=`$gt`in d||`$gte`in d||`$lt`in d||`$lte`in d,g=Object.keys(t[u[c-1]]),b=arrayEquals(g,[`$eq`]),S=arrayEquals(g,Object.keys(d));if(m&&!b&&!S){finish(c);break}}let C=Object.keys(d),w=null;for(let t of C){let c=d[t],u=getMultiFieldCoreQueryPlan(t,c);w=w?mergeObjects([w,u]):u}m.push(`startkey`in w?w.startkey:COLLATE_LO),g.push(`endkey`in w?w.endkey:COLLATE_HI),`inclusive_start`in w&&(b=w.inclusive_start),`inclusive_end`in w&&(S=w.inclusive_end)}let C={startkey:m,endkey:g};return b!==void 0&&(C.inclusive_start=b),S!==void 0&&(C.inclusive_end=S),{queryOpts:C,inMemoryFields:d}}function shouldShortCircuit(t){return Object.keys(t).map(function(c){return t[c]}).some(function(t){return typeof t==`object`&&Object.keys(t).length===0})}function getDefaultQueryPlan(t){return{queryOpts:{startkey:null},inMemoryFields:[Object.keys(t)]}}function getCoreQueryPlan(t,c){return c.defaultUsed?getDefaultQueryPlan(t,c):c.def.fields.length===1?getSingleFieldCoreQueryPlan(t,c):getMultiFieldQueryOpts(t,c)}function planQuery(t,c){let u=t.selector,d=t.sort;if(shouldShortCircuit(u))return Object.assign({},SHORT_CIRCUIT_QUERY,{index:c[0]});let m=getUserFields(u,d),g=m.fields,b=m.sortOrder,S=findBestMatchingIndex(u,g,b,c,t.use_index),C=getCoreQueryPlan(u,S),w=C.queryOpts,T=C.inMemoryFields;return{queryOpts:w,index:S,inMemoryFields:getInMemoryFields(T,S,u,g)}}function indexToSignature(t){return t.ddoc.substring(8)+`/`+t.name}async function doAllDocs(t,c){let u=clone$1(c);u.descending?(`endkey`in u&&typeof u.endkey!=`string`&&(u.endkey=``),`startkey`in u&&typeof u.startkey!=`string`&&(u.limit=0)):(`startkey`in u&&typeof u.startkey!=`string`&&(u.startkey=``),`endkey`in u&&typeof u.endkey!=`string`&&(u.limit=0)),`key`in u&&typeof u.key!=`string`&&(u.limit=0),u.limit>0&&u.indexes_count&&(u.original_limit=u.limit,u.limit+=u.indexes_count);let d=await t.allDocs(u);return d.rows=d.rows.filter(function(t){return!/^_design\//.test(t.id)}),u.original_limit&&(u.limit=u.original_limit),d.rows=d.rows.slice(0,u.limit),d}async function queryAllOrIndex(t,c,u){return u.name===`_all_docs`?doAllDocs(t,c):abstractMapper$1(t).query.call(t,indexToSignature(u),c)}async function find$1$1(t,c,u){c.selector&&(validateSelector(c.selector,!1),c.selector=massageSelector(c.selector)),c.sort&&(c.sort=massageSort(c.sort)),c.use_index&&(c.use_index=massageUseIndex(c.use_index)),`limit`in c||(c.limit=25),validateFindRequest(c);let d=await getIndexes$1(t);t.constructor.emit(`debug`,[`find`,`planning query`,c]);let m=planQuery(c,d.indexes);t.constructor.emit(`debug`,[`find`,`query plan`,m]);let g=m.index;validateSort(c,g);let b=Object.assign({include_docs:!0,reduce:!1,indexes_count:d.total_rows},m.queryOpts);if(`startkey`in b&&`endkey`in b&&collate(b.startkey,b.endkey)>0)return{docs:[]};if(c.sort&&typeof c.sort[0]!=`string`&&getValue(c.sort[0])===`desc`&&(b.descending=!0,b=reverseOptions(b)),m.inMemoryFields.length||(b.limit=c.limit,`skip`in c&&(b.skip=c.skip)),u)return Promise.resolve(m,b);let S=await queryAllOrIndex(t,b,g);b.inclusive_start===!1&&(S.rows=filterInclusiveStart(S.rows,b.startkey,g)),m.inMemoryFields.length&&(S.rows=filterInMemoryFields(S.rows,c,m.inMemoryFields));let C={docs:S.rows.map(function(t){let u=t.doc;return c.fields?pick(u,c.fields):u})};return g.defaultUsed&&(C.warning=`No matching index found, create an index to optimize query time.`),C}async function explain$1(t,c){let u=await find$1$1(t,c,!0);return{dbname:t.name,index:u.index,selector:c.selector,range:{start_key:u.queryOpts.startkey,end_key:u.queryOpts.endkey},opts:{use_index:c.use_index||[],bookmark:`nil`,limit:c.limit,skip:c.skip,sort:c.sort||{},fields:c.fields,conflicts:!1,r:[49]},limit:c.limit,skip:c.skip||0,fields:c.fields}}async function deleteIndex$1(t,c){if(!c.ddoc)throw Error(`you must supply an index.ddoc when deleting`);if(!c.name)throw Error(`you must supply an index.name when deleting`);let u=c.ddoc,d=c.name;function deltaFun(t){return Object.keys(t.views).length===1&&t.views[d]?{_id:u,_deleted:!0}:(delete t.views[d],t)}return await upsert(t,u,deltaFun),await abstractMapper$1(t).viewCleanup.apply(t),{ok:!0}}var nativeFlat,polyFlat,flatten,requireValidation,arrayTypeComparisonOperators,equalityOperators,abstractMapper,ddocIdPrefix,COLLATE_LO,COLLATE_HI,SHORT_CIRCUIT_QUERY,logicalMatchers,plugin$1,init_index_browser_es=__esmMin((()=>{init_index_es$5(),init_index_browser_es$4(),init_index_es$2(),init_index_browser_es$2(),init_index_es$4(),init_index_es$1(),init_index_browser_es$1(),nativeFlat=(...t)=>t.flat(1/0),polyFlat=(...t)=>{let c=[];for(let u of t)Array.isArray(u)?c=c.concat(polyFlat(...u)):c.push(u);return c},flatten=typeof Array.prototype.flat==`function`?nativeFlat:polyFlat,requireValidation=[`$all`,`$allMatch`,`$and`,`$elemMatch`,`$exists`,`$in`,`$mod`,`$nin`,`$nor`,`$not`,`$or`,`$regex`,`$size`,`$type`],arrayTypeComparisonOperators=[`$in`,`$nin`,`$mod`,`$all`],equalityOperators=[`$eq`,`$gt`,`$gte`,`$lt`,`$lte`],__name$2(find$1,`find`),abstractMapper=createAbstractMapReduce(`indexes`,mapper,reducer,ddocValidator),ddocIdPrefix=/^_design\//,COLLATE_LO=null,COLLATE_HI={"":{}},SHORT_CIRCUIT_QUERY={queryOpts:{limit:0,startkey:COLLATE_HI,endkey:COLLATE_LO},inMemoryFields:[]},logicalMatchers=[`$eq`,`$gt`,`$gte`,`$lt`,`$lte`],__name$2(find$1$1,`find$1`),plugin$1={},plugin$1.createIndex=resolveToCallback(async function(t){if(typeof t!=`object`)throw Error(`you must provide an index to create`);return(isRemote(this)?createIndex:createIndex$1)(this,t)}),plugin$1.find=resolveToCallback(async function(t){if(typeof t!=`object`)throw Error(`you must provide search parameters to find()`);return(isRemote(this)?find$1:find$1$1)(this,t)}),plugin$1.explain=resolveToCallback(async function(t){if(typeof t!=`object`)throw Error(`you must provide search parameters to explain()`);return(isRemote(this)?explain:explain$1)(this,t)}),plugin$1.getIndexes=resolveToCallback(async function(){return(isRemote(this)?getIndexes:getIndexes$1)(this)}),plugin$1.deleteIndex=resolveToCallback(async function(t){if(typeof t!=`object`)throw Error(`you must provide an index to delete`);return(isRemote(this)?deleteIndex:deleteIndex$1)(this,t)})}));function getConfigUrl(t){return(t?`/_node/`+t:``)+`/_config`}function wrapError(t){throw t.name===`unknown_error`&&(t.message=(t.message||``)+` Unknown error! Did you remember to enable CORS?`),t}function fetchJSON(t,c,u){return u=u||{},u.body&&(u.body=JSON.stringify(u.body)),u.headers=u.headers||new h,u.headers.set(`Content-Type`,`application/json`),u.headers.set(`Accept`,`application/json`),t(c,u).then(function(t){return t.ok?t.json():t.json().then(function(t){throw t})}).catch(wrapError)}function toCallback(t){return function(){for(var c=[],u=arguments.length;u--;)c[u]=arguments[u];if(typeof c[-1]==`function`){var d=c[-1];return t.apply(this,c.slice(0,-2)).then(function(t){return d(null,t)},function(t){return d(t)})}else return t.apply(this,c)}}function updateUser(t,c,u){var d=[`_id`,`_rev`,`name`,`type`,`roles`,`password`,`password_scheme`,`iterations`,`derived_key`,`salt`];if(u.metadata){for(var m in u.metadata)if(u.metadata.hasOwnProperty(m)&&d.indexOf(m)!==-1)return Promise.reject(new AuthError(`cannot use reserved word in metadata: "`+m+`"`));c=Object.assign(c,u.metadata)}u.roles&&(c=Object.assign(c,{roles:u.roles}));var g=usersPath+`/`+encodeURIComponent(c._id),b=Object.assign({method:`PUT`,body:c},u.ajax||{});return fetchJSON(t.fetch,g,b)}var AuthError,getMembership,getNodeName,signUpAdmin,deleteAdmin,sessionPath,logIn,logOut,getSession,usersPath,signUp,getUser,putUser,deleteUser,changePassword,changeUsername,plugin,init_index_es=__esmMin((()=>{init_index_browser_es$4(),init_index_browser_es$1(),AuthError=function(t){function AuthError(c){t.call(this,c),this.name=`authentication_error`,this.status=400,this.error=!0,Object.setPrototypeOf(this,AuthError.prototype)}return t&&(AuthError.__proto__=t),AuthError.prototype=Object.create(t&&t.prototype),AuthError.prototype.constructor=AuthError,AuthError}(Error),getMembership=toCallback(function(t){var c=this;t===void 0&&(t={});var u=`/_membership`,d=Object.assign({method:`GET`},t.ajax||{});return fetchJSON(c.fetch,u,d)}),getNodeName=function(t,c){return t.getMembership(c).then(function(t){return t.all_nodes[0]},function(t){if(t.error!==`illegal_database_name`)throw t})},signUpAdmin=toCallback(function(t,c,u){var d=this;return u===void 0&&(u={}),[`http`,`https`].indexOf(d.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?c?getNodeName(d,u).then(function(m){var g=getConfigUrl(m),b=(u.configUrl||g)+`/admins/`+encodeURIComponent(t),S=Object.assign({method:`PUT`,body:c},u.ajax||{});return fetchJSON(d.fetch,b,S)}):Promise.reject(new AuthError(`You must provide a password`)):Promise.reject(new AuthError(`You must provide a username`))}),deleteAdmin=toCallback(function(t,c){var u=this;return c===void 0&&(c={}),[`http`,`https`].indexOf(u.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?getNodeName(u,c).then(function(d){var m=getConfigUrl(d),g=(c.configUrl||m)+`/admins/`+encodeURIComponent(t),b=Object.assign({method:`DELETE`,processData:!1},c.ajax||{});return fetchJSON(u.fetch,g,b)}):Promise.reject(new AuthError(`You must provide a username`))}),sessionPath=`/_session`,logIn=toCallback(function(t,c,u){var d=this;if(u===void 0&&(u={}),[`http`,`https`].indexOf(d.type())===-1)return Promise.reject(new AuthError(`this plugin only works for the http/https adapter`));if(!t)return Promise.reject(new AuthError(`you must provide a username`));if(!c)return Promise.reject(new AuthError(`you must provide a password`));var m=sessionPath,g=Object.assign({method:`POST`,body:{name:t,password:c}},u.ajax||{});return fetchJSON(d.fetch,m,g)}),logOut=toCallback(function(t){var c=this;t===void 0&&(t={});var u=sessionPath,d=Object.assign({method:`DELETE`},t.ajax||{});return fetchJSON(c.fetch,u,d)}),getSession=toCallback(function(t){var c=this;t===void 0&&(t={});var u=sessionPath,d=Object.assign({method:`GET`},t.ajax||{});return fetchJSON(c.fetch,u,d)}),usersPath=`/_users`,signUp=toCallback(function(t,c,u){var d=this;return u===void 0&&(u={}),[`http`,`https`].indexOf(d.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?c?updateUser(d,{name:t,password:c,roles:[],type:`user`,_id:`org.couchdb.user:`+t},u):Promise.reject(new AuthError(`You must provide a password`)):Promise.reject(new AuthError(`You must provide a username`))}),getUser=toCallback(function(t,c){var u=this;if(c===void 0&&(c={}),!t)return Promise.reject(new AuthError(`you must provide a username`));var d=usersPath+`/`+encodeURIComponent(`org.couchdb.user:`+t),m=Object.assign({method:`GET`},c.ajax||{});return fetchJSON(u.fetch,d,m).then(function(t){return console.log(t),t})}),putUser=toCallback(function(t,c){var u=this;return c===void 0&&(c={}),[`http`,`https`].indexOf(u.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?u.getUser(t,c).then(function(t){return updateUser(u,t,c)}):Promise.reject(new AuthError(`You must provide a username`))}),deleteUser=toCallback(function(t,c){var u=this;return c===void 0&&(c={}),[`http`,`https`].indexOf(u.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?u.getUser(t,c).then(function(t){var d=usersPath+`/`+encodeURIComponent(t._id)+`?rev=`+t._rev,m=Object.assign({method:`DELETE`},c.ajax||{});return fetchJSON(u.fetch,d,m)}):Promise.reject(new AuthError(`You must provide a username`))}),changePassword=toCallback(function(t,c,u){var d=this;return u===void 0&&(u={}),[`http`,`https`].indexOf(d.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):t?c?d.getUser(t,u).then(function(t){t.password=c;var m=usersPath+`/`+encodeURIComponent(t._id),g=Object.assign({method:`PUT`,body:t},u.ajax||{});return fetchJSON(d.fetch,m,g)}):Promise.reject(new AuthError(`You must provide a password`)):Promise.reject(new AuthError(`You must provide a username`))}),changeUsername=toCallback(function(t,c,u){var d=this,m=`org.couchdb.user:`,updateUser=function(t,c){var u=usersPath+`/`+encodeURIComponent(t._id),m=Object.assign({method:`PUT`,body:t},c.ajax);return fetchJSON(d.fetch,u,m)};return u===void 0&&(u={}),u.ajax=u.ajax||{},[`http`,`https`].indexOf(d.type())===-1?Promise.reject(new AuthError(`This plugin only works for the http/https adapter. So you should use new PouchDB("http://mysite.com:5984/mydb") instead.`)):c?t?d.getUser(c,u).then(function(){var t=new AuthError(`user already exists`);throw t.taken=!0,t},function(){return d.getUser(t,u)}).then(function(t){var d=clone$1(t);return delete d._rev,d._id=m+c,d.name=c,d.roles=u.roles||t.roles||{},updateUser(d,u).then(function(){return t._deleted=!0,updateUser(t,u)})}):Promise.reject(new AuthError(`You must provide a username to rename`)):Promise.reject(new AuthError(`You must provide a new username`))}),plugin={},plugin.login=logIn,plugin.logIn=logIn,plugin.logout=logOut,plugin.logOut=logOut,plugin.getSession=getSession,plugin.getMembership=getMembership,plugin.signUpAdmin=signUpAdmin,plugin.deleteAdmin=deleteAdmin,plugin.signup=signUp,plugin.signUp=signUp,plugin.getUser=getUser,plugin.putUser=putUser,plugin.deleteUser=deleteUser,plugin.changePassword=changePassword,plugin.changeUsername=changeUsername,typeof window<`u`&&window.PouchDB&&window.PouchDB.plugin(plugin)}));function unsafeStringify(t,c=0){return(byteToHex[t[c+0]]+byteToHex[t[c+1]]+byteToHex[t[c+2]]+byteToHex[t[c+3]]+`-`+byteToHex[t[c+4]]+byteToHex[t[c+5]]+`-`+byteToHex[t[c+6]]+byteToHex[t[c+7]]+`-`+byteToHex[t[c+8]]+byteToHex[t[c+9]]+`-`+byteToHex[t[c+10]]+byteToHex[t[c+11]]+byteToHex[t[c+12]]+byteToHex[t[c+13]]+byteToHex[t[c+14]]+byteToHex[t[c+15]]).toLowerCase()}var byteToHex,init_stringify=__esmMin((()=>{byteToHex=[];for(let t=0;t<256;++t)byteToHex.push((t+256).toString(16).slice(1))}));function rng(){if(!getRandomValues){if(typeof crypto>`u`||!crypto.getRandomValues)throw Error(`crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported`);getRandomValues=crypto.getRandomValues.bind(crypto)}return getRandomValues(rnds8)}var getRandomValues,rnds8,init_rng=__esmMin((()=>{rnds8=new Uint8Array(16)})),randomUUID,native_default,init_native=__esmMin((()=>{randomUUID=typeof crypto<`u`&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),native_default={randomUUID}}));function v4(t,c,u){if(native_default.randomUUID&&!c&&!t)return native_default.randomUUID();t=t||{};let d=t.random??t.rng?.()??rng();if(d.length<16)throw Error(`Random bytes length must be >= 16`);if(d[6]=d[6]&15|64,d[8]=d[8]&63|128,c){if(u=u||0,u<0||u+16>c.length)throw RangeError(`UUID byte range ${u}:${u+15} is out of buffer bounds`);for(let t=0;t<16;++t)c[u+t]=d[t];return c}return unsafeStringify(d)}var init_v4=__esmMin((()=>{init_native(),init_rng(),init_stringify()})),init_esm_browser=__esmMin((()=>{init_v4()})),require_browser_ponyfill=__commonJSMin$2(((t,c)=>{var u=typeof globalThis<`u`&&globalThis||typeof self<`u`&&self||typeof window<`u`&&window,d=(function(){function F(){this.fetch=!1,this.DOMException=u.DOMException}return F.prototype=u,new F})();(function(t){(function(c){var u=t!==void 0&&t||typeof self<`u`&&self||typeof window<`u`&&window||{},d={searchParams:`URLSearchParams`in u,iterable:`Symbol`in u&&`iterator`in Symbol,blob:`FileReader`in u&&`Blob`in u&&(function(){try{return new Blob,!0}catch{return!1}})(),formData:`FormData`in u,arrayBuffer:`ArrayBuffer`in u};function isDataView(t){return t&&DataView.prototype.isPrototypeOf(t)}if(d.arrayBuffer)var m=[`[object Int8Array]`,`[object Uint8Array]`,`[object Uint8ClampedArray]`,`[object Int16Array]`,`[object Uint16Array]`,`[object Int32Array]`,`[object Uint32Array]`,`[object Float32Array]`,`[object Float64Array]`],g=ArrayBuffer.isView||function(t){return t&&m.indexOf(Object.prototype.toString.call(t))>-1};function normalizeName(t){if(typeof t!=`string`&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||t===``)throw TypeError(`Invalid character in header field name: "`+t+`"`);return t.toLowerCase()}function normalizeValue(t){return typeof t!=`string`&&(t=String(t)),t}function iteratorFor(t){var c={next:function(){var c=t.shift();return{done:c===void 0,value:c}}};return d.iterable&&(c[Symbol.iterator]=function(){return c}),c}function Headers(t){this.map={},t instanceof Headers?t.forEach(function(t,c){this.append(c,t)},this):Array.isArray(t)?t.forEach(function(t){if(t.length!=2)throw TypeError(`Headers constructor: expected name/value pair to be length 2, found`+t.length);this.append(t[0],t[1])},this):t&&Object.getOwnPropertyNames(t).forEach(function(c){this.append(c,t[c])},this)}Headers.prototype.append=function(t,c){t=normalizeName(t),c=normalizeValue(c);var u=this.map[t];this.map[t]=u?u+`, `+c:c},Headers.prototype.delete=function(t){delete this.map[normalizeName(t)]},Headers.prototype.get=function(t){return t=normalizeName(t),this.has(t)?this.map[t]:null},Headers.prototype.has=function(t){return this.map.hasOwnProperty(normalizeName(t))},Headers.prototype.set=function(t,c){this.map[normalizeName(t)]=normalizeValue(c)},Headers.prototype.forEach=function(t,c){for(var u in this.map)this.map.hasOwnProperty(u)&&t.call(c,this.map[u],u,this)},Headers.prototype.keys=function(){var t=[];return this.forEach(function(c,u){t.push(u)}),iteratorFor(t)},Headers.prototype.values=function(){var t=[];return this.forEach(function(c){t.push(c)}),iteratorFor(t)},Headers.prototype.entries=function(){var t=[];return this.forEach(function(c,u){t.push([u,c])}),iteratorFor(t)},d.iterable&&(Headers.prototype[Symbol.iterator]=Headers.prototype.entries);function consumed(t){if(!t._noBody){if(t.bodyUsed)return Promise.reject(TypeError(`Already read`));t.bodyUsed=!0}}function fileReaderReady(t){return new Promise(function(c,u){t.onload=function(){c(t.result)},t.onerror=function(){u(t.error)}})}function readBlobAsArrayBuffer(t){var c=new FileReader,u=fileReaderReady(c);return c.readAsArrayBuffer(t),u}function readBlobAsText(t){var c=new FileReader,u=fileReaderReady(c),d=/charset=([A-Za-z0-9_-]+)/.exec(t.type),m=d?d[1]:`utf-8`;return c.readAsText(t,m),u}function readArrayBufferAsText(t){for(var c=new Uint8Array(t),u=Array(c.length),d=0;d<c.length;d++)u[d]=String.fromCharCode(c[d]);return u.join(``)}function bufferClone(t){if(t.slice)return t.slice(0);var c=new Uint8Array(t.byteLength);return c.set(new Uint8Array(t)),c.buffer}function Body(){return this.bodyUsed=!1,this._initBody=function(t){this.bodyUsed=this.bodyUsed,this._bodyInit=t,t?typeof t==`string`?this._bodyText=t:d.blob&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:d.formData&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:d.searchParams&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():d.arrayBuffer&&d.blob&&isDataView(t)?(this._bodyArrayBuffer=bufferClone(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):d.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(t)||g(t))?this._bodyArrayBuffer=bufferClone(t):this._bodyText=t=Object.prototype.toString.call(t):(this._noBody=!0,this._bodyText=``),this.headers.get(`content-type`)||(typeof t==`string`?this.headers.set(`content-type`,`text/plain;charset=UTF-8`):this._bodyBlob&&this._bodyBlob.type?this.headers.set(`content-type`,this._bodyBlob.type):d.searchParams&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set(`content-type`,`application/x-www-form-urlencoded;charset=UTF-8`))},d.blob&&(this.blob=function(){var t=consumed(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw Error(`could not read FormData body as blob`);return Promise.resolve(new Blob([this._bodyText]))}),this.arrayBuffer=function(){if(this._bodyArrayBuffer)return consumed(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer));if(d.blob)return this.blob().then(readBlobAsArrayBuffer);throw Error(`could not read as ArrayBuffer`)},this.text=function(){var t=consumed(this);if(t)return t;if(this._bodyBlob)return readBlobAsText(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));if(this._bodyFormData)throw Error(`could not read FormData body as text`);return Promise.resolve(this._bodyText)},d.formData&&(this.formData=function(){return this.text().then(decode)}),this.json=function(){return this.text().then(JSON.parse)},this}var b=[`CONNECT`,`DELETE`,`GET`,`HEAD`,`OPTIONS`,`PATCH`,`POST`,`PUT`,`TRACE`];function normalizeMethod(t){var c=t.toUpperCase();return b.indexOf(c)>-1?c:t}function Request(t,c){if(!(this instanceof Request))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);c=c||{};var d=c.body;if(t instanceof Request){if(t.bodyUsed)throw TypeError(`Already read`);this.url=t.url,this.credentials=t.credentials,c.headers||(this.headers=new Headers(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,!d&&t._bodyInit!=null&&(d=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=c.credentials||this.credentials||`same-origin`,(c.headers||!this.headers)&&(this.headers=new Headers(c.headers)),this.method=normalizeMethod(c.method||this.method||`GET`),this.mode=c.mode||this.mode||null,this.signal=c.signal||this.signal||function(){if(`AbortController`in u)return new AbortController().signal}(),this.referrer=null,(this.method===`GET`||this.method===`HEAD`)&&d)throw TypeError(`Body not allowed for GET or HEAD requests`);if(this._initBody(d),(this.method===`GET`||this.method===`HEAD`)&&(c.cache===`no-store`||c.cache===`no-cache`)){var m=/([?&])_=[^&]*/;m.test(this.url)?this.url=this.url.replace(m,`$1_=`+new Date().getTime()):this.url+=(/\?/.test(this.url)?`&`:`?`)+`_=`+new Date().getTime()}}Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})};function decode(t){var c=new FormData;return t.trim().split(`&`).forEach(function(t){if(t){var u=t.split(`=`),d=u.shift().replace(/\+/g,` `),m=u.join(`=`).replace(/\+/g,` `);c.append(decodeURIComponent(d),decodeURIComponent(m))}}),c}function parseHeaders(t){var c=new Headers;return t.replace(/\r?\n[\t ]+/g,` `).split(`\r`).map(function(t){return t.indexOf(`
|
|
94
|
-
`)===0?t.substr(1,t.length):t}).forEach(function(t){var u=t.split(`:`),d=u.shift().trim();if(d){var m=u.join(`:`).trim();try{c.append(d,m)}catch(t){console.warn(`Response `+t.message)}}}),c}Body.call(Request.prototype);function Response(t,c){if(!(this instanceof Response))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);if(c||(c={}),this.type=`default`,this.status=c.status===void 0?200:c.status,this.status<200||this.status>599)throw RangeError(`Failed to construct 'Response': The status provided (0) is outside the range [200, 599].`);this.ok=this.status>=200&&this.status<300,this.statusText=c.statusText===void 0?``:``+c.statusText,this.headers=new Headers(c.headers),this.url=c.url||``,this._initBody(t)}Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var t=new Response(null,{status:200,statusText:``});return t.ok=!1,t.status=0,t.type=`error`,t};var S=[301,302,303,307,308];Response.redirect=function(t,c){if(S.indexOf(c)===-1)throw RangeError(`Invalid status code`);return new Response(null,{status:c,headers:{location:t}})},c.DOMException=u.DOMException;try{new c.DOMException}catch{c.DOMException=function(t,c){this.message=t,this.name=c,this.stack=Error(t).stack},c.DOMException.prototype=Object.create(Error.prototype),c.DOMException.prototype.constructor=c.DOMException}function fetch(t,m){return new Promise(function(g,b){var S=new Request(t,m);if(S.signal&&S.signal.aborted)return b(new c.DOMException(`Aborted`,`AbortError`));var C=new XMLHttpRequest;function abortXhr(){C.abort()}C.onload=function(){var t={statusText:C.statusText,headers:parseHeaders(C.getAllResponseHeaders()||``)};S.url.indexOf(`file://`)===0&&(C.status<200||C.status>599)?t.status=200:t.status=C.status,t.url=`responseURL`in C?C.responseURL:t.headers.get(`X-Request-URL`);var c=`response`in C?C.response:C.responseText;setTimeout(function(){g(new Response(c,t))},0)},C.onerror=function(){setTimeout(function(){b(TypeError(`Network request failed`))},0)},C.ontimeout=function(){setTimeout(function(){b(TypeError(`Network request timed out`))},0)},C.onabort=function(){setTimeout(function(){b(new c.DOMException(`Aborted`,`AbortError`))},0)};function fixUrl(t){try{return t===``&&u.location.href?u.location.href:t}catch{return t}}if(C.open(S.method,fixUrl(S.url),!0),S.credentials===`include`?C.withCredentials=!0:S.credentials===`omit`&&(C.withCredentials=!1),`responseType`in C&&(d.blob?C.responseType=`blob`:d.arrayBuffer&&(C.responseType=`arraybuffer`)),m&&typeof m.headers==`object`&&!(m.headers instanceof Headers||u.Headers&&m.headers instanceof u.Headers)){var w=[];Object.getOwnPropertyNames(m.headers).forEach(function(t){w.push(normalizeName(t)),C.setRequestHeader(t,normalizeValue(m.headers[t]))}),S.headers.forEach(function(t,c){w.indexOf(c)===-1&&C.setRequestHeader(c,t)})}else S.headers.forEach(function(t,c){C.setRequestHeader(c,t)});S.signal&&(S.signal.addEventListener(`abort`,abortXhr),C.onreadystatechange=function(){C.readyState===4&&S.signal.removeEventListener(`abort`,abortXhr)}),C.send(S._bodyInit===void 0?null:S._bodyInit)})}return fetch.polyfill=!0,u.fetch||(u.fetch=fetch,u.Headers=Headers,u.Request=Request,u.Response=Response),c.Headers=Headers,c.Request=Request,c.Response=Response,c.fetch=fetch,c})({})})(d),d.fetch.ponyfill=!0,delete d.fetch.polyfill;var m=u.fetch?u:d;t=m.fetch,t.default=m.fetch,t.fetch=m.fetch,t.Headers=m.Headers,t.Request=m.Request,t.Response=m.Response,c.exports=t})),require_browser=__commonJSMin$2(((t,c)=>{var u=c.exports={},d,m;function defaultSetTimout(){throw Error(`setTimeout has not been defined`)}function defaultClearTimeout(){throw Error(`clearTimeout has not been defined`)}(function(){try{d=typeof setTimeout==`function`?setTimeout:defaultSetTimout}catch{d=defaultSetTimout}try{m=typeof clearTimeout==`function`?clearTimeout:defaultClearTimeout}catch{m=defaultClearTimeout}})();function runTimeout(t){if(d===setTimeout)return setTimeout(t,0);if((d===defaultSetTimout||!d)&&setTimeout)return d=setTimeout,setTimeout(t,0);try{return d(t,0)}catch{try{return d.call(null,t,0)}catch{return d.call(this,t,0)}}}function runClearTimeout(t){if(m===clearTimeout)return clearTimeout(t);if((m===defaultClearTimeout||!m)&&clearTimeout)return m=clearTimeout,clearTimeout(t);try{return m(t)}catch{try{return m.call(null,t)}catch{return m.call(this,t)}}}var g=[],b=!1,S,C=-1;function cleanUpNextTick(){!b||!S||(b=!1,S.length?g=S.concat(g):C=-1,g.length&&drainQueue())}function drainQueue(){if(!b){var t=runTimeout(cleanUpNextTick);b=!0;for(var c=g.length;c;){for(S=g,g=[];++C<c;)S&&S[C].run();C=-1,c=g.length}S=null,b=!1,runClearTimeout(t)}}u.nextTick=function(t){var c=Array(arguments.length-1);if(arguments.length>1)for(var u=1;u<arguments.length;u++)c[u-1]=arguments[u];g.push(new Item(t,c)),g.length===1&&!b&&runTimeout(drainQueue)};function Item(t,c){this.fun=t,this.array=c}Item.prototype.run=function(){this.fun.apply(null,this.array)},u.title=`browser`,u.browser=!0,u.env={},u.argv=[],u.version=``,u.versions={};function noop(){}u.on=noop,u.addListener=noop,u.once=noop,u.off=noop,u.removeListener=noop,u.removeAllListeners=noop,u.emit=noop,u.prependListener=noop,u.prependOnceListener=noop,u.listeners=function(t){return[]},u.binding=function(t){throw Error(`process.binding is not supported`)},u.cwd=function(){return`/`},u.chdir=function(t){throw Error(`process.chdir is not supported`)},u.umask=function(){return 0}})),dist_exports=__exportAll$1({ContentNavigator:()=>ContentNavigator,CouchDBToStaticPacker:()=>CouchDBToStaticPacker,CourseLookup:()=>CourseLookup,DIVERSITY_FLOOR:()=>DIVERSITY_FLOOR,DIVERSITY_STRENGTH:()=>DIVERSITY_STRENGTH,DocType:()=>DocType,DocTypePrefixes:()=>DocTypePrefixes,ENV:()=>ENV,FileSystemError:()=>FileSystemError,GuestUsername:()=>GuestUsername,Loggable:()=>Loggable,NOT_SET:()=>NOT_SET,NavigatorRole:()=>NavigatorRole,NavigatorRoles:()=>NavigatorRoles,Navigators:()=>Navigators,QuotaRoundRobinMixer:()=>QuotaRoundRobinMixer,SessionController:()=>SessionController,StaticToCouchDBMigrator:()=>StaticToCouchDBMigrator,TagFilteredContentSource:()=>TagFilteredContentSource,_resetDataLayer:()=>_resetDataLayer,aggregateOutcomesForGradient:()=>aggregateOutcomesForGradient,areQuestionRecords:()=>areQuestionRecords,buildStrategyStateId:()=>buildStrategyStateId,captureMixerRun:()=>captureMixerRun,clearSrsBacklogDebug:()=>clearSrsBacklogDebug,clearStaleSessionDebugState:()=>clearStaleSessionDebugState,computeDeviation:()=>computeDeviation,computeEffectiveWeight:()=>computeEffectiveWeight,computeOutcomeSignal:()=>computeOutcomeSignal,computeSpread:()=>computeSpread,computeStrategyGradient:()=>computeStrategyGradient,createOrchestrationContext:()=>createOrchestrationContext,diversityRerank:()=>diversityRerank,docIsDeleted:()=>docIsDeleted,endSessionTracking:()=>endSessionTracking,ensureAppDataDirectory:()=>ensureAppDataDirectory,getActivePipeline:()=>getActivePipeline,getAppDataDirectory:()=>getAppDataDirectory,getCardHistoryID:()=>getCardHistoryID,getCardOrigin:()=>getCardOrigin,getDataLayer:()=>getDataLayer,getDbPath:()=>getDbPath,getDefaultLearnableWeight:()=>getDefaultLearnableWeight,getRegisteredNavigator:()=>getRegisteredNavigator,getRegisteredNavigatorNames:()=>getRegisteredNavigatorNames,getRegisteredNavigatorRole:()=>getRegisteredNavigatorRole,getSrsBacklogDebug:()=>getSrsBacklogDebug,getStudySource:()=>getStudySource,hasRegisteredNavigator:()=>hasRegisteredNavigator,importParsedCards:()=>importParsedCards,initializeDataDirectory:()=>initializeDataDirectory,initializeDataLayer:()=>initializeDataLayer,initializeNavigatorRegistry:()=>initializeNavigatorRegistry,isDataShapeRegistered:()=>isDataShapeRegistered,isDataShapeSchemaAvailable:()=>isDataShapeSchemaAvailable,isFilter:()=>isFilter,isGenerator:()=>isGenerator,isQuestionRecord:()=>isQuestionRecord,isQuestionTypeRegistered:()=>isQuestionTypeRegistered,isReview:()=>isReview,log:()=>log,mixerDebugAPI:()=>mixerDebugAPI,mountMixerDebugger:()=>mountMixerDebugger,mountPipelineDebugger:()=>mountPipelineDebugger,mountSessionDebugger:()=>mountSessionDebugger,mountUserDBDebugger:()=>mountUserDBDebugger,newInterval:()=>newInterval,parseCardHistoryID:()=>parseCardHistoryID,pipelineDebugAPI:()=>pipelineDebugAPI,processCustomQuestionsData:()=>processCustomQuestionsData,recordCardPresentation:()=>recordCardPresentation,recordUserOutcome:()=>recordUserOutcome,registerBlanksCard:()=>registerBlanksCard,registerCustomQuestionTypes:()=>registerCustomQuestionTypes,registerDataShape:()=>registerDataShape,registerNavigator:()=>registerNavigator,registerQuestionType:()=>registerQuestionType,registerSeedData:()=>registerSeedData,removeCustomQuestionTypes:()=>removeCustomQuestionTypes,removeDataShape:()=>removeDataShape,removeQuestionType:()=>removeQuestionType,runPeriodUpdate:()=>runPeriodUpdate,scoreAccuracyInZone:()=>scoreAccuracyInZone,sessionDebugAPI:()=>sessionDebugAPI,snapshotQueues:()=>snapshotQueues,startSessionTracking:()=>startSessionTracking,updateLearningState:()=>updateLearningState,updateStrategyWeight:()=>updateStrategyWeight,userDBDebugAPI:()=>userDBDebugAPI,validateMigration:()=>validateMigration,validateProcessorConfig:()=>validateProcessorConfig,validateStaticCourse:()=>validateStaticCourse});function areQuestionRecords(t){return isQuestionRecord(t.records[0])}function isQuestionRecord(t){return t.userAnswer!==void 0}function getCardHistoryID(t,c){return`${DocTypePrefixes.CARDRECORD}-${t}-${c}`}function parseCardHistoryID(t){let c=t.split(`-`),u=``;if(u+=c.length===3?``:`
|
|
94
|
+
`)===0?t.substr(1,t.length):t}).forEach(function(t){var u=t.split(`:`),d=u.shift().trim();if(d){var m=u.join(`:`).trim();try{c.append(d,m)}catch(t){console.warn(`Response `+t.message)}}}),c}Body.call(Request.prototype);function Response(t,c){if(!(this instanceof Response))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);if(c||(c={}),this.type=`default`,this.status=c.status===void 0?200:c.status,this.status<200||this.status>599)throw RangeError(`Failed to construct 'Response': The status provided (0) is outside the range [200, 599].`);this.ok=this.status>=200&&this.status<300,this.statusText=c.statusText===void 0?``:``+c.statusText,this.headers=new Headers(c.headers),this.url=c.url||``,this._initBody(t)}Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var t=new Response(null,{status:200,statusText:``});return t.ok=!1,t.status=0,t.type=`error`,t};var S=[301,302,303,307,308];Response.redirect=function(t,c){if(S.indexOf(c)===-1)throw RangeError(`Invalid status code`);return new Response(null,{status:c,headers:{location:t}})},c.DOMException=u.DOMException;try{new c.DOMException}catch{c.DOMException=function(t,c){this.message=t,this.name=c,this.stack=Error(t).stack},c.DOMException.prototype=Object.create(Error.prototype),c.DOMException.prototype.constructor=c.DOMException}function fetch(t,m){return new Promise(function(g,b){var S=new Request(t,m);if(S.signal&&S.signal.aborted)return b(new c.DOMException(`Aborted`,`AbortError`));var C=new XMLHttpRequest;function abortXhr(){C.abort()}C.onload=function(){var t={statusText:C.statusText,headers:parseHeaders(C.getAllResponseHeaders()||``)};S.url.indexOf(`file://`)===0&&(C.status<200||C.status>599)?t.status=200:t.status=C.status,t.url=`responseURL`in C?C.responseURL:t.headers.get(`X-Request-URL`);var c=`response`in C?C.response:C.responseText;setTimeout(function(){g(new Response(c,t))},0)},C.onerror=function(){setTimeout(function(){b(TypeError(`Network request failed`))},0)},C.ontimeout=function(){setTimeout(function(){b(TypeError(`Network request timed out`))},0)},C.onabort=function(){setTimeout(function(){b(new c.DOMException(`Aborted`,`AbortError`))},0)};function fixUrl(t){try{return t===``&&u.location.href?u.location.href:t}catch{return t}}if(C.open(S.method,fixUrl(S.url),!0),S.credentials===`include`?C.withCredentials=!0:S.credentials===`omit`&&(C.withCredentials=!1),`responseType`in C&&(d.blob?C.responseType=`blob`:d.arrayBuffer&&(C.responseType=`arraybuffer`)),m&&typeof m.headers==`object`&&!(m.headers instanceof Headers||u.Headers&&m.headers instanceof u.Headers)){var w=[];Object.getOwnPropertyNames(m.headers).forEach(function(t){w.push(normalizeName(t)),C.setRequestHeader(t,normalizeValue(m.headers[t]))}),S.headers.forEach(function(t,c){w.indexOf(c)===-1&&C.setRequestHeader(c,t)})}else S.headers.forEach(function(t,c){C.setRequestHeader(c,t)});S.signal&&(S.signal.addEventListener(`abort`,abortXhr),C.onreadystatechange=function(){C.readyState===4&&S.signal.removeEventListener(`abort`,abortXhr)}),C.send(S._bodyInit===void 0?null:S._bodyInit)})}return fetch.polyfill=!0,u.fetch||(u.fetch=fetch,u.Headers=Headers,u.Request=Request,u.Response=Response),c.Headers=Headers,c.Request=Request,c.Response=Response,c.fetch=fetch,c})({})})(d),d.fetch.ponyfill=!0,delete d.fetch.polyfill;var m=u.fetch?u:d;t=m.fetch,t.default=m.fetch,t.fetch=m.fetch,t.Headers=m.Headers,t.Request=m.Request,t.Response=m.Response,c.exports=t})),require_browser=__commonJSMin$2(((t,c)=>{var u=c.exports={},d,m;function defaultSetTimout(){throw Error(`setTimeout has not been defined`)}function defaultClearTimeout(){throw Error(`clearTimeout has not been defined`)}(function(){try{d=typeof setTimeout==`function`?setTimeout:defaultSetTimout}catch{d=defaultSetTimout}try{m=typeof clearTimeout==`function`?clearTimeout:defaultClearTimeout}catch{m=defaultClearTimeout}})();function runTimeout(t){if(d===setTimeout)return setTimeout(t,0);if((d===defaultSetTimout||!d)&&setTimeout)return d=setTimeout,setTimeout(t,0);try{return d(t,0)}catch{try{return d.call(null,t,0)}catch{return d.call(this,t,0)}}}function runClearTimeout(t){if(m===clearTimeout)return clearTimeout(t);if((m===defaultClearTimeout||!m)&&clearTimeout)return m=clearTimeout,clearTimeout(t);try{return m(t)}catch{try{return m.call(null,t)}catch{return m.call(this,t)}}}var g=[],b=!1,S,C=-1;function cleanUpNextTick(){!b||!S||(b=!1,S.length?g=S.concat(g):C=-1,g.length&&drainQueue())}function drainQueue(){if(!b){var t=runTimeout(cleanUpNextTick);b=!0;for(var c=g.length;c;){for(S=g,g=[];++C<c;)S&&S[C].run();C=-1,c=g.length}S=null,b=!1,runClearTimeout(t)}}u.nextTick=function(t){var c=Array(arguments.length-1);if(arguments.length>1)for(var u=1;u<arguments.length;u++)c[u-1]=arguments[u];g.push(new Item(t,c)),g.length===1&&!b&&runTimeout(drainQueue)};function Item(t,c){this.fun=t,this.array=c}Item.prototype.run=function(){this.fun.apply(null,this.array)},u.title=`browser`,u.browser=!0,u.env={},u.argv=[],u.version=``,u.versions={};function noop(){}u.on=noop,u.addListener=noop,u.once=noop,u.off=noop,u.removeListener=noop,u.removeAllListeners=noop,u.emit=noop,u.prependListener=noop,u.prependOnceListener=noop,u.listeners=function(t){return[]},u.binding=function(t){throw Error(`process.binding is not supported`)},u.cwd=function(){return`/`},u.chdir=function(t){throw Error(`process.chdir is not supported`)},u.umask=function(){return 0}})),dist_exports=__exportAll$1({ContentNavigator:()=>ContentNavigator,CouchDBToStaticPacker:()=>CouchDBToStaticPacker,CourseLookup:()=>CourseLookup,DIVERSITY_FLOOR:()=>DIVERSITY_FLOOR,DIVERSITY_STRENGTH:()=>DIVERSITY_STRENGTH,DocType:()=>DocType,DocTypePrefixes:()=>DocTypePrefixes,ENV:()=>ENV,FileSystemError:()=>FileSystemError,GuestUsername:()=>GuestUsername,Loggable:()=>Loggable,NOT_SET:()=>NOT_SET,NavigatorRole:()=>NavigatorRole,NavigatorRoles:()=>NavigatorRoles,Navigators:()=>Navigators,QuotaRoundRobinMixer:()=>QuotaRoundRobinMixer,REVIEW_TIME_FORMAT:()=>REVIEW_TIME_FORMAT,SessionController:()=>SessionController,StaticToCouchDBMigrator:()=>StaticToCouchDBMigrator,TagFilteredContentSource:()=>TagFilteredContentSource,_resetDataLayer:()=>_resetDataLayer,aggregateOutcomesForGradient:()=>aggregateOutcomesForGradient,areQuestionRecords:()=>areQuestionRecords,buildStrategyStateId:()=>buildStrategyStateId,captureMixerRun:()=>captureMixerRun,clearSrsBacklogDebug:()=>clearSrsBacklogDebug,clearStaleSessionDebugState:()=>clearStaleSessionDebugState,computeDeviation:()=>computeDeviation,computeEffectiveWeight:()=>computeEffectiveWeight,computeOutcomeSignal:()=>computeOutcomeSignal,computeSpread:()=>computeSpread,computeStrategyGradient:()=>computeStrategyGradient,createOrchestrationContext:()=>createOrchestrationContext,diversityRerank:()=>diversityRerank,docIsDeleted:()=>docIsDeleted,endSessionTracking:()=>endSessionTracking,ensureAppDataDirectory:()=>ensureAppDataDirectory,getActiveController:()=>getActiveController,getActivePipeline:()=>getActivePipeline,getAppDataDirectory:()=>getAppDataDirectory,getCardHistoryID:()=>getCardHistoryID,getCardOrigin:()=>getCardOrigin,getDataLayer:()=>getDataLayer,getDbPath:()=>getDbPath,getDefaultLearnableWeight:()=>getDefaultLearnableWeight,getRegisteredNavigator:()=>getRegisteredNavigator,getRegisteredNavigatorNames:()=>getRegisteredNavigatorNames,getRegisteredNavigatorRole:()=>getRegisteredNavigatorRole,getSrsBacklogDebug:()=>getSrsBacklogDebug,getStudySource:()=>getStudySource,hasRegisteredNavigator:()=>hasRegisteredNavigator,importParsedCards:()=>importParsedCards,initializeDataDirectory:()=>initializeDataDirectory,initializeDataLayer:()=>initializeDataLayer,initializeNavigatorRegistry:()=>initializeNavigatorRegistry,isDataShapeRegistered:()=>isDataShapeRegistered,isDataShapeSchemaAvailable:()=>isDataShapeSchemaAvailable,isFilter:()=>isFilter,isGenerator:()=>isGenerator,isQuestionRecord:()=>isQuestionRecord,isQuestionTypeRegistered:()=>isQuestionTypeRegistered,isReview:()=>isReview,log:()=>log,makeScheduledCardId:()=>makeScheduledCardId,mixerDebugAPI:()=>mixerDebugAPI,mountMixerDebugger:()=>mountMixerDebugger,mountPipelineDebugger:()=>mountPipelineDebugger,mountSessionDebugger:()=>mountSessionDebugger,mountUserDBDebugger:()=>mountUserDBDebugger,newInterval:()=>newInterval,parseCardHistoryID:()=>parseCardHistoryID,pipelineDebugAPI:()=>pipelineDebugAPI,processCustomQuestionsData:()=>processCustomQuestionsData,recordCardPresentation:()=>recordCardPresentation,recordUserOutcome:()=>recordUserOutcome,registerActiveController:()=>registerActiveController,registerBlanksCard:()=>registerBlanksCard,registerCustomQuestionTypes:()=>registerCustomQuestionTypes,registerDataShape:()=>registerDataShape,registerNavigator:()=>registerNavigator,registerQuestionType:()=>registerQuestionType,registerSeedData:()=>registerSeedData,removeCustomQuestionTypes:()=>removeCustomQuestionTypes,removeDataShape:()=>removeDataShape,removeQuestionType:()=>removeQuestionType,runPeriodUpdate:()=>runPeriodUpdate,scoreAccuracyInZone:()=>scoreAccuracyInZone,sessionDebugAPI:()=>sessionDebugAPI,snapshotQueues:()=>snapshotQueues,startSessionTracking:()=>startSessionTracking,toggleSessionOverlay:()=>toggleSessionOverlay,updateLearningState:()=>updateLearningState,updateStrategyWeight:()=>updateStrategyWeight,userDBDebugAPI:()=>userDBDebugAPI,validateMigration:()=>validateMigration,validateProcessorConfig:()=>validateProcessorConfig,validateStaticCourse:()=>validateStaticCourse});function areQuestionRecords(t){return isQuestionRecord(t.records[0])}function isQuestionRecord(t){return t.userAnswer!==void 0}function getCardHistoryID(t,c){return`${DocTypePrefixes.CARDRECORD}-${t}-${c}`}function parseCardHistoryID(t){let c=t.split(`-`),u=``;if(u+=c.length===3?``:`
|
|
95
95
|
given ID has incorrect number of '-' characters`,u+=c[0]===DocTypePrefixes.CARDRECORD?``:`
|
|
96
|
-
given ID does not start with ${DocTypePrefixes.CARDRECORD}`,c.length===3&&c[0]===DocTypePrefixes.CARDRECORD)return{courseID:c[1],cardID:c[2]};throw Error(`parseCardHistory Error:`+u)}function docIsDeleted(t){return t?.error===`not_found`&&t?.reason===`deleted`}function getAppDataDirectory(){return ENV.LOCAL_STORAGE_PREFIX?import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`,ENV.LOCAL_STORAGE_PREFIX):import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`)}async function ensureAppDataDirectory(){let t=getAppDataDirectory();try{await import___vite_browser_external.promises.mkdir(t,{recursive:!0})}catch(c){if(c.code!==`EEXIST`)throw Error(`Failed to create app data directory ${t}: ${c.message}`)}return t}function getDbPath(t){return import___vite_browser_external$1.join(getAppDataDirectory(),t)}async function initializeDataDirectory(){await ensureAppDataDirectory(),logger.info(`PouchDB data directory initialized: ${getAppDataDirectory()}`)}function hexEncode(t){let c,u=``;for(let d=0;d<t.length;d++)c=t.charCodeAt(d).toString(16),u+=(`000`+c).slice(3);return u}function filterAllDocsByPrefix(t,c,u){let d={startkey:c,endkey:c+``,include_docs:!0};return u&&Object.assign(d,u),t.allDocs(d)}function getStartAndEndKeys(t){return{startkey:t,endkey:t+``}}function updateGuestAccountExpirationDate(t){let c=hooks.utc().add(2,`months`).toISOString(),u=`GuestAccountExpirationDate`;t.get(u).then(d=>t.put({_id:u,_rev:d._rev,date:c})).catch(()=>t.put({_id:u,date:c}))}function getLocalUserDB(t){let c=`userdb-${t}`;return typeof window>`u`?new pouchdb_setup_default(getDbPath(c),{}):new pouchdb_setup_default(c,{})}function scheduleCardReviewLocal(t,c){let u=hooks.utc();logger.info(`Scheduling for review in: ${c.time.diff(u,`h`)/24} days`),t.put({_id:
|
|
96
|
+
given ID does not start with ${DocTypePrefixes.CARDRECORD}`,c.length===3&&c[0]===DocTypePrefixes.CARDRECORD)return{courseID:c[1],cardID:c[2]};throw Error(`parseCardHistory Error:`+u)}function docIsDeleted(t){return t?.error===`not_found`&&t?.reason===`deleted`}function getAppDataDirectory(){return ENV.LOCAL_STORAGE_PREFIX?import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`,ENV.LOCAL_STORAGE_PREFIX):import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`)}async function ensureAppDataDirectory(){let t=getAppDataDirectory();try{await import___vite_browser_external.promises.mkdir(t,{recursive:!0})}catch(c){if(c.code!==`EEXIST`)throw Error(`Failed to create app data directory ${t}: ${c.message}`)}return t}function getDbPath(t){return import___vite_browser_external$1.join(getAppDataDirectory(),t)}async function initializeDataDirectory(){await ensureAppDataDirectory(),logger.info(`PouchDB data directory initialized: ${getAppDataDirectory()}`)}function makeScheduledCardId(t){return DocTypePrefixes.SCHEDULED_CARD+hooks.utc(t).format(REVIEW_TIME_FORMAT)}function hexEncode(t){let c,u=``;for(let d=0;d<t.length;d++)c=t.charCodeAt(d).toString(16),u+=(`000`+c).slice(3);return u}function filterAllDocsByPrefix(t,c,u){let d={startkey:c,endkey:c+``,include_docs:!0};return u&&Object.assign(d,u),t.allDocs(d)}function getStartAndEndKeys(t){return{startkey:t,endkey:t+``}}function updateGuestAccountExpirationDate(t){let c=hooks.utc().add(2,`months`).toISOString(),u=`GuestAccountExpirationDate`;t.get(u).then(d=>t.put({_id:u,_rev:d._rev,date:c})).catch(()=>t.put({_id:u,date:c}))}function getLocalUserDB(t){let c=`userdb-${t}`;return typeof window>`u`?new pouchdb_setup_default(getDbPath(c),{}):new pouchdb_setup_default(c,{})}function scheduleCardReviewLocal(t,c){let u=hooks.utc();logger.info(`Scheduling for review in: ${c.time.diff(u,`h`)/24} days`),t.put({_id:makeScheduledCardId(c.time),cardId:c.card_id,reviewTime:c.time.toISOString(),courseId:c.course_id,scheduledAt:u.toISOString(),scheduledFor:c.scheduledFor,schedulingAgentId:c.schedulingAgentId})}async function removeScheduledCardReviewLocal(t,c){let u=await t.get(c);t.remove(u).then(t=>{t.ok&&log2(`Removed Review Doc: ${c}`)}).catch(t=>{log2(`Failed to remove Review Doc: ${c},
|
|
97
97
|
${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?CLIENT_CACHE[t]:(CLIENT_CACHE[t]=c?await c(t):await GET_ITEM(t),GET_CACHED(t))}async function GET_ITEM(t){throw Error(`No implementation found for GET_CACHED(${t})`)}async function addNote55(t,c,u,d,m,g,b,S=blankCourseElo()){let C=getCourseDB(t),w=prepareNote55(t,c,u,d,m,g,b),T=`${DocTypePrefixes.DISPLAYABLE_DATA}-${v4()}`,E=await C.put({...w,_id:T}),D=NameSpacer.getDataShapeString({course:c,dataShape:u.name});if(E.ok)try{await createCards(t,D,E.id,g,S,m)}catch(t){let c=`Unknown error`;c=t instanceof Error?t.message:t&&typeof t==`object`&&`reason`in t?t.reason:t&&typeof t==`object`&&`message`in t?t.message:String(t),logger.error(`[addNote55] Failed to create cards for note ${E.id}: ${c}`),E.cardCreationFailed=!0,E.cardCreationError=c}else logger.error(`[addNote55] Error adding note. Result: ${JSON.stringify(E)}`);return E}async function createCards(t,c,u,d,m=blankCourseElo(),g){let b=await getCredentialledCourseConfig(t),S=NameSpacer.getDataShapeDescriptor(c),C=[];for(let t of b.dataShapes)t.name===c&&(C=t.questionTypes);if(C.length===0){let t=`No questionViewTypes found for datashapeID: ${c} in course config. Cards cannot be created.`;throw logger.error(t),Error(t)}for(let c of C)await createCard(c,t,S,u,d,m,g)}async function createCard(t,c,u,d,m,g=blankCourseElo(),b){let S=NameSpacer.getQuestionDescriptor(t),C=await getCredentialledCourseConfig(c);for(let w of C.questionTypes)if(w.name===t)for(let t of w.viewList)await addCard(c,u.course,[d],NameSpacer.getViewString({course:S.course,questionType:S.questionType,view:t}),g,m,b)}async function addCard(t,c,u,d,m,g,b){let S=getCourseDB(t),C=`${DocTypePrefixes.CARD}-${v4()}`,w=await S.put({_id:C,course:c,id_displayable_data:u,id_view:d,docType:`CARD`,elo:m||toCourseElo(990+Math.round(20*Math.random())),author:b});for(let c of g)logger.info(`adding tag: ${c} to card ${w.id}`),await addTagToCard(t,w.id,c,b,!1);return w}async function getCredentialledCourseConfig(t){try{let c=await getCourseDB(t).get(`CourseConfig`);return c.courseID=t,logger.info(`Returning course config: ${JSON.stringify(c)}`),c}catch(c){throw logger.error(`Error fetching config for ${t}:`,c),c}}async function addTagToCard(t,c,u,d,m=!0){let g=getTagID(u),b=getCourseDB(t),S=new CourseDB(t,async()=>BaseUser.Dummy({setupRemoteDB:()=>null,startSync:()=>{},canCreateAccount:()=>!1,canAuthenticate:()=>!1,getCurrentUsername:async()=>`DummyUser`}));try{logger.info(`Applying tag ${u} to card ${t+`-`+c}...`);let d=await b.get(g);if(d.taggedCards.includes(c))throw new AlreadyTaggedErr(`Card ${c} is already tagged with ${u}`);if(d.taggedCards.push(c),m)try{let d=(await S.getCardEloData([c]))[0];d.tags[u]={count:0,score:d.global.score},await updateCardElo(t,c,d)}catch(t){logger.error(`Failed to update ELO data for card:`,c,t)}return b.put(d)}catch(g){if(g instanceof AlreadyTaggedErr)throw g;return await createTag(t,u,d),addTagToCard(t,c,u,d,m)}}async function updateCardElo(t,c,u){if(u){let d=getCourseDB(t),m=await d.get(c);return logger.debug(`Replacing ${JSON.stringify(m.elo)} with ${JSON.stringify(u)}`),m.elo=u,d.put(m)}}function getTagID(t){let c=`TAG`.valueOf()+`-`;return t.indexOf(c)===0?t:c+t}function getCourseDB(t){let c=`coursedb-${t}`;return new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+c,createPouchDBConfig())}function diversityRerank(t,c={}){let u=c.strength??DIVERSITY_STRENGTH,d=c.floor??DIVERSITY_FLOOR,m=t.length;if(m<=1)return t;let g=new Map;for(let c of t)for(let t of c.tags??[])g.set(t,(g.get(t)??0)+1);let b=new Map;for(let[t,c]of g)b.set(t,Math.log(m/c));let S=[...t],C=new Map,w=[],repetitionLoad=t=>{let c=0;for(let u of t.tags??[]){let t=C.get(u);t&&(c+=(b.get(u)??0)*t)}return c};for(;S.length>0;){let t=0,c=-1/0,m=1,g=0;for(let b=0;b<S.length;b++){let C=S[b],w=repetitionLoad(C),T=w>0?Math.max(d,1/(1+u*w)):1,E=C.score*T;E>c&&(c=E,t=b,m=T,g=w)}let[b]=S.splice(t,1);if(Number.isFinite(b.score)&&m<1){let t=b.score*m;w.push({...b,score:t,provenance:[...b.provenance,{strategy:STRATEGY,strategyId:STRATEGY_ID,strategyName:STRATEGY_NAME,action:`penalized`,score:t,reason:`repeated tags (load ${g.toFixed(2)}) \u2192 \xD7${m.toFixed(2)}`}]})}else w.push(b);for(let t of b.tags??[])C.set(t,(C.get(t)??0)+1)}return w}function registerPipelineForDebug(t){_activePipeline=t}function getActivePipeline(){return _activePipeline}function clearRunHistory(){runHistory.length=0}function getOrigin(t){let c=t.provenance[0];if(!c)return`unknown`;let u=c.reason?.toLowerCase()||``,d=c.strategy?.toLowerCase()||``;return u.includes(`new card`)||d.includes(`elo`)?`new`:u.includes(`review`)||d.includes(`srs`)?`review`:`unknown`}function captureRun(t){let c={...t,runId:`run-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date};runHistory.unshift(c),runHistory.length>MAX_RUNS&&runHistory.pop()}function parseCardElo(t){let c=t.find(t=>t.strategy===`elo`);if(!c?.reason)return;let u=c.reason.match(/card:\s*(\d+)/);return u?parseInt(u[1],10):void 0}function buildRunReport(t,c,u,d,m,g,b,S,C,w){let T=new Set(S.map(t=>t.cardId)),toReport=t=>({cardId:t.cardId,courseId:t.courseId,origin:getOrigin(t),generator:t.provenance[0]?.strategyName||t.provenance[0]?.strategy,finalScore:t.score,cardElo:parseCardElo(t.provenance),provenance:t.provenance,tags:t.tags,selected:T.has(t.cardId)}),E=[],D=[],O=[],yr=0;for(let t of b)T.has(t.cardId)?E.push(toReport(t)):yr<DISCARDED_KEEP_TOP?(D.push(toReport(t)),yr++):O.push(t);let br=[...E,...D],xr;if(O.length>0){let t=1/0,c=-1/0,u=1/0,d=-1/0,m=!1;for(let g of O){g.score<t&&(t=g.score),g.score>c&&(c=g.score);let b=parseCardElo(g.provenance);b!==void 0&&(m=!0,b<u&&(u=b),b>d&&(d=b))}let g=m?`, ELO ${u}\u2013${d}`:``;xr={count:O.length,scoreRange:[t,c],eloRange:m?[u,d]:void 0,note:`${O.length} additional candidate(s) scored below the top ${DISCARDED_KEEP_TOP} near-misses and were not retained (score ${t.toExponential(2)}\u2013${c.toExponential(2)}${g}). Likely ELO-window pull remnants filtered out by hierarchy/lesson/priority gates.`}}let Sr=S.filter(t=>getOrigin(t)===`review`).length,Cr=S.filter(t=>getOrigin(t)===`new`).length;return{courseId:t,courseName:c,userElo:C,generatorName:u,generators:d,generatedCount:m,filters:g,hints:w,finalCount:S.length,reviewsSelected:Sr,newSelected:Cr,cards:br,discardedTail:xr}}function formatProvenance(t){return t.map(t=>` ${t.action===`generated`?`🎲`:t.action===`boosted`?`⬆️`:t.action===`penalized`?`⬇️`:`➡️`} ${t.strategyName}: ${t.score.toFixed(3)} - ${t.reason}`).join(`
|
|
98
98
|
`)}function printRunSummary(t){if(console.group(`\u{1F50D} Pipeline Run: ${t.courseId} (${t.courseName||`unnamed`})`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`User ELO: ${t.userElo??`unknown`}`),logger.info(`Generator: ${t.generatorName} \u2192 ${t.generatedCount} candidates`),t.generators&&t.generators.length>0){console.group(`Generator breakdown:`);for(let c of t.generators)logger.info(` ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews, top: ${c.topScore.toFixed(2)})`);console.groupEnd()}if(t.filters.length>0){console.group(`Filter impact:`);for(let c of t.filters)logger.info(` ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`);console.groupEnd()}logger.info(`Result: ${t.finalCount} cards selected (${t.newSelected} new, ${t.reviewsSelected} reviews)`),console.groupEnd()}function escapeHtml(t){return t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}function escapeAttr(t){return escapeHtml(t).replace(/"/g,`"`)}function copyTextToClipboard(t,c){let done=()=>{if(!c)return;let t=c.textContent??`Copy`;c.textContent=`Copied!`,c.classList.add(`copied`),setTimeout(()=>{c.textContent=t,c.classList.remove(`copied`)},1200)},fallback=()=>{let c=document.createElement(`textarea`);c.value=t,c.style.position=`fixed`,c.style.opacity=`0`,document.body.appendChild(c),c.select();try{document.execCommand(`copy`)}catch(t){logger.warn(`[Pipeline Debug] Copy failed: ${t}`)}document.body.removeChild(c),done()};navigator.clipboard?.writeText?navigator.clipboard.writeText(t).then(done).catch(fallback):fallback()}function renderUI(){if(!_uiContainer)return;let t=runHistory,c=_selectedRunIndex===null?null:t[_selectedRunIndex],u=`
|
|
99
99
|
#sk-pipeline-debugger {
|
|
@@ -364,7 +364,7 @@ ${g.rows.map(t=>` ${t.id}-${t.key}
|
|
|
364
364
|
message: ${c.message}`),{status:Status.error,message:`Error adding note to course. ${t.reason||c.message}`}}}async getCourseDoc(t,c){return await this.db.get(t,c??{})}async getCourseDocs(t,c={}){return await this.db.allDocs({...c,keys:t})}getNavigationStrategy(t){if(logger.debug(`[courseDB] Getting navigation strategy: ${t}`),t==``){let t={_id:`NAVIGATION_STRATEGY-ELO`,docType:`NAVIGATION_STRATEGY`,name:`ELO`,description:`ELO-based navigation strategy for ordering content by difficulty`,implementingClass:`elo`,course:this.id,serializedData:``};return Promise.resolve(t)}else return this.db.get(t)}async getAllNavigationStrategies(){let t=DocTypePrefixes.NAVIGATION_STRATEGY;return(await this.db.allDocs({startkey:t,endkey:`${t}\uFFF0`,include_docs:!0})).rows.map(t=>t.doc)}async addNavigationStrategy(t){return logger.debug(`[courseDB] Adding navigation strategy: ${t._id}`),this.invalidateNavigatorCache(),this.remoteDB.put(t).then(()=>{})}updateNavigationStrategy(t,c){return logger.debug(`[courseDB] Updating navigation strategy: ${t}`),logger.debug(JSON.stringify(c)),Promise.resolve()}async createNavigator(t){try{let c=await this.getAllNavigationStrategies();if(c.length===0)return logger.debug(`[courseDB] No strategy documents found, using default Pipeline(Composite(ELO, SRS), [eloDistanceFilter])`),createDefaultPipeline(t,this);let{pipeline:u,generatorStrategies:d,filterStrategies:m,warnings:g}=await new PipelineAssembler().assemble({strategies:c,user:t,course:this});for(let t of g)logger.warn(`[PipelineAssembler] ${t}`);return u?(logger.debug(`[courseDB] Using assembled pipeline with ${d.length} generator(s) and ${m.length} filter(s)`),u):(logger.debug(`[courseDB] Pipeline assembly failed, using default pipeline`),createDefaultPipeline(t,this))}catch(t){let c=t instanceof Error?`${t.message}
|
|
365
365
|
${t.stack}`:JSON.stringify(t);throw logger.error(`[courseDB] Error creating navigator: ${c}`),t}}setEphemeralHints(t){this._pendingHints=t}async getWeightedCards(t){let c=await this._getCurrentUser();try{let{navigator:u}=await this._getCachedNavigator(c);return this._pendingHints&&(u.setEphemeralHints(this._pendingHints),this._pendingHints=null),await u.getWeightedCards(t)}catch(t){throw logger.error(`[courseDB] Error getting weighted cards: ${t}`),t}}async _getCachedNavigator(t){let c=t.getUsername(),u=Date.now();if(this._cachedNavigator&&this._cachedNavigator.userId===c&&u-this._cachedNavigator.builtAt<this._navigatorTtlMs)return{navigator:this._cachedNavigator.navigator,cacheStatus:`hit`};let d=await this.createNavigator(t);return this._cachedNavigator={navigator:d,userId:c,builtAt:u},{navigator:d,cacheStatus:`miss`}}invalidateNavigatorCache(){this._cachedNavigator=null}async getCardsCenteredAtELO(t={limit:99,elo:`user`},c){let u;if(t.elo===`user`){let t=await this._getCurrentUser();u=-1;try{u=EloToNumber((await t.getCourseRegistrationsDoc()).courses.find(t=>t.courseID===this.id).elo)}catch{u=1e3}}else if(t.elo===`random`){let t=await GET_CACHED(`elo-bounds-${this.id}`,()=>this.getELOBounds());u=Math.round(t.low+Math.random()*(t.high-t.low))}else u=t.elo;let d=Math.max(2e3,t.limit*4),m=Date.now(),g=`hit`;if(!this._eloPoolCache||m-this._eloPoolCache.fetchedAt>this._eloPoolTtlMs){let t=await this.getCardsByELO(u,d);t.length>0&&(this._eloPoolCache={rows:t,fetchedAt:m}),g=`miss`}let rankAgainstCurrentElo=()=>{let t=this._eloPoolCache?.rows??[];return(c?t.filter(t=>c(t)):t).map(t=>({...t})).sort((t,c)=>Math.abs((t.elo??u)-u)-Math.abs((c.elo??u)-u))},b=rankAgainstCurrentElo();if(b.length<t.limit&&(g===`hit`||!this._eloPoolCache)){let t=await this.getCardsByELO(u,d);t.length>0&&(this._eloPoolCache={rows:t,fetchedAt:m}),b=rankAgainstCurrentElo(),g=`refresh`}let S=[];for(;S.length<t.limit&&b.length>0;){let t=randIntWeightedTowardZero(b.length),c=b.splice(t,1)[0];S.push(c)}return S.map(t=>({courseID:this.id,cardID:t.cardID,contentSourceType:`course`,contentSourceID:this.id,elo:t.elo,status:`new`}))}async searchCards(t){logger.log(`[CourseDB ${this.id}] Searching for: "${t}"`);let c;try{c=await this.db.find({selector:{docType:`DISPLAYABLE_DATA`,"data.0.data":{$regex:`.*${t}.*`}}}),logger.log(`[CourseDB ${this.id}] Regex search on data[0].data successful`)}catch(u){logger.log(`[CourseDB ${this.id}] Regex search failed, falling back to manual search:`,u);let d=await this.db.find({selector:{docType:`DISPLAYABLE_DATA`}});logger.log(`[CourseDB ${this.id}] Retrieved ${d.docs.length} documents for manual filtering`),c={docs:d.docs.filter(c=>{let u=JSON.stringify(c).toLowerCase().includes(t.toLowerCase());return u&&logger.log(`[CourseDB ${this.id}] Manual match found in document: ${c._id}`),u})}}if(logger.log(`[CourseDB ${this.id}] Found ${c.docs.length} displayable data documents`),c.docs.length===0){let t=await this.db.find({selector:{docType:`DISPLAYABLE_DATA`},limit:5});logger.log(`[CourseDB ${this.id}] Sample displayable data:`,t.docs.map(t=>({id:t._id,docType:t.docType,dataStructure:t.data?Object.keys(t.data):`no data field`,dataContent:t.data,fullDoc:t})))}let u=[];for(let t of c.docs){let c=await this.db.find({selector:{docType:`CARD`,id_displayable_data:{$in:[t._id]}}});logger.log(`[CourseDB ${this.id}] Displayable data ${t._id} linked to ${c.docs.length} cards`),u.push(...c.docs)}return logger.log(`[CourseDB ${this.id}] Total cards found: ${u.length}`),u}async find(t){return this.db.find(t)}}}}),init_classroomDB2=__esm({"src/impl/couch/classroomDB.ts"(){"use strict";init_factory(),init_logger(),init_pouchdb_setup(),init_couch(),init_courseDB(),classroomLookupDBTitle=`classdb-lookup`,CLASSROOM_CONFIG=`ClassroomConfig`,ClassroomDBBase=class{constructor(){_defineProperty$2(this,`_id`,void 0),_defineProperty$2(this,`_db`,void 0),_defineProperty$2(this,`_cfg`,void 0),_defineProperty$2(this,`_initComplete`,!1),_defineProperty$2(this,`_content_prefix`,`content`)}get _content_searchkeys(){return getStartAndEndKeys2(this._content_prefix)}async getAssignedContent(){return logger.info(`Getting assigned content...`),(await this._db.allDocs({startkey:this._content_prefix,endkey:this._content_prefix+``,include_docs:!0})).rows.map(t=>t.doc)}getContentId(t){return t.type===`tag`?`${this._content_prefix}-${t.courseID}-${t.tagID}`:`${this._content_prefix}-${t.courseID}`}get ready(){return this._initComplete}getConfig(){return this._cfg}},StudentClassroomDB=class _StudentClassroomDB extends ClassroomDBBase{constructor(t,c){super(),_defineProperty$2(this,`userMessages`,void 0),_defineProperty$2(this,`_user`,void 0),this._id=t,this._user=c}async init(){let t=`classdb-student-${this._id}`;this._db=new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+t,createPouchDBConfig());try{this._cfg=await this._db.get(CLASSROOM_CONFIG),this.userMessages=this._db.changes({since:`now`,live:!0,include_docs:!0}),this._initComplete=!0;return}catch(t){throw Error(`Error in StudentClassroomDB constructor: ${JSON.stringify(t)}`)}}static async factory(t,c){let u=new _StudentClassroomDB(t,c);return await u.init(),u}setChangeFcn(t){this.userMessages.on(`change`,t)}async getWeightedCards(t){let c=[],u=(await this._user.getPendingReviews()).filter(t=>t.scheduledFor===`classroom`&&t.schedulingAgentId===this._id);for(let t of u)c.push({cardId:t.cardId,courseId:t.courseId,score:1,reviewID:t._id,provenance:[{strategy:`classroom`,strategyName:`Classroom`,strategyId:`CLASSROOM`,action:`generated`,score:1,reason:`Classroom scheduled review`}]});let d=await this._user.getActiveCards(),m=new Set(d.map(t=>t.cardID)),g=hooks.utc(),b=(await this.getAssignedContent()).filter(t=>g.isAfter(hooks.utc(t.activeOn,REVIEW_TIME_FORMAT2)));logger.info(`[StudentClassroomDB] Due content: ${JSON.stringify(b)}`);for(let u of b)if(u.type===`course`){let{cards:d}=await new CourseDB(u.courseID,async()=>this._user).getWeightedCards(t);for(let t of d)m.has(t.cardId)||c.push({...t,provenance:[...t.provenance,{strategy:`classroom`,strategyName:`Classroom`,strategyId:`CLASSROOM`,action:`passed`,score:t.score,reason:`Assigned via classroom from course ${u.courseID}`}]})}else if(u.type===`tag`){let t=await getTag(u.courseID,u.tagID);for(let d of t.taggedCards)m.has(d)||c.push({cardId:d,courseId:u.courseID,score:1,provenance:[{strategy:`classroom`,strategyName:`Classroom`,strategyId:`CLASSROOM`,action:`generated`,score:1,reason:`Classroom assigned tag: ${u.tagID}, new card`}]})}else u.type===`card`&&(m.has(u.cardID)||c.push({cardId:u.cardID,courseId:u.courseID,score:1,provenance:[{strategy:`classroom`,strategyName:`Classroom`,strategyId:`CLASSROOM`,action:`generated`,score:1,reason:`Classroom assigned card, new card`}]}));return logger.info(`[StudentClassroomDB] New cards from classroom ${this._cfg.name}: ${c.length} total (reviews + new)`),{cards:c.sort((t,c)=>c.score-t.score).slice(0,t)}}},TeacherClassroomDB=class _TeacherClassroomDB extends ClassroomDBBase{constructor(t){super(),_defineProperty$2(this,`_stuDb`,void 0),this._id=t}async init(){let t=`classdb-teacher-${this._id}`,c=`classdb-student-${this._id}`;this._db=new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+t,createPouchDBConfig()),this._stuDb=new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+c,createPouchDBConfig());try{return this._db.get(CLASSROOM_CONFIG).then(t=>{this._cfg=t,this._initComplete=!0}).then(()=>{})}catch(t){throw Error(`Error in TeacherClassroomDB constructor: ${JSON.stringify(t)}`)}}static async factory(t){let c=new _TeacherClassroomDB(t);return await c.init(),c}async removeContent(t){let c=this.getContentId(t);try{let t=await this._db.get(c);await this._db.remove(t),this._db.replicate.to(this._stuDb,{doc_ids:[c]})}catch(t){logger.error(`Failed to remove content:`,c,t)}}async assignContent(t){let c,u=this.getContentId(t);return c=t.type===`tag`?await this._db.put({courseID:t.courseID,tagID:t.tagID,type:`tag`,_id:u,assignedBy:t.assignedBy,assignedOn:hooks.utc(),activeOn:t.activeOn||hooks.utc()}):await this._db.put({courseID:t.courseID,type:`course`,_id:u,assignedBy:t.assignedBy,assignedOn:hooks.utc(),activeOn:t.activeOn||hooks.utc()}),c.ok?(this._db.replicate.to(this._stuDb,{doc_ids:[u]}),!0):!1}},ClassroomLookupDB=()=>new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+classroomLookupDBTitle,{skip_setup:!0})}}),init_adminDB2=__esm({"src/impl/couch/adminDB.ts"(){"use strict";init_pouchdb_setup(),init_factory(),init_couch(),init_classroomDB2(),init_courseLookupDB(),init_logger(),AdminDB=class{constructor(){_defineProperty$2(this,`usersDB`,void 0),this.usersDB=new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+`_users`,createPouchDBConfig())}async getUsers(){return(await this.usersDB.allDocs({include_docs:!0,...getStartAndEndKeys2(`org.couchdb.user:`)})).rows.map(t=>t.doc)}async getCourses(){let t=await CourseLookup.allCourseWare();return await Promise.all(t.map(t=>getCredentialledCourseConfig(t._id)))}async removeCourse(t){let c=await CourseLookup.delete(t),u=await getCredentialledCourseConfig(t);u.deleted=!0;let d=await updateCredentialledCourseConfig(t,u);return{ok:c.ok&&d.ok,id:c.id,rev:c.rev}}async getClassrooms(){let t=(await ClassroomLookupDB().allDocs({include_docs:!0})).rows.map(t=>t.doc.uuid);logger.debug(t.join(`, `));let c=[];for(let u=0;u<t.length;u++)try{let d=await TeacherClassroomDB.factory(t[u]);c.push(d)}catch(c){let d=c;d.error&&d.error===`not_found`&&logger.warn(`db ${t[u]} not found`)}return c.map(t=>({...t.getConfig(),_id:t._id}))}}}}),CourseSyncService_exports={},__export(CourseSyncService_exports,{CourseSyncService:()=>CourseSyncService}),init_CourseSyncService=__esm({"src/impl/couch/CourseSyncService.ts"(){"use strict";var t;init_pouchdb_setup(),init_couch(),init_logger(),DEFAULT_REPLICATION={batchSize:1e3,batchesLimit:5},CourseSyncService=(t=class _CourseSyncService{constructor(){_defineProperty$2(this,`entries`,new Map),_defineProperty$2(this,`replicationOptions`,DEFAULT_REPLICATION)}static getInstance(){return _CourseSyncService.instance||(_CourseSyncService.instance=new _CourseSyncService),_CourseSyncService.instance}configure(t){t.replication&&(this.replicationOptions={...DEFAULT_REPLICATION,...t.replication},logger.info(`[CourseSyncService] Replication configured: batch_size=${this.replicationOptions.batchSize}, batches_limit=${this.replicationOptions.batchesLimit}`))}static resetInstance(){if(_CourseSyncService.instance){for(let[,t]of _CourseSyncService.instance.entries)t.localDB&&t.localDB.close().catch(()=>{});_CourseSyncService.instance.entries.clear()}_CourseSyncService.instance=null}async ensureSynced(t,c){let u=this.entries.get(t);if(u?.status.state===`ready`&&u.localDB){if(!await this.isLocalEpochStale(t,u.localDB))return;logger.info(`[CourseSyncService] Remote DB epoch changed for course ${t} \u2014 destroying stale local replica`);try{await u.localDB.destroy()}catch{}u.localDB=null,u.readyPromise=null}if(u?.status.state===`disabled`)return;if(u?.readyPromise)return u.readyPromise;let d={localDB:null,status:{state:`not-started`},readyPromise:null};return this.entries.set(t,d),d.readyPromise=this.performSync(t,d,c),d.readyPromise}getLocalDB(t){let c=this.entries.get(t);return c?.status.state===`ready`&&c.localDB?c.localDB:null}isReady(t){return this.entries.get(t)?.status.state===`ready`}getStatus(t){return this.entries.get(t)?.status??{state:`not-started`}}async performSync(t,c,u){try{if(!u&&(c.status={state:`checking-config`},!await this.checkLocalSyncEnabled(t))){c.status={state:`disabled`},c.readyPromise=null,logger.debug(`[CourseSyncService] Local sync disabled for course ${t}`);return}c.status={state:`syncing`};let d=this.localDBName(t),m=new pouchdb_setup_default(d);await this.isLocalEpochStale(t,m)&&(logger.info(`[CourseSyncService] Stale local DB detected for course ${t} \u2014 destroying before sync`),await m.destroy(),m=new pouchdb_setup_default(d)),c.localDB=m;let g=this.getRemoteDB(t),b=Date.now();logger.info(`[CourseSyncService] Starting one-shot replication for course ${t} (batch_size=${this.replicationOptions.batchSize}, batches_limit=${this.replicationOptions.batchesLimit})`);let S=await this.replicate(g,m),C=Date.now()-b;logger.info(`[CourseSyncService] Replication complete for course ${t}: ${S.docs_written} docs in ${C}ms`),c.status={state:`warming-views`};let w=Date.now();await this.warmViewIndices(m);let T=Date.now()-w;logger.info(`[CourseSyncService] View indices warmed for course ${t} in ${T}ms`),c.status={state:`ready`,docsReplicated:S.docs_written,syncTimeMs:C,viewWarmTimeMs:T}}catch(u){let d=u instanceof Error?u.message:String(u);if(logger.error(`[CourseSyncService] Sync failed for course ${t}: ${d}`),c.status={state:`error`,error:d},c.readyPromise=null,c.localDB){try{await c.localDB.destroy()}catch{}c.localDB=null}}}async checkLocalSyncEnabled(t){try{return(await this.getRemoteDB(t).get(`CourseConfig`)).localSync?.enabled===!0}catch(c){return logger.warn(`[CourseSyncService] Could not read CourseConfig for ${t}, assuming local sync disabled: ${c}`),!1}}replicate(t,c){return new Promise((u,d)=>{pouchdb_setup_default.replicate(t,c,{batch_size:this.replicationOptions.batchSize,batches_limit:this.replicationOptions.batchesLimit}).on(`complete`,t=>{u(t)}).on(`error`,t=>{d(t)})})}async warmViewIndices(t){for(let c of[`elo`,`getTags`])try{await t.query(c,{limit:1}),logger.debug(`[CourseSyncService] Warmed view index: ${c}`)}catch(t){logger.debug(`[CourseSyncService] Could not warm view ${c}: ${t}`)}}async isLocalEpochStale(t,c){try{let u=await this.getRemoteDB(t).get(`db-epoch`),d=null;try{d=await c.get(`db-epoch`)}catch{return!0}return u.epoch!==d.epoch}catch{return!1}}getRemoteDB(t){return getCourseDB2(t)}localDBName(t){return`coursedb-local-${t}`}},_defineProperty$2(t,`instance`,null),t)}}),init_auth=__esm({"src/impl/couch/auth.ts"(){"use strict";init_factory(),init_logger()}}),CouchDBSyncStrategy_exports={},__export(CouchDBSyncStrategy_exports,{CouchDBSyncStrategy:()=>CouchDBSyncStrategy}),init_CouchDBSyncStrategy=__esm({"src/impl/couch/CouchDBSyncStrategy.ts"(){"use strict";init_factory(),init_types_legacy(),init_logger(),init_common(),init_pouchdb_setup(),init_couch(),init_auth(),log3=t=>{logger.info(t)},CouchDBSyncStrategy=class{constructor(){_defineProperty$2(this,`syncHandle`,void 0)}setupRemoteDB(t){return t===GuestUsername||t.startsWith(GuestUsername)?getLocalUserDB(t):this.getUserDB(t)}getWriteDB(t){return t===GuestUsername||t.startsWith(GuestUsername)?getLocalUserDB(t):this.getUserDB(t)}startSync(t,c){t!==c&&(this.syncHandle=pouchdb_setup_default.sync(t,c,{live:!0,retry:!0}))}stopSync(){this.syncHandle&&(this.syncHandle.cancel(),this.syncHandle=void 0)}canCreateAccount(){return!0}canAuthenticate(){return!0}async createAccount(t,c){let u=await this.getCurrentUsername(),d=u.startsWith(GuestUsername);d&&logger.info(`Creating account for funnel user ${u} -> ${t}`);try{let m=await this.getRemoteCouchRootDB().signUp(t,c);if(m.ok){log3(`CREATEACCOUNT: Successfully created account for ${t}`);try{let t=await this.getRemoteCouchRootDB().logOut();log3(`CREATEACCOUNT: logged out: ${t.ok}`)}catch{}let m=await this.getRemoteCouchRootDB().logIn(t,c);if(log3(`CREATEACCOUNT: logged in as new user: ${m.ok}`),m.ok){if(d){logger.info(`Migrating data from funnel account ${u} to ${t}`);let c=await this.migrateFunnelData(u,t);c.success||logger.warn(`Migration failed: ${c.error}`)}return{status:Status.ok,error:void 0}}else return{status:Status.error,error:`Failed to log in after account creation`}}else return logger.warn(`Signup not OK: ${JSON.stringify(m)}`),{status:Status.error,error:`Account creation failed`}}catch(t){return t.reason===`Document update conflict.`?{status:Status.error,error:`This username is taken!`}:(logger.error(`Error on signup: ${JSON.stringify(t)}`),{status:Status.error,error:t.message||`Unknown error during account creation`})}}async authenticate(t,c){try{return(await this.getRemoteCouchRootDB().logIn(t,c)).ok?(log3(`Successfully logged in as ${t}`),{ok:!0}):(log3(`Login failed for ${t}`),{ok:!1,error:`Invalid username or password`})}catch(c){return logger.error(`Authentication error for ${t}:`,c),{ok:!1,error:c.message||`Authentication failed`}}}async logout(){try{let t=await this.getRemoteCouchRootDB().logOut();return{ok:t.ok,error:t.ok?void 0:`Logout failed`}}catch(t){return logger.error(`Logout error:`,t),{ok:!1,error:t.message||`Logout failed`}}}async getCurrentUsername(){logger.log(`[funnel] CouchDBSyncStrategy.getCurrentUsername() called`);try{let t=await getLoggedInUsername();return logger.log(`[funnel] getLoggedInUsername() returned:`,t),t}catch(t){logger.log(`[funnel] getLoggedInUsername() failed, calling accomodateGuest()`),logger.log(`[funnel] Error was:`,t);let c=accomodateGuest();return logger.log(`[funnel] accomodateGuest() returned:`,c),c.username}}async migrateFunnelData(t,c){try{logger.info(`Starting data migration from ${t} to ${c}`);let u=getLocalUserDB(t),d=getLocalUserDB(c),m=await u.allDocs({include_docs:!0});logger.info(`Found ${m.rows.length} documents in funnel account`);let g=m.rows.filter(t=>!t.id.startsWith(`_design/`)).map(t=>({...t.doc,_rev:void 0}));g.length>0?(await d.bulkDocs(g),logger.info(`Successfully migrated ${g.length} documents from ${t} to ${c}`)):logger.info(`No documents to migrate from funnel account`);try{await u.destroy(),logger.info(`Destroyed consumed guest DB for ${t}`)}catch(c){logger.warn(`Failed to destroy consumed guest DB for ${t} (non-fatal): ${c instanceof Error?c.message:String(c)}`)}return{success:!0}}catch(t){return logger.error(`Migration failed:`,t),{success:!1,error:t instanceof Error?t.message:`Unknown error`}}}getRemoteCouchRootDB(){let t=ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+`skuilder`;try{return new pouchdb_setup_default(t,{skip_setup:!0})}catch(t){throw logger.error(`Failed to initialize remote CouchDB connection:`,t),Error(`Failed to initialize CouchDB: ${JSON.stringify(t)}`)}}getUserDB(t){let c=!1,u=`userdb-${hexEncode(t)}`;return log3(`Fetching user database: ${u} (${t})`),new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+u,createPouchDBConfig())}}}}),init_couch=__esm({"src/impl/couch/index.ts"(){"use strict";init_factory(),init_types_legacy(),init_logger(),init_pouchdb_setup(),init_contentSource(),init_adminDB2(),init_classroomDB2(),init_courseAPI(),init_courseDB(),init_CourseSyncService(),init_CouchDBSyncStrategy(),isBrowser=typeof window<`u`,isBrowser&&(window.process=import_browser.default),GUEST_LOCAL_DB=`userdb-${GuestUsername}`,new pouchdb_setup_default(GUEST_LOCAL_DB),pouchDBincludeCredentialsConfig={fetch(t,c){return c.credentials=`include`,pouchdb_setup_default.fetch(t,c)}},REVIEW_TIME_FORMAT2=`YYYY-MM-DD--kk:mm:ss-SSS`}}),init_BaseUserDB=__esm({"src/impl/common/BaseUserDB.ts"(){"use strict";var t;init_core(),init_util(),init_types_legacy(),init_logger(),init_userDBHelpers(),init_updateQueue(),init_user_course_relDB(),init_couch(),log4=t=>{logger.info(t)},BaseUser=(t=class _BaseUser{static Dummy(t){return new _BaseUser(`Me`,t)}getUsername(){return this._username}isLoggedIn(){return!this._username.startsWith(GuestUsername)}remote(){return this.remoteDB}async createAccount(t,c){if(!this.syncStrategy.canCreateAccount())throw Error(`Account creation not supported by current sync strategy`);if(!this._username.startsWith(GuestUsername))throw Error(`Cannot create a new account while logged in:
|
|
366
366
|
Currently logged-in as ${this._username}.`);let u=await this.syncStrategy.createAccount(t,c);if(u.status===Status.ok){log4(`Account created successfully, updating username to ${t}`),this._username=t;try{localStorage.removeItem(`sk-guest-uuid`)}catch(t){logger.warn(`localStorage not available (Node.js environment):`,t)}await this.init()}return{status:u.status,error:u.error||``}}async login(t,c){if(!this.syncStrategy.canAuthenticate())throw Error(`Authentication not supported by current sync strategy`);if(!this._username.startsWith(GuestUsername)&&this._username!=t){if(this._username!=t)throw Error(`Cannot change accounts while logged in.
|
|
367
|
-
Log out of account ${this.getUsername()} before logging in as ${t}.`);logger.warn(`User ${this._username} is already logged in, but executing login again.`)}let u=await this.syncStrategy.authenticate(t,c);if(u.ok){log4(`Logged in as ${t}`),this._username=t;try{localStorage.removeItem(`sk-guest-uuid`)}catch(t){logger.warn(`localStorage not available (Node.js environment):`,t)}await this.init()}return u}async resetUserData(){if(this.syncStrategy.canAuthenticate())return{status:Status.error,error:`Reset user data is only available for local-only mode. Use logout instead for remote sync.`};try{let t=getLocalUserDB(this._username),c=(await t.allDocs({include_docs:!1})).rows.filter(t=>{let c=t.id;return c.startsWith(DocTypePrefixes.CARDRECORD)||c.startsWith(DocTypePrefixes.SCHEDULED_CARD)||c.startsWith(DocTypePrefixes.STRATEGY_STATE)||c.startsWith(DocTypePrefixes.USER_OUTCOME)||c.startsWith(DocTypePrefixes.STRATEGY_LEARNING_STATE)||c===_BaseUser.DOC_IDS.COURSE_REGISTRATIONS||c===_BaseUser.DOC_IDS.CLASSROOM_REGISTRATIONS||c===_BaseUser.DOC_IDS.CONFIG}).map(t=>({_id:t.id,_rev:t.value.rev,_deleted:!0}));return c.length>0&&await t.bulkDocs(c),await this.init(),{status:Status.ok}}catch(t){return logger.error(`Failed to reset user data:`,t),{status:Status.error,error:t instanceof Error?t.message:`Unknown error during reset`}}}async logout(){if(!this.syncStrategy.canAuthenticate())return this._username=await this.syncStrategy.getCurrentUsername(),await this.init(),{ok:!0};let t=await this.syncStrategy.logout();try{localStorage.removeItem(`sk-guest-uuid`)}catch(t){logger.warn(`localStorage not available (Node.js environment):`,t)}return this._username=await this.syncStrategy.getCurrentUsername(),await this.init(),t}async get(t){return this.localDB.get(t)}update(t,c){return this.updateQueue.update(t,c)}async getCourseRegistrationsDoc(){logger.debug(`Fetching courseRegistrations for ${this.getUsername()}`);let t;try{return await this.localDB.get(_BaseUser.DOC_IDS.COURSE_REGISTRATIONS)}catch(c){if(c.status===404)await this.localDB.put({_id:_BaseUser.DOC_IDS.COURSE_REGISTRATIONS,courses:[],studyWeight:{}}),t=await this.getCourseRegistrationsDoc();else throw Error(`Unexpected error ${JSON.stringify(c)} in getOrCreateCourseRegistrationDoc...`)}return t}async getActiveCourses(){return(await this.getCourseRegistrationsDoc()).courses.filter(t=>t.status===void 0||t.status===`active`)}async getActiveCards(){let t=getStartAndEndKeys(DocTypePrefixes.SCHEDULED_CARD);return(await this.remoteDB.allDocs({startkey:t.startkey,endkey:t.endkey,include_docs:!0})).rows.map(t=>({courseID:t.doc.courseId,cardID:t.doc.cardId}))}async getActivityRecords(){try{let t=await this.getHistory(),c=[];if(!Array.isArray(t))return logger.error(`getHistory did not return an array:`,t),c;let u=0;for(let d=0;d<t.length;d++)try{t[d]&&Array.isArray(t[d].records)&&t[d].records.forEach(t=>{try{if(!t.timeStamp)return;let d;if(typeof t.timeStamp==`object`)if(typeof t.timeStamp.toDate==`function`)d=t.timeStamp.toISOString();else if(t.timeStamp instanceof Date)d=t.timeStamp.toISOString();else{u<3&&(logger.warn(`Unknown timestamp object type:`,t.timeStamp),u++);return}else if(typeof t.timeStamp==`string`){let c=new Date(t.timeStamp);if(isNaN(c.getTime()))return;d=t.timeStamp}else if(typeof t.timeStamp==`number`)d=new Date(t.timeStamp).toISOString();else return;c.push({timeStamp:d,courseID:t.courseID||`unknown`,cardID:t.cardID||`unknown`,timeSpent:t.timeSpent||0,type:`card_view`})}catch{}})}catch(t){logger.error(`Error processing history item:`,t)}return logger.debug(`Found ${c.length} activity records`),c}catch(t){return logger.error(`Error in getActivityRecords:`,t),[]}}async getReviewstoDate(t,c){let u=getStartAndEndKeys(DocTypePrefixes.SCHEDULED_CARD),d=await this.remoteDB.allDocs({startkey:u.startkey,endkey:u.endkey,include_docs:!0});return log4(`Fetching ${this._username}'s scheduled reviews${c?` for course ${c}`:``}.`),d.rows.filter(u=>{if(u.id.startsWith(DocTypePrefixes.SCHEDULED_CARD)){let d=hooks.utc(u.id.substr(DocTypePrefixes.SCHEDULED_CARD.length),REVIEW_TIME_FORMAT);if(t.isAfter(d)&&(c===void 0||u.doc.courseId===c))return!0}}).map(t=>t.doc)}async getReviewsForcast(t){let c=hooks.utc().add(t,`days`);return this.getReviewstoDate(c)}async getPendingReviews(t){let c=hooks.utc();return this.getReviewstoDate(c,t)}async getScheduledReviewCount(t){return(await this.getPendingReviews(t)).length}async getRegisteredCourses(){return(await this.getCourseRegistrationsDoc()).courses.filter(t=>!t.status||t.status===`active`||t.status===`maintenance-mode`)}async getCourseRegDoc(t){let c=(await this.getCourseRegistrationsDoc()).courses.find(c=>c.courseID===t);if(c)return c;throw Error(`Course registration not found for course ID: ${t}`)}async registerForCourse(t,c=!1){return this.getCourseRegistrationsDoc().then(u=>{let d=c?`preview`:`active`;logger.debug(`Registering for ${t} with status: ${d}`);let m={status:d,courseID:t,user:!0,admin:!1,moderator:!1,elo:{global:{score:1e3,count:0},tags:{},misc:{}}};return u.courses.filter(t=>t.courseID===m.courseID).length===0?(log4(`It's a new course registration!`),u.courses.push(m),u.studyWeight[t]=1):u.courses.forEach(c=>{log4(`Found the previously registered course!`),c.courseID===t&&(c.status=d)}),this.localDB.put(u)}).catch(t=>{throw log4(`Registration failed because of: ${JSON.stringify(t)}`),t})}async dropCourse(t,c=`dropped`){return this.getCourseRegistrationsDoc().then(u=>{let d=-1;for(let c=0;c<u.courses.length;c++)u.courses[c].courseID===t&&(d=c);if(d!==-1)delete u.studyWeight[t],u.courses[d].status=c;else throw Error(`User ${this.getUsername()} is not currently registered for course ${t}`);return this.localDB.put(u)})}async getCourseInterface(t){return new UsrCrsData(this,t)}async getUserEditableCourses(){let t=[],c=await this.getCourseRegistrationsDoc();return t=t.concat(c.courses.map(t=>t.courseID)),await Promise.all(t.map(async t=>await getCredentialledCourseConfig(t)))}async getConfig(){let t={_id:_BaseUser.DOC_IDS.CONFIG,darkMode:!1,likesConfetti:!1,sessionTimeLimit:5};try{let t=await this.localDB.get(_BaseUser.DOC_IDS.CONFIG);return logger.debug(`Raw config from DB:`,t),t}catch(c){let u=c;if(u.name&&u.name===`not_found`)return await this.localDB.put(t),this.getConfig();throw logger.error(`Error setting user default config:`,c),Error(`Error returning the user's configuration: ${JSON.stringify(c)}`)}}async setConfig(t){logger.debug(`Setting Config items ${JSON.stringify(t)}`);let c=await this.getConfig(),u=await this.localDB.put({...c,...t});u.ok?logger.debug(`Config items set: ${JSON.stringify(t)}`):logger.error(`Error setting config items: ${JSON.stringify(u)}`)}static async instance(t,c){return c?(_BaseUser._instance=new _BaseUser(c,t),await _BaseUser._instance.init(),_BaseUser._instance):_BaseUser._instance&&_BaseUser._initialized?_BaseUser._instance:_BaseUser._instance?new Promise(t=>{(function waitForUser(){if(_BaseUser._initialized)return t(_BaseUser._instance);setTimeout(waitForUser,50)})()}):(_BaseUser._instance=new _BaseUser(await t.getCurrentUsername(),t),await _BaseUser._instance.init(),_BaseUser._instance)}constructor(t,c){_defineProperty$2(this,`_username`,void 0),_defineProperty$2(this,`syncStrategy`,void 0),_defineProperty$2(this,`localDB`,void 0),_defineProperty$2(this,`remoteDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),_defineProperty$2(this,`updateQueue`,void 0),_BaseUser._initialized=!1,this._username=t,this.syncStrategy=c,this.setDBandQ()}setDBandQ(){this.localDB=getLocalUserDB(this._username),this.remoteDB=this.syncStrategy.setupRemoteDB(this._username),this.writeDB=this.syncStrategy.getWriteDB?this.syncStrategy.getWriteDB(this._username):this.localDB,this.updateQueue=new UpdateQueue(this.localDB,this.writeDB)}async init(){if(_BaseUser._initialized=!1,this._username===`admin`){_BaseUser._initialized=!0;return}this.setDBandQ(),this.syncStrategy.startSync(this.localDB,this.remoteDB),this.applyDesignDocs().catch(t=>{log4(`Error in applyDesignDocs background task: ${t}`),t&&typeof t==`object`&&log4(`Full error details in applyDesignDocs: ${JSON.stringify(t)}`)}),this.deduplicateReviews().catch(t=>{log4(`Error in deduplicateReviews background task: ${t}`),t&&typeof t==`object`&&log4(`Full error details in background task: ${JSON.stringify(t)}`)}),_BaseUser._initialized=!0}async applyDesignDocs(){if(log4(`Starting applyDesignDocs for user: ${this._username}`),log4(`Remote DB name: ${this.remoteDB.name||`unknown`}`),this._username===`admin`){log4(`Skipping design docs for admin user`);return}log4(`Applying ${_BaseUser.designDocs.length} design docs`);for(let t of _BaseUser.designDocs){log4(`Applying design doc: ${t._id}`);try{try{let c=await this.remoteDB.get(t._id);await this.remoteDB.put({...t,_rev:c._rev})}catch(c){if(c?.name===`not_found`)await this.remoteDB.put(t);else throw c}}catch(c){if(c.name&&c.name===`conflict`)logger.warn(`Design doc ${t._id} update conflict - will retry`),await new Promise(t=>setTimeout(t,1e3)),await this.applyDesignDoc(t);else throw logger.error(`Failed to apply design doc ${t._id}:`,c),c}}}async applyDesignDoc(t,c=3){try{let c=await this.remoteDB.get(t._id);await this.remoteDB.put({...t,_rev:c._rev})}catch(u){if(u?.name===`conflict`&&c>0)return await new Promise(t=>setTimeout(t,1e3)),this.applyDesignDoc(t,c-1);throw u}}async putCardRecord(t){let c=getCardHistoryID(t.courseID,t.cardID);t.timeStamp=hooks.utc(t.timeStamp).toString();try{let u=await this.update(c,function(c){return c.records.push(t),c.bestInterval=c.bestInterval||0,c.lapses=c.lapses||0,c.streak=c.streak||0,c});return u.records=u.records.map(t=>{let c={...t};return c.timeStamp=hooks.utc(t.timeStamp),c}),u}catch(u){let d=u;if(d.status===404)try{let u={_id:c,cardID:t.cardID,courseID:t.courseID,records:[t],lapses:0,streak:0,bestInterval:0},d=await this.writeDB.put(u);return{...u,_rev:d.rev}}catch(t){throw Error(`Failed to create CardHistory for ${c}. Reason: ${t}`)}else throw Error(`putCardRecord failed because of:
|
|
367
|
+
Log out of account ${this.getUsername()} before logging in as ${t}.`);logger.warn(`User ${this._username} is already logged in, but executing login again.`)}let u=await this.syncStrategy.authenticate(t,c);if(u.ok){log4(`Logged in as ${t}`),this._username=t;try{localStorage.removeItem(`sk-guest-uuid`)}catch(t){logger.warn(`localStorage not available (Node.js environment):`,t)}await this.init()}return u}async resetUserData(){if(this.syncStrategy.canAuthenticate())return{status:Status.error,error:`Reset user data is only available for local-only mode. Use logout instead for remote sync.`};try{let t=getLocalUserDB(this._username),c=(await t.allDocs({include_docs:!1})).rows.filter(t=>{let c=t.id;return c.startsWith(DocTypePrefixes.CARDRECORD)||c.startsWith(DocTypePrefixes.SCHEDULED_CARD)||c.startsWith(DocTypePrefixes.STRATEGY_STATE)||c.startsWith(DocTypePrefixes.USER_OUTCOME)||c.startsWith(DocTypePrefixes.STRATEGY_LEARNING_STATE)||c===_BaseUser.DOC_IDS.COURSE_REGISTRATIONS||c===_BaseUser.DOC_IDS.CLASSROOM_REGISTRATIONS||c===_BaseUser.DOC_IDS.CONFIG}).map(t=>({_id:t.id,_rev:t.value.rev,_deleted:!0}));return c.length>0&&await t.bulkDocs(c),await this.init(),{status:Status.ok}}catch(t){return logger.error(`Failed to reset user data:`,t),{status:Status.error,error:t instanceof Error?t.message:`Unknown error during reset`}}}async logout(){if(!this.syncStrategy.canAuthenticate())return this._username=await this.syncStrategy.getCurrentUsername(),await this.init(),{ok:!0};let t=await this.syncStrategy.logout();try{localStorage.removeItem(`sk-guest-uuid`)}catch(t){logger.warn(`localStorage not available (Node.js environment):`,t)}return this._username=await this.syncStrategy.getCurrentUsername(),await this.init(),t}async get(t){return this.localDB.get(t)}update(t,c){return this.updateQueue.update(t,c)}async getCourseRegistrationsDoc(){logger.debug(`Fetching courseRegistrations for ${this.getUsername()}`);let t;try{return await this.localDB.get(_BaseUser.DOC_IDS.COURSE_REGISTRATIONS)}catch(c){if(c.status===404)await this.localDB.put({_id:_BaseUser.DOC_IDS.COURSE_REGISTRATIONS,courses:[],studyWeight:{}}),t=await this.getCourseRegistrationsDoc();else throw Error(`Unexpected error ${JSON.stringify(c)} in getOrCreateCourseRegistrationDoc...`)}return t}async getActiveCourses(){return(await this.getCourseRegistrationsDoc()).courses.filter(t=>t.status===void 0||t.status===`active`)}async getActiveCards(){let t=getStartAndEndKeys(DocTypePrefixes.SCHEDULED_CARD);return(await this.remoteDB.allDocs({startkey:t.startkey,endkey:t.endkey,include_docs:!0})).rows.map(t=>({courseID:t.doc.courseId,cardID:t.doc.cardId}))}async getActivityRecords(){try{let t=await this.getHistory(),c=[];if(!Array.isArray(t))return logger.error(`getHistory did not return an array:`,t),c;let u=0;for(let d=0;d<t.length;d++)try{t[d]&&Array.isArray(t[d].records)&&t[d].records.forEach(t=>{try{if(!t.timeStamp)return;let d;if(typeof t.timeStamp==`object`)if(typeof t.timeStamp.toDate==`function`)d=t.timeStamp.toISOString();else if(t.timeStamp instanceof Date)d=t.timeStamp.toISOString();else{u<3&&(logger.warn(`Unknown timestamp object type:`,t.timeStamp),u++);return}else if(typeof t.timeStamp==`string`){let c=new Date(t.timeStamp);if(isNaN(c.getTime()))return;d=t.timeStamp}else if(typeof t.timeStamp==`number`)d=new Date(t.timeStamp).toISOString();else return;c.push({timeStamp:d,courseID:t.courseID||`unknown`,cardID:t.cardID||`unknown`,timeSpent:t.timeSpent||0,type:`card_view`})}catch{}})}catch(t){logger.error(`Error processing history item:`,t)}return logger.debug(`Found ${c.length} activity records`),c}catch(t){return logger.error(`Error in getActivityRecords:`,t),[]}}async getReviewstoDate(t,c){let u=getStartAndEndKeys(DocTypePrefixes.SCHEDULED_CARD),d=await this.remoteDB.allDocs({startkey:u.startkey,endkey:u.endkey,include_docs:!0});return log4(`Fetching ${this._username}'s scheduled reviews${c?` for course ${c}`:``}.`),d.rows.filter(u=>{if(u.id.startsWith(DocTypePrefixes.SCHEDULED_CARD)){let d=hooks.utc(u.id.substr(DocTypePrefixes.SCHEDULED_CARD.length),REVIEW_TIME_FORMAT);if(t.isAfter(d)&&(c===void 0||u.doc.courseId===c))return!0}}).map(t=>t.doc)}async getReviewsForcast(t,c){let u=hooks.utc().add(t,`days`);return this.getReviewstoDate(u,c)}async getPendingReviews(t){let c=hooks.utc();return this.getReviewstoDate(c,t)}async getScheduledReviewCount(t){return(await this.getPendingReviews(t)).length}async getRegisteredCourses(){return(await this.getCourseRegistrationsDoc()).courses.filter(t=>!t.status||t.status===`active`||t.status===`maintenance-mode`)}async getCourseRegDoc(t){let c=(await this.getCourseRegistrationsDoc()).courses.find(c=>c.courseID===t);if(c)return c;throw Error(`Course registration not found for course ID: ${t}`)}async registerForCourse(t,c=!1){return this.getCourseRegistrationsDoc().then(u=>{let d=c?`preview`:`active`;logger.debug(`Registering for ${t} with status: ${d}`);let m={status:d,courseID:t,user:!0,admin:!1,moderator:!1,elo:{global:{score:1e3,count:0},tags:{},misc:{}}};return u.courses.filter(t=>t.courseID===m.courseID).length===0?(log4(`It's a new course registration!`),u.courses.push(m),u.studyWeight[t]=1):u.courses.forEach(c=>{log4(`Found the previously registered course!`),c.courseID===t&&(c.status=d)}),this.localDB.put(u)}).catch(t=>{throw log4(`Registration failed because of: ${JSON.stringify(t)}`),t})}async dropCourse(t,c=`dropped`){return this.getCourseRegistrationsDoc().then(u=>{let d=-1;for(let c=0;c<u.courses.length;c++)u.courses[c].courseID===t&&(d=c);if(d!==-1)delete u.studyWeight[t],u.courses[d].status=c;else throw Error(`User ${this.getUsername()} is not currently registered for course ${t}`);return this.localDB.put(u)})}async getCourseInterface(t){return new UsrCrsData(this,t)}async getUserEditableCourses(){let t=[],c=await this.getCourseRegistrationsDoc();return t=t.concat(c.courses.map(t=>t.courseID)),await Promise.all(t.map(async t=>await getCredentialledCourseConfig(t)))}async getConfig(){let t={_id:_BaseUser.DOC_IDS.CONFIG,darkMode:!1,likesConfetti:!1,sessionTimeLimit:5};try{let t=await this.localDB.get(_BaseUser.DOC_IDS.CONFIG);return logger.debug(`Raw config from DB:`,t),t}catch(c){let u=c;if(u.name&&u.name===`not_found`)return await this.localDB.put(t),this.getConfig();throw logger.error(`Error setting user default config:`,c),Error(`Error returning the user's configuration: ${JSON.stringify(c)}`)}}async setConfig(t){logger.debug(`Setting Config items ${JSON.stringify(t)}`);let c=await this.getConfig(),u=await this.localDB.put({...c,...t});u.ok?logger.debug(`Config items set: ${JSON.stringify(t)}`):logger.error(`Error setting config items: ${JSON.stringify(u)}`)}static async instance(t,c){return c?(_BaseUser._instance=new _BaseUser(c,t),await _BaseUser._instance.init(),_BaseUser._instance):_BaseUser._instance&&_BaseUser._initialized?_BaseUser._instance:_BaseUser._instance?new Promise(t=>{(function waitForUser(){if(_BaseUser._initialized)return t(_BaseUser._instance);setTimeout(waitForUser,50)})()}):(_BaseUser._instance=new _BaseUser(await t.getCurrentUsername(),t),await _BaseUser._instance.init(),_BaseUser._instance)}constructor(t,c){_defineProperty$2(this,`_username`,void 0),_defineProperty$2(this,`syncStrategy`,void 0),_defineProperty$2(this,`localDB`,void 0),_defineProperty$2(this,`remoteDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),_defineProperty$2(this,`updateQueue`,void 0),_BaseUser._initialized=!1,this._username=t,this.syncStrategy=c,this.setDBandQ()}setDBandQ(){this.localDB=getLocalUserDB(this._username),this.remoteDB=this.syncStrategy.setupRemoteDB(this._username),this.writeDB=this.syncStrategy.getWriteDB?this.syncStrategy.getWriteDB(this._username):this.localDB,this.updateQueue=new UpdateQueue(this.localDB,this.writeDB)}async init(){if(_BaseUser._initialized=!1,this._username===`admin`){_BaseUser._initialized=!0;return}this.setDBandQ(),this.syncStrategy.startSync(this.localDB,this.remoteDB),this.applyDesignDocs().catch(t=>{log4(`Error in applyDesignDocs background task: ${t}`),t&&typeof t==`object`&&log4(`Full error details in applyDesignDocs: ${JSON.stringify(t)}`)}),this.deduplicateReviews().catch(t=>{log4(`Error in deduplicateReviews background task: ${t}`),t&&typeof t==`object`&&log4(`Full error details in background task: ${JSON.stringify(t)}`)}),_BaseUser._initialized=!0}async applyDesignDocs(){if(log4(`Starting applyDesignDocs for user: ${this._username}`),log4(`Remote DB name: ${this.remoteDB.name||`unknown`}`),this._username===`admin`){log4(`Skipping design docs for admin user`);return}log4(`Applying ${_BaseUser.designDocs.length} design docs`);for(let t of _BaseUser.designDocs){log4(`Applying design doc: ${t._id}`);try{try{let c=await this.remoteDB.get(t._id);await this.remoteDB.put({...t,_rev:c._rev})}catch(c){if(c?.name===`not_found`)await this.remoteDB.put(t);else throw c}}catch(c){if(c.name&&c.name===`conflict`)logger.warn(`Design doc ${t._id} update conflict - will retry`),await new Promise(t=>setTimeout(t,1e3)),await this.applyDesignDoc(t);else throw logger.error(`Failed to apply design doc ${t._id}:`,c),c}}}async applyDesignDoc(t,c=3){try{let c=await this.remoteDB.get(t._id);await this.remoteDB.put({...t,_rev:c._rev})}catch(u){if(u?.name===`conflict`&&c>0)return await new Promise(t=>setTimeout(t,1e3)),this.applyDesignDoc(t,c-1);throw u}}async putCardRecord(t){let c=getCardHistoryID(t.courseID,t.cardID);t.timeStamp=hooks.utc(t.timeStamp).toString();try{let u=await this.update(c,function(c){return c.records.push(t),c.bestInterval=c.bestInterval||0,c.lapses=c.lapses||0,c.streak=c.streak||0,c});return u.records=u.records.map(t=>{let c={...t};return c.timeStamp=hooks.utc(t.timeStamp),c}),u}catch(u){let d=u;if(d.status===404)try{let u={_id:c,cardID:t.cardID,courseID:t.courseID,records:[t],lapses:0,streak:0,bestInterval:0},d=await this.writeDB.put(u);return{...u,_rev:d.rev}}catch(t){throw Error(`Failed to create CardHistory for ${c}. Reason: ${t}`)}else throw Error(`putCardRecord failed because of:
|
|
368
368
|
name:${d.name}
|
|
369
369
|
error: ${d.error}
|
|
370
370
|
message: ${d.message}`)}}async deduplicateReviews(){try{log4(`Starting deduplication of scheduled reviews...`),log4(`Remote DB name: ${this.remoteDB.name||`unknown`}`),log4(`Write DB name: ${this.writeDB.name||`unknown`}`);let t={},c=[];log4(`Attempting to query remoteDB for reviewCards/reviewCards. Database: ${this.remoteDB.name||`unknown`}`);let u=await this.remoteDB.query(`reviewCards/reviewCards`);if(log4(`Found ${u.rows.length} scheduled reviews to process`),u.rows.forEach(u=>{let d=u.value,m=u.key;t[d]?(log4(`Found duplicate scheduled review for card: ${d}`),log4(`Marking earlier review ${t[d]} for deletion, keeping ${m}`),c.push(t[d]),t[d]=m):t[d]=m}),c.length>0){log4(`Removing ${c.length} duplicate reviews...`);let t=c.map(async t=>{try{let c=await this.remoteDB.get(t);await this.writeDB.remove(c),log4(`Successfully removed duplicate review: ${t}`)}catch(c){log4(`Failed to remove duplicate review ${t}: ${c}`)}});await Promise.all(t),log4(`Deduplication complete. Processed ${c.length} duplicates`)}else log4(`No duplicate reviews found`)}catch(t){log4(`Error during review deduplication: ${t}`),t&&typeof t==`object`&&`status`in t&&t.status===404&&(log4(`Database not found (404) during review deduplication. Database: ${this.remoteDB.name||`unknown`}`),log4(`This might indicate the user database doesn't exist or the reviewCards view isn't available`)),t&&typeof t==`object`&&log4(`Full error details: ${JSON.stringify(t)}`)}}async getSeenCards(t){let c=DocTypePrefixes.CARDRECORD;t&&(c+=`-${t}-`);let u=await filterAllDocsByPrefix(this.localDB,c,{include_docs:!1}),d=[];return u.rows.forEach(t=>{t.id.startsWith(c)&&d.push(t.id.substr(c.length))}),d}async getHistory(){return(await filterAllDocsByPrefix(this.remoteDB,DocTypePrefixes.CARDRECORD,{include_docs:!0,attachments:!1})).rows.map(t=>t.doc)}async updateCourseSettings(t,c){this.getCourseRegistrationsDoc().then(u=>{let d=u.courses.find(c=>c.courseID===t);return d&&((d.settings===null||d.settings===void 0)&&(d.settings={}),c.forEach(t=>{d.settings[t.key]=t.value})),this.localDB.put(u)})}async getCourseSettings(t){let c=(await this.getCourseRegistrationsDoc()).courses.find(c=>c.courseID===t);if(c)return c.settings;throw Error(`getCourseSettings Failed:
|
|
@@ -395,17 +395,17 @@ Examples:
|
|
|
395
395
|
window.skuilder.userdb.showScheduledReviews('course123')
|
|
396
396
|
window.skuilder.userdb.queryByType('SCHEDULED_CARD', 10)
|
|
397
397
|
window.skuilder.userdb.raw(db => db.allDocs({ limit: 5 }))
|
|
398
|
-
`)}},mountUserDBDebugger()}}),init_core=__esm({"src/core/index.ts"(){"use strict";init_interfaces(),init_types_legacy(),init_user(),init_strategyState(),init_userOutcome(),init_Loggable(),init_util(),init_navigators(),init_bulkImport(),init_orchestration(),init_UserDBDebugger()}}),init_core(),init_courseLookupDB(),init_logger(),init_couch(),init_util(),init_logger(),duration=hooks.duration,init_logger(),SrsService=class{constructor(t){_defineProperty$2(this,`user`,void 0),this.user=t}removeReview(t){logger.info(`[SrsService] Removing orphaned scheduled review: ${t}`),this.user.removeScheduledCardReview(t)}async scheduleReview(t,c){let u=newInterval(this.user,t),d=hooks.utc().add(u,`seconds`);isReview(c)&&(logger.info(`[SrsService] Removing previously scheduled review for: ${c.cardID}`),this.user.removeScheduledCardReview(c.reviewID)),this.user.scheduleCardReview({user:this.user.getUsername(),course_id:t.courseID,card_id:t.cardID,time:d,scheduledFor:c.contentSourceType,schedulingAgentId:c.contentSourceID})}},init_logger(),EloService=class{constructor(t,c){_defineProperty$2(this,`dataLayer`,void 0),_defineProperty$2(this,`user`,void 0),this.dataLayer=t,this.user=c}async updateUserAndCardElo(t,c,u,d,m,g){g&&logger.warn(`k value interpretation not currently implemented`);let b=this.dataLayer.getCourseDB(m.card.course_id),S=
|
|
399
|
-
User: ${JSON.stringify(
|
|
400
|
-
Card: ${JSON.stringify(
|
|
398
|
+
`)}},mountUserDBDebugger()}}),init_core=__esm({"src/core/index.ts"(){"use strict";init_interfaces(),init_types_legacy(),init_user(),init_strategyState(),init_userOutcome(),init_Loggable(),init_util(),init_navigators(),init_bulkImport(),init_orchestration(),init_UserDBDebugger()}}),init_core(),init_courseLookupDB(),init_logger(),init_couch(),init_util(),init_logger(),duration=hooks.duration,init_logger(),SrsService=class{constructor(t){_defineProperty$2(this,`user`,void 0),this.user=t}removeReview(t){logger.info(`[SrsService] Removing orphaned scheduled review: ${t}`),this.user.removeScheduledCardReview(t)}async scheduleReview(t,c){let u=newInterval(this.user,t),d=hooks.utc().add(u,`seconds`);isReview(c)&&(logger.info(`[SrsService] Removing previously scheduled review for: ${c.cardID}`),this.user.removeScheduledCardReview(c.reviewID)),this.user.scheduleCardReview({user:this.user.getUsername(),course_id:t.courseID,card_id:t.cardID,time:d,scheduledFor:c.contentSourceType,schedulingAgentId:c.contentSourceID})}},init_logger(),EloService=class{constructor(t,c){_defineProperty$2(this,`dataLayer`,void 0),_defineProperty$2(this,`user`,void 0),this.dataLayer=t,this.user=c}async updateUserAndCardElo(t,c,u,d,m,g){g&&logger.warn(`k value interpretation not currently implemented`);let b=this.dataLayer.getCourseDB(m.card.course_id),S=d.courses.find(t=>t.courseID===c);if(!S){logger.error(`[EloService] No registration for course ${c} on user's registration doc \u2014 skipping ELO update for card ${u}. (Is the user registered for this course?)`);return}let C=toCourseElo(S.elo),w=(await b.getCardEloData([m.card.card_id]))[0];if(w&&C){let d=adjustCourseScores(C,w,t);S.elo=d.userElo;let m=await Promise.allSettled([this.user.updateUserElo(c,d.userElo),b.updateCardElo(u,d.cardElo)]),g=m[0].status===`fulfilled`,T=m[1].status===`fulfilled`;if(g&&T){let t=m[0].value,c=m[1].value;t.ok&&c&&c.ok&&logger.info(`[EloService] Updated ELOS:
|
|
399
|
+
User: ${JSON.stringify(d.userElo)})
|
|
400
|
+
Card: ${JSON.stringify(d.cardElo)})
|
|
401
401
|
`)}else logger.warn(`[EloService] Partial ELO update:
|
|
402
|
-
User ELO update: ${
|
|
403
|
-
Card ELO update: ${T?`SUCCESS`:`FAILED`}`),!
|
|
402
|
+
User ELO update: ${g?`SUCCESS`:`FAILED`}
|
|
403
|
+
Card ELO update: ${T?`SUCCESS`:`FAILED`}`),!g&&m[0].status===`rejected`&&logger.error(`[EloService] User ELO update error:`,m[0].reason),!T&&m[1].status===`rejected`&&logger.error(`[EloService] Card ELO update error:`,m[1].reason)}}async updateUserAndCardEloPerTag(t,c,u,d,m){let g=this.dataLayer.getCourseDB(m.card.course_id),b=d.courses.find(t=>t.courseID===c);if(!b){logger.error(`[EloService] No registration for course ${c} on user's registration doc \u2014 skipping per-tag ELO update for card ${u}. (Is the user registered for this course?)`);return}let S=toCourseElo(b.elo),[C,w]=await Promise.all([g.getCardEloData([m.card.card_id]),g.getAppliedTagsBatch([u])]),T=C[0],E=w.get(u)??[],D={...t},O=t._global;for(let t of E)t in D||(D[t]=O);if(T&&S){let t=adjustCourseScoresPerTag(S,T,D);b.elo=t.userElo;let d=await Promise.allSettled([this.user.updateUserElo(c,t.userElo),g.updateCardElo(u,t.cardElo)]),m=d[0].status===`fulfilled`,C=d[1].status===`fulfilled`;if(m&&C){let c=d[0].value,u=d[1].value;if(c.ok&&u&&u.ok){let c=Object.keys(D).length-1;logger.info(`[EloService] Updated ELOS (per-tag, ${c} tags):
|
|
404
404
|
User: ${JSON.stringify(t.userElo)})
|
|
405
405
|
Card: ${JSON.stringify(t.cardElo)})
|
|
406
406
|
`)}}else logger.warn(`[EloService] Partial ELO update (per-tag):
|
|
407
|
-
User ELO update: ${
|
|
408
|
-
Card ELO update: ${C?`SUCCESS`:`FAILED`}`),!
|
|
407
|
+
User ELO update: ${m?`SUCCESS`:`FAILED`}
|
|
408
|
+
Card ELO update: ${C?`SUCCESS`:`FAILED`}`),!m&&d[0].status===`rejected`&&logger.error(`[EloService] User ELO update error:`,d[0].reason),!C&&d[1].status===`rejected`&&logger.error(`[EloService] Card ELO update error:`,d[1].reason)}}},init_core(),init_logger(),ResponseProcessor=class{constructor(t,c){_defineProperty$2(this,`srsService`,void 0),_defineProperty$2(this,`eloService`,void 0),this.srsService=t,this.eloService=c}logEloFailure(t,c){return u=>logger.error(`[ResponseProcessor] ELO update failed (${t}) for ${c}:`,u)}parsePerformance(t){return typeof t==`number`?{globalScore:t,taggedPerformance:null}:isTaggedPerformance(t)?{globalScore:t._global,taggedPerformance:t}:(logger.warn(`[ResponseProcessor] Unexpected performance structure, using neutral score`,{performance:t}),{globalScore:.5,taggedPerformance:null})}async processResponse(t,c,u,d,m,g,b,S,C,w){if(!isQuestionRecord(t))return{nextCardAction:`dismiss-success`,shouldLoadNextCard:!0,isCorrect:!0,shouldClearFeedbackShadow:!0};try{let T=await c,E;return E=t.isCorrect?this.processCorrectResponse(t,T,u,d,m,g,b):this.processIncorrectResponse(t,T,d,m,g,b,S,C,w),t.deferAdvance&&E.shouldLoadNextCard&&(logger.info(`[ResponseProcessor] deferAdvance requested — suppressing navigation, action stashed:`,{nextCardAction:E.nextCardAction}),E={...E,shouldLoadNextCard:!1,deferred:!0}),E}catch(t){throw logger.error(`[ResponseProcessor] Failed to load card history`,{e:t,cardId:b}),t}}processCorrectResponse(t,c,u,d,m,g,b){if(t.priorAttemps===0){m.card.tags.includes(`srs:skip`)||this.srsService.scheduleReview(c,u);let{globalScore:S,taggedPerformance:C}=this.parsePerformance(t.performance);if(C){let u=Object.keys(C).filter(t=>t!==`_global`),S=u.filter(t=>C[t]===null),w=u.filter(t=>C[t]!==null);logger.info(`[FirstContactElo] correct first-attempt per-tag ELO update for ${b} (historyLen=${c.records.length}, priorAttemps=${t.priorAttemps}): scored=[${w.join(`, `)}] count-only=[${S.join(`, `)}]`),this.eloService.updateUserAndCardEloPerTag(C,g,b,d,m).catch(this.logEloFailure(`correct per-tag`,b))}else{let u=.5+S/2;if(c.records.length===1)this.eloService.updateUserAndCardElo(u,g,b,d,m).catch(this.logEloFailure(`correct`,b));else{let t=Math.ceil(32/c.records.length);this.eloService.updateUserAndCardElo(u,g,b,d,m,t).catch(this.logEloFailure(`correct repeat-view`,b))}logger.info(`[FirstContactElo] correct first-attempt ELO update (score=${u.toFixed(3)}) for ${b} (historyLen=${c.records.length}, priorAttemps=${t.priorAttemps})`)}return{nextCardAction:`dismiss-success`,shouldLoadNextCard:!0,isCorrect:!0,performanceScore:S,shouldClearFeedbackShadow:!0}}else{logger.info(`[ResponseProcessor] Processed correct response (retry attempt - no scheduling/ELO)`);let{globalScore:c}=this.parsePerformance(t.performance);return{nextCardAction:`marked-failed`,shouldLoadNextCard:!0,isCorrect:!0,performanceScore:c,shouldClearFeedbackShadow:!0}}}processIncorrectResponse(t,c,u,d,m,g,b,S,C){let{taggedPerformance:w}=this.parsePerformance(t.performance),T=!1;return t.priorAttemps===0?(w?(this.eloService.updateUserAndCardEloPerTag(w,m,g,u,d).catch(this.logEloFailure(`incorrect per-tag`,g)),logger.info(`[FirstContactElo] incorrect first-attempt per-tag ELO update for ${g} (historyLen=${c.records.length}, priorAttemps=${t.priorAttemps}, tags=${Object.keys(w).length-1})`)):(this.eloService.updateUserAndCardElo(0,m,g,u,d).catch(this.logEloFailure(`incorrect`,g)),logger.info(`[FirstContactElo] incorrect first-attempt ELO update (score=0) for ${g} (historyLen=${c.records.length}, priorAttemps=${t.priorAttemps})`)),T=!0):logger.info(`[FirstContactElo] incorrect retry \u2014 no ELO update for ${g} (historyLen=${c.records.length}, priorAttemps=${t.priorAttemps})`),d.records.length>=b?C>=S?(T?logger.info(`[FirstContactElo] dismiss-failed \u2014 ELO already updated this response, skipping double penalty for ${g}`):(w?this.eloService.updateUserAndCardEloPerTag(w,m,g,u,d).catch(this.logEloFailure(`dismiss-failed per-tag`,g)):this.eloService.updateUserAndCardElo(0,m,g,u,d).catch(this.logEloFailure(`dismiss-failed`,g)),logger.info(`[FirstContactElo] dismiss-failed final ELO penalty for ${g} (historyLen=${c.records.length}, sessionViews=${C})`)),{nextCardAction:`dismiss-failed`,shouldLoadNextCard:!0,isCorrect:!1,shouldClearFeedbackShadow:!0}):{nextCardAction:`marked-failed`,shouldLoadNextCard:!0,isCorrect:!1,shouldClearFeedbackShadow:!0}:{nextCardAction:`none`,shouldLoadNextCard:!1,isCorrect:!1,shouldClearFeedbackShadow:!0}}},init_logger(),CardHydrationService=class{constructor(t,c,u){_defineProperty$2(this,`hydratedCards`,new Map),_defineProperty$2(this,`hydrationInFlight`,new Set),_defineProperty$2(this,`hydrationInProgress`,!1),this.getViewComponent=t,this.getCourseDB=c,this.getItemsToHydrate=u}getHydratedCard(t){return this.hydratedCards.get(t)??null}hasHydratedCard(t){return this.hydratedCards.has(t)}removeCard(t){this.hydratedCards.delete(t)}async ensureHydratedCards(){this.fillHydratedCards()}async waitForCard(t){if(this.hydratedCards.has(t))return this.hydratedCards.get(t);this.hydrationInProgress||this.fillHydratedCards();let c=1e4,u=25,d=0;for(;d<1e4;){if(this.hydratedCards.has(t))return this.hydratedCards.get(t);if(!this.hydrationInFlight.has(t)&&!this.hydrationInProgress)break;await new Promise(t=>setTimeout(t,25)),d+=25}return this.hydratedCards.get(t)??null}get hydratedCount(){return this.hydratedCards.size}getHydratedCardIds(){return Array.from(this.hydratedCards.keys())}async fillHydratedCards(){if(!this.hydrationInProgress){this.hydrationInProgress=!0;try{let t=this.getItemsToHydrate();for(let c of t)if(!(this.hydratedCards.has(c.cardID)||this.hydrationInFlight.has(c.cardID)))try{await this.hydrateCard(c)}catch(t){logger.error(`[CardHydrationService] Error hydrating card ${c.cardID}:`,t)}}finally{this.hydrationInProgress=!1}}}async hydrateCard(t){if(!(this.hydratedCards.has(t.cardID)||this.hydrationInFlight.has(t.cardID))){this.hydrationInFlight.add(t.cardID);try{let c=this.getCourseDB(t.courseID),[u,d]=await Promise.all([c.getCourseDoc(t.cardID),c.getAppliedTagsBatch([t.cardID])]);isCourseElo(u.elo)||(u.elo=toCourseElo(u.elo));let m=this.getViewComponent(u.id_view),g=await Promise.all(u.id_displayable_data.map(t=>c.getCourseDoc(t,{attachments:!0,binary:!0}))),b=[];g.forEach(t=>{t.data.forEach(t=>{b.push(...parseAudioURIs(t.data))})});let S=[...new Set(b)];S.length>0&&(logger.debug(`[CardHydrationService] Prefetching ${S.length} audio files for card ${t.cardID}`),await Promise.allSettled(S.map(prefetchAudio)));let C=g.map(displayableDataToViewData).reverse();this.hydratedCards.set(t.cardID,{item:t,view:m,data:C,tags:d.get(t.cardID)??[]}),logger.debug(`[CardHydrationService] Hydrated card ${t.cardID}`)}finally{this.hydrationInFlight.delete(t.cardID)}}}},ItemQueue=class{constructor(){_defineProperty$2(this,`q`,[]),_defineProperty$2(this,`seenCardIds`,[]),_defineProperty$2(this,`_dequeueCount`,0)}get dequeueCount(){return this._dequeueCount}add(t,c){this.seenCardIds.find(t=>t===c)||(this.seenCardIds.push(c),this.q.push(t))}addAll(t,c){t.forEach(t=>this.add(t,c(t)))}get length(){return this.q.length}peek(t){return this.q[t]}dequeue(t){if(this.q.length!==0){this._dequeueCount++;let c=this.q.splice(0,1)[0];if(t){let u=t(c),d=this.seenCardIds.indexOf(u);d>-1&&this.seenCardIds.splice(d,1)}return c}else return null}replaceAll(t,c){this.q=[],this.seenCardIds=[];for(let u of t){let t=c(u);this.seenCardIds.includes(t)||(this.seenCardIds.push(t),this.q.push(u))}}mergeToFront(t,c,u){let d=0,m=[];for(let g of t){let t=c(g);if(!this.seenCardIds.includes(t))this.seenCardIds.push(t),m.push(g),d++;else if(u?.has(t)){let u=this.q.findIndex(u=>c(u)===t);u>=0&&m.push(...this.q.splice(u,1))}}return this.q.unshift(...m),d}get toString(){return`${typeof this.q[0]}:
|
|
409
409
|
`+this.q.map(t=>` ${t.courseID}+${t.cardID}: ${t.status}`).join(`
|
|
410
410
|
`)}},init_couch(),init_core(),init_recording(),init_Loggable(),init_types_legacy(),init_logger(),CouchDBToStaticPacker=class{constructor(t={}){_defineProperty$2(this,`config`,void 0),_defineProperty$2(this,`sourceDB`,null),this.config={chunkSize:1e3,includeAttachments:!0,...t}}async packCourse(t,c){logger.info(`Starting static pack for course: ${c}`),this.sourceDB=t;let u={version:`1.0.0`,courseId:c,courseName:``,courseConfig:null,lastUpdated:new Date().toISOString(),documentCount:0,chunks:[],indices:[],designDocs:[]},d=await this.extractCourseConfig(t);u.courseName=d.name,u.courseConfig=d,u.designDocs=await this.extractDesignDocs(t);let m=await this.extractDocumentsByType(t),g=new Map;this.config.includeAttachments&&await this.extractAllAttachments(m,g);let b=new Map;for(let[t,c]of Object.entries(m)){let d=this.createChunks(c,t);u.chunks.push(...d),u.documentCount+=c.length,this.prepareChunkData(d,c,b)}let S=new Map;return u.indices=await this.buildIndices(m,u.designDocs,S),{manifest:u,chunks:b,indices:S,attachments:g}}async packCourseToFiles(t,c,u,d){logger.info(`Packing course ${c} to files in ${u}`);let m=await this.packCourse(t,c),g=await this.writePackedDataToFiles(m,u,d);return{manifest:m.manifest,filesWritten:g,attachmentsFound:m.attachments?m.attachments.size:0}}async writePackedDataToFiles(t,c,u){let d=0;await u.ensureDir(c);let m=u.joinPath(c,`manifest.json`);await u.writeJson(m,t.manifest,{spaces:2}),d++,logger.info(`Wrote manifest: ${m}`);let g=u.joinPath(c,`chunks`),b=u.joinPath(c,`indices`);await u.ensureDir(g),await u.ensureDir(b);for(let[c,m]of t.chunks){let t=u.joinPath(g,`${c}.json`);await u.writeJson(t,m),d++}logger.info(`Wrote ${t.chunks.size} chunk files`);for(let[c,m]of t.indices){let t=u.joinPath(b,`${c}.json`);await u.writeJson(t,m,{spaces:2}),d++}if(logger.info(`Wrote ${t.indices.size} index files`),t.attachments&&t.attachments.size>0){for(let[m,g]of t.attachments){let t=u.joinPath(c,m),b=u.dirname(t);await u.ensureDir(b),await u.writeFile(t,g.buffer),d++}logger.info(`Wrote ${t.attachments.size} attachment files`)}return d}async extractCourseConfig(t){try{return await t.get(`CourseConfig`)}catch(t){throw logger.error(`Failed to extract course config:`,t),Error(`Course config not found`)}}async extractDesignDocs(t){return(await t.allDocs({startkey:`_design/`,endkey:`_design/`,include_docs:!0})).rows.map(t=>({_id:t.id,views:t.doc.views||{}}))}async extractDocumentsByType(t){let c=await t.allDocs({include_docs:!0}),u={};for(let t of c.rows){if(t.id.startsWith(`_`))continue;let c=t.doc;c.docType&&(u[c.docType]||(u[c.docType]=[]),u[c.docType].push(c))}return u}createChunks(t,c){let u=[],d=t.sort((t,c)=>t._id.localeCompare(c._id));for(let t=0;t<d.length;t+=this.config.chunkSize){let m=d.slice(t,t+this.config.chunkSize),g=`${c}-${String(Math.floor(t/this.config.chunkSize)).padStart(4,`0`)}`;u.push({id:g,docType:c,startKey:m[0]._id,endKey:m[m.length-1]._id,documentCount:m.length,path:`chunks/${g}.json`})}return u}prepareChunkData(t,c,u){let d=c.sort((t,c)=>t._id.localeCompare(c._id));for(let c of t){let t=d.filter(t=>t._id>=c.startKey&&t._id<=c.endKey).map(t=>{let c={...t};return delete c._rev,this.config.includeAttachments&&c._attachments?c._attachments=this.transformAttachmentStubs(c._attachments,c._id):this.config.includeAttachments||delete c._attachments,c});u.set(c.id,t)}}async buildIndices(t,c,u){let d=[];if(t.CARD){let c=await this.buildEloIndex(t.CARD,u);d.push(c)}if(t.TAG){let c=await this.buildTagIndex(t.TAG,u);d.push(c)}for(let t of c)for(let[c,m]of Object.entries(t.views))if(m.map){logger.info(`Processing view: ${t._id}/${c}`);let m=await this.buildViewIndex(c,t,u);m?(d.push(m),logger.info(`Successfully built index: ${m.name}`)):logger.warn(`Skipped view index: ${t._id}/${c}`)}return d}async buildEloIndex(t,c){let u=[];for(let c of t)c.elo?.global?.score&&u.push({elo:c.elo.global.score,cardId:c._id});u.sort((t,c)=>t.elo-c.elo);let d={},m=50;for(let t of u){let c=Math.floor(t.elo/50)*50;d[c]||(d[c]=[]),d[c].push(t.cardId)}return c.set(`elo`,{sorted:u,buckets:d,stats:{min:u[0]?.elo||0,max:u[u.length-1]?.elo||0,count:u.length}}),{name:`elo`,type:`btree`,path:`indices/elo.json`}}async buildTagIndex(t,c){let u={};for(let c of t)u[c.name]={cardIds:c.taggedCards,snippet:c.snippet,count:c.taggedCards.length};let d={};for(let c of t)for(let t of c.taggedCards)d[t]||(d[t]=[]),d[t].push(c.name);return c.set(`tags`,{byTag:u,byCard:d}),{name:`tags`,type:`hash`,path:`indices/tags.json`}}async buildViewIndex(t,c,u){if(!this.sourceDB)return logger.error(`Source database not available for view querying`),null;try{let d=`${c._id.replace(`_design/`,``)}/${t}`;logger.info(`Querying CouchDB view: ${d}`);let m=await this.sourceDB.query(d,{include_docs:!1});if(!m.rows||m.rows.length===0)return logger.warn(`View ${d} returned no results`),null;logger.info(`Successfully queried view ${d}: ${m.rows.length} results`);let g=this.formatViewResults(t,m.rows,c),b=`view-${c._id.replace(`_design/`,``)}-${t}`;return u.set(b,g),{name:b,type:`view`,path:`indices/${b}.json`}}catch(u){return logger.error(`Failed to query view ${c._id}/${t}:`,u),null}}formatViewResults(t,c,u){let d={type:`couchdb-view`,viewName:t,designDoc:u._id,results:c,metadata:{resultCount:c.length,generatedAt:new Date().toISOString()}};switch(t){case`elo`:return this.formatEloViewIndex(c,d);case`getTags`:return this.formatTagsViewIndex(c,d);case`cardsByInexperience`:return this.formatInexperienceViewIndex(c,d);default:return this.formatGenericViewIndex(c,d)}}formatEloViewIndex(t,c){let u=t.sort((t,c)=>typeof t.key==`number`&&typeof c.key==`number`?t.key-c.key:0);return{...c,sorted:u,stats:{min:u[0]?.key||0,max:u[u.length-1]?.key||0,count:u.length}}}formatTagsViewIndex(t,c){let u={};for(let c of t){let t=c.key;typeof t==`string`&&(u[t]||(u[t]=[]),u[t].push(c.id))}return{...c,byTag:u,tagCount:Object.keys(u).length}}formatInexperienceViewIndex(t,c){let u=t.sort((t,c)=>typeof t.key==`number`&&typeof c.key==`number`?t.key-c.key:0);return{...c,sorted:u,stats:{minInexperience:u[0]?.key||0,maxInexperience:u[u.length-1]?.key||0,count:u.length}}}formatGenericViewIndex(t,c){return{...c}}async extractAllAttachments(t,c){logger.info(`Extracting attachments...`);let u=[];for(let c of Object.values(t))u.push(...c);let d=u.filter(t=>t._attachments&&Object.keys(t._attachments).length>0);if(d.length===0){logger.info(`No attachments found`);return}logger.info(`Found ${d.length} documents with attachments`);let m=d.map(t=>this.extractDocumentAttachments(t,c));await Promise.all(m),logger.info(`Extracted ${c.size} attachment files`)}async extractDocumentAttachments(t,c){if(!t._attachments||!this.sourceDB)return;let u=t._id;for(let[d,m]of Object.entries(t._attachments))try{let t=await this.sourceDB.getAttachment(u,d),g;if(t instanceof ArrayBuffer)g=Buffer.from(t);else if(Buffer.isBuffer(t))g=t;else{let c=t;g=Buffer.from(await c.arrayBuffer())}let b=`${d}${this.getFileExtension(m.content_type)}`,S=`attachments/${u}/${b}`;c.set(S,{docId:u,attachmentName:d,filename:b,path:S,contentType:m.content_type,length:m.length||g.length,digest:m.digest,buffer:g}),logger.debug(`Extracted attachment: ${S}`)}catch(t){throw logger.error(`Failed to extract attachment ${u}/${d}:`,t),Error(`Failed to extract attachment ${u}/${d}: ${t}`)}}transformAttachmentStubs(t,c){let u={};for(let[d,m]of Object.entries(t))u[d]={path:`attachments/${c}/${`${d}${this.getFileExtension(m.content_type)}`}`,content_type:m.content_type,length:m.length,digest:m.digest,stub:!1};return u}getFileExtension(t){return{"image/jpeg":`.jpg`,"image/jpg":`.jpg`,"image/png":`.png`,"image/gif":`.gif`,"image/webp":`.webp`,"audio/mpeg":`.mp3`,"audio/mp3":`.mp3`,"audio/wav":`.wav`,"audio/ogg":`.ogg`,"video/mp4":`.mp4`,"video/webm":`.webm`,"application/pdf":`.pdf`,"text/plain":`.txt`,"application/json":`.json`}[t]||``}},init_logger(),DEFAULT_MIGRATION_OPTIONS={chunkBatchSize:100,validateRoundTrip:!1,cleanupOnFailure:!0,timeout:3e5},init_logger(),FileSystemError=class extends Error{constructor(t,c,u,d){super(t),this.operation=c,this.filePath=u,this.cause=d,this.name=`FileSystemError`}},nodeFS2=null;try{typeof window>`u`&&typeof process<`u`&&process.versions?.node&&(nodeFS2=eval(`require`)(`fs`),nodeFS2.promises=nodeFS2.promises||eval(`require`)(`fs`).promises)}catch{}nodeFS3=null,nodePath=null;try{typeof window>`u`&&typeof process<`u`&&process.versions?.node&&(nodeFS3=eval(`require`)(`fs`),nodePath=eval(`require`)(`path`),nodeFS3.promises=nodeFS3.promises||eval(`require`)(`fs`).promises)}catch{}StaticToCouchDBMigrator=class{constructor(t={},c){_defineProperty$2(this,`options`,void 0),_defineProperty$2(this,`progressCallback`,void 0),_defineProperty$2(this,`fs`,void 0),this.options={...DEFAULT_MIGRATION_OPTIONS,...t},this.fs=c}setProgressCallback(t){this.progressCallback=t}async migrateCourse(t,c){let u=Date.now(),d={success:!1,documentsRestored:0,attachmentsRestored:0,designDocsRestored:0,courseConfigRestored:0,errors:[],warnings:[],migrationTime:0};try{logger.info(`Starting migration from ${t} to CouchDB`),this.reportProgress(`manifest`,0,1,`Validating static course...`);let m=await validateStaticCourse(t,this.fs);if(!m.valid)throw d.errors.push(...m.errors),Error(`Static course validation failed: ${m.errors.join(`, `)}`);d.warnings.push(...m.warnings),this.reportProgress(`manifest`,1,1,`Loading course manifest...`);let g=await this.loadManifest(t);logger.info(`Loaded manifest for course: ${g.courseId} (${g.courseName})`),this.reportProgress(`design_docs`,0,g.designDocs.length,`Restoring design documents...`);let b=await this.restoreDesignDocuments(g.designDocs,c);d.designDocsRestored=b.restored,d.errors.push(...b.errors),d.warnings.push(...b.warnings),this.reportProgress(`course_config`,0,1,`Restoring CourseConfig document...`);let S=await this.restoreCourseConfig(g,c);d.courseConfigRestored=S.restored,d.errors.push(...S.errors),d.warnings.push(...S.warnings),this.reportProgress(`course_config`,1,1,`CourseConfig document restored`);let C=this.calculateExpectedCounts(g);this.reportProgress(`documents`,0,g.documentCount,`Aggregating documents from chunks...`);let w=await this.aggregateDocuments(t,g),T=w.filter(t=>t._id!==`CourseConfig`);w.length!==T.length&&d.warnings.push(`Filtered out ${w.length-T.length} CourseConfig document(s) from chunks to prevent conflicts`),this.reportProgress(`documents`,T.length,g.documentCount,`Uploading documents to CouchDB...`);let E=await this.uploadDocuments(T,c);d.documentsRestored=E.restored,d.errors.push(...E.errors),d.warnings.push(...E.warnings);let D=w.filter(t=>t._attachments&&Object.keys(t._attachments).length>0);this.reportProgress(`attachments`,0,D.length,`Uploading attachments...`);let O=await this.uploadAttachments(t,D,c);if(d.attachmentsRestored=O.restored,d.errors.push(...O.errors),d.warnings.push(...O.warnings),this.options.validateRoundTrip){this.reportProgress(`validation`,0,1,`Validating migration...`);let t=await validateMigration(c,C,g);t.valid||(d.warnings.push(`Migration validation found issues`),t.issues.forEach(t=>{t.type===`error`?d.errors.push(`Validation: ${t.message}`):d.warnings.push(`Validation: ${t.message}`)})),this.reportProgress(`validation`,1,1,`Migration validation completed`)}d.success=d.errors.length===0,d.migrationTime=Date.now()-u,logger.info(`Migration completed in ${d.migrationTime}ms`),logger.info(`Documents restored: ${d.documentsRestored}`),logger.info(`Attachments restored: ${d.attachmentsRestored}`),logger.info(`Design docs restored: ${d.designDocsRestored}`),logger.info(`CourseConfig restored: ${d.courseConfigRestored}`),d.errors.length>0&&logger.error(`Migration completed with ${d.errors.length} errors`),d.warnings.length>0&&logger.warn(`Migration completed with ${d.warnings.length} warnings`)}catch(t){d.success=!1,d.migrationTime=Date.now()-u;let m=t instanceof Error?t.message:String(t);if(d.errors.push(`Migration failed: ${m}`),logger.error(`Migration failed:`,t),this.options.cleanupOnFailure)try{await this.cleanupFailedMigration(c)}catch(t){logger.error(`Failed to cleanup after migration failure:`,t),d.warnings.push(`Failed to cleanup after migration failure`)}}return d}async loadManifest(t){try{let c,u;if(this.fs)u=this.fs.joinPath(t,`manifest.json`),c=await this.fs.readFile(u);else if(u=nodeFS3&&nodePath?nodePath.join(t,`manifest.json`):`${t}/manifest.json`,nodeFS3&&this.isLocalPath(t))c=await nodeFS3.promises.readFile(u,`utf8`);else{let t=await fetch(u);if(!t.ok)throw Error(`Failed to fetch manifest: ${t.status} ${t.statusText}`);c=await t.text()}let d=JSON.parse(c);if(!d.version||!d.courseId||!d.chunks)throw Error(`Invalid manifest structure`);return d}catch(t){let c=t instanceof FileSystemError?t.message:`Failed to load manifest: ${t instanceof Error?t.message:String(t)}`;throw Error(c)}}async restoreDesignDocuments(t,c){let u={restored:0,errors:[],warnings:[]};for(let d=0;d<t.length;d++){let m=t[d];this.reportProgress(`design_docs`,d,t.length,`Restoring ${m._id}...`);try{let t;try{t=await c.get(m._id)}catch{}let d={_id:m._id,views:m.views};t?(d._rev=t._rev,logger.debug(`Updating existing design document: ${m._id}`)):logger.debug(`Creating new design document: ${m._id}`),await c.put(d),u.restored++}catch(t){let c=`Failed to restore design document ${m._id}: ${t instanceof Error?t.message:String(t)}`;u.errors.push(c),logger.error(c)}}return this.reportProgress(`design_docs`,t.length,t.length,`Restored ${u.restored} design documents`),u}async aggregateDocuments(t,c){let u=[],d=new Map;for(let m=0;m<c.chunks.length;m++){let g=c.chunks[m];this.reportProgress(`documents`,u.length,c.documentCount,`Loading chunk ${g.id}...`);try{let c=await this.loadChunk(t,g);for(let t of c){if(!t._id){logger.warn(`Document without _id found in chunk ${g.id}, skipping`);continue}d.has(t._id)&&logger.warn(`Duplicate document ID found: ${t._id}, using latest version`),d.set(t._id,t)}}catch(t){throw Error(`Failed to load chunk ${g.id}: ${t instanceof Error?t.message:String(t)}`)}}return u.push(...d.values()),logger.info(`Aggregated ${u.length} unique documents from ${c.chunks.length} chunks`),u}async loadChunk(t,c){try{let u,d;if(this.fs)d=this.fs.joinPath(t,c.path),u=await this.fs.readFile(d);else if(d=nodeFS3&&nodePath?nodePath.join(t,c.path):`${t}/${c.path}`,nodeFS3&&this.isLocalPath(t))u=await nodeFS3.promises.readFile(d,`utf8`);else{let t=await fetch(d);if(!t.ok)throw Error(`Failed to fetch chunk: ${t.status} ${t.statusText}`);u=await t.text()}let m=JSON.parse(u);if(!Array.isArray(m))throw Error(`Chunk file does not contain an array of documents`);return m}catch(t){let c=t instanceof FileSystemError?t.message:`Failed to load chunk: ${t instanceof Error?t.message:String(t)}`;throw Error(c)}}async uploadDocuments(t,c){let u={restored:0,errors:[],warnings:[]},d=this.options.chunkBatchSize;for(let m=0;m<t.length;m+=d){let g=t.slice(m,m+d);this.reportProgress(`documents`,m,t.length,`Uploading batch ${Math.floor(m/d)+1}...`);try{let t=g.map(t=>{let c={...t};return delete c._rev,delete c._attachments,c}),d=await c.bulkDocs(t);for(let t=0;t<d.length;t++){let c=d[t],m=g[t];if(`error`in c){let t=`Failed to upload document ${m._id}: ${c.error} - ${c.reason}`;u.errors.push(t),logger.error(t)}else u.restored++}}catch(t){let c;c=t instanceof Error||t&&typeof t==`object`&&`message`in t?`Failed to upload document batch starting at index ${m}: ${t.message}`:`Failed to upload document batch starting at index ${m}: ${JSON.stringify(t)}`,u.errors.push(c),logger.error(c)}}return this.reportProgress(`documents`,t.length,t.length,`Uploaded ${u.restored} documents`),u}async uploadAttachments(t,c,u){let d={restored:0,errors:[],warnings:[]},m=0;for(let g of c)if(this.reportProgress(`attachments`,m,c.length,`Processing attachments for ${g._id}...`),m++,g._attachments)for(let[c,m]of Object.entries(g._attachments))try{let b=await this.uploadSingleAttachment(t,g._id,c,m,u);b.success?d.restored++:d.errors.push(b.error||`Unknown attachment upload error`)}catch(t){let u=`Failed to upload attachment ${g._id}/${c}: ${t instanceof Error?t.message:String(t)}`;d.errors.push(u),logger.error(u)}return this.reportProgress(`attachments`,c.length,c.length,`Uploaded ${d.restored} attachments`),d}async uploadSingleAttachment(t,c,u,d,m){let g={success:!1,attachmentName:u,docId:c};try{if(!d.path)return g.error=`Attachment metadata missing file path`,g;let b,S;if(this.fs)S=this.fs.joinPath(t,d.path),b=await this.fs.readBinary(S);else if(S=nodeFS3&&nodePath?nodePath.join(t,d.path):`${t}/${d.path}`,nodeFS3&&this.isLocalPath(t))b=await nodeFS3.promises.readFile(S);else{let t=await fetch(S);if(!t.ok)return g.error=`Failed to fetch attachment: ${t.status} ${t.statusText}`,g;b=await t.arrayBuffer()}let C=await m.get(c);await m.putAttachment(c,u,C._rev,b,d.content_type),g.success=!0}catch(t){g.error=t instanceof Error?t.message:String(t)}return g}async restoreCourseConfig(t,c){let u={restored:0,errors:[],warnings:[]};try{if(!t.courseConfig)return u.warnings.push(`No courseConfig found in manifest, skipping CourseConfig document creation`),u;let d={_id:`CourseConfig`,...t.courseConfig,courseID:t.courseId};delete d._rev,await c.put(d),u.restored=1,logger.info(`CourseConfig document created for course: ${t.courseId}`)}catch(t){let c=t instanceof Error?t.message:JSON.stringify(t);u.errors.push(`Failed to restore CourseConfig: ${c}`),logger.error(`CourseConfig restoration failed:`,t)}return u}calculateExpectedCounts(t){let c={};for(let u of t.chunks)c[u.docType]=(c[u.docType]||0)+u.documentCount;return t.designDocs.length>0&&(c._design=t.designDocs.length),c}async cleanupFailedMigration(t){logger.info(`Cleaning up failed migration...`);try{let c=(await t.allDocs()).rows.map(t=>({_id:t.id,_rev:t.value.rev,_deleted:!0}));c.length>0&&(await t.bulkDocs(c),logger.info(`Cleaned up ${c.length} documents from failed migration`))}catch(t){throw logger.error(`Failed to cleanup documents:`,t),t}}reportProgress(t,c,u,d){this.progressCallback&&this.progressCallback({phase:t,current:c,total:u,message:d})}isLocalPath(t){return!t.startsWith(`http://`)&&!t.startsWith(`https://`)}},init_dataDirectory(),init_navigators(),init_Pipeline(),QuotaRoundRobinMixer=class{mix(t,c){if(t.length===0)return[];let u=Math.ceil(c/t.length),d=t.map(t=>[...t.weighted].sort((t,c)=>c.score-t.score).slice(0,u));for(let t=d.length-1;t>0;t--){let c=Math.floor(Math.random()*(t+1));[d[t],d[c]]=[d[c],d[t]]}let m=[],g=0,b=Array(d.length).fill(0);for(;m.length<c&&g<d.length;){g=0;for(let t=0;t<d.length&&!(m.length>=c);t++)b[t]<d[t].length?(m.push(d[t][b[t]]),b[t]++):g++}return m}},init_logger(),init_navigators(),MAX_RUNS2=10,runHistory2=[],mixerDebugAPI={get runs(){return[...runHistory2]},showRun(t=0){if(runHistory2.length===0){logger.info(`[Mixer Debug] No runs captured yet.`);return}let c;if(typeof t==`number`){if(c=runHistory2[t],!c){logger.info(`[Mixer Debug] No run found at index ${t}. History length: ${runHistory2.length}`);return}}else if(c=runHistory2.find(c=>c.runId.endsWith(t)),!c){logger.info(`[Mixer Debug] No run found matching ID '${t}'.`);return}printMixerSummary(c)},showLastMix(){this.showRun(0)},explainSourceBalance(){if(runHistory2.length===0){logger.info(`[Mixer Debug] No runs captured yet.`);return}let t=runHistory2[0];console.group(`⚖️ Source Balance Analysis`),logger.info(`Mixer: ${t.mixerType}`),logger.info(`Requested limit: ${t.requestedLimit}`),t.quotaPerSource&&logger.info(`Quota per source: ${t.quotaPerSource}`),console.group(`Input Distribution:`);for(let c of t.sourceSummaries){let t=c.sourceName||c.sourceId;logger.info(`${t}:`),logger.info(` Provided: ${c.totalCards} cards (${c.reviewCount} reviews, ${c.newCount} new)`),logger.info(` Score range: [${c.scoreRange[0].toFixed(2)}, ${c.scoreRange[1].toFixed(2)}]`)}console.groupEnd(),console.group(`Selection Results:`);for(let c of t.sourceBreakdowns){let t=c.sourceName||c.sourceId;logger.info(`${t}:`),logger.info(` Selected: ${c.totalSelected}/${c.reviewsProvided+c.newProvided} (${c.selectionRate.toFixed(1)}%)`),logger.info(` Reviews: ${c.reviewsSelected}/${c.reviewsProvided}`),logger.info(` New: ${c.newSelected}/${c.newProvided}`),c.reviewsProvided>0&&c.reviewsSelected===0&&logger.info(` ⚠️ Had reviews but none selected!`),c.totalSelected===0&&c.reviewsProvided+c.newProvided>0&&logger.info(` ⚠️ Had cards but none selected!`)}console.groupEnd();let c=t.sourceBreakdowns.map(t=>t.selectionRate),u=c.reduce((t,c)=>t+c,0)/c.length,d=Math.max(...c.map(t=>Math.abs(t-u)));d>20&&(logger.info(`
|
|
411
411
|
\u26A0\uFE0F Significant imbalance detected (max deviation: ${d.toFixed(1)}%)`),logger.info(`Possible causes:`),logger.info(` - Score range differences between sources`),logger.info(` - One source has much better quality cards`),logger.info(` - Different card availability (reviews vs new)`)),console.groupEnd()},compareScores(){if(runHistory2.length===0){logger.info(`[Mixer Debug] No runs captured yet.`);return}let t=runHistory2[0];console.group(`📊 Score Distribution Comparison`),console.table(t.sourceSummaries.map(t=>({source:t.sourceName||t.sourceId,cards:t.totalCards,min:t.bottomScore.toFixed(3),max:t.topScore.toFixed(3),avg:t.avgScore.toFixed(3),range:(t.topScore-t.bottomScore).toFixed(3)})));let c=t.sourceSummaries.map(t=>t.topScore-t.bottomScore),u=t.sourceSummaries.map(t=>t.avgScore),d=Math.max(...c)-Math.min(...c),m=Math.max(...u)-Math.min(...u);(d>.3||m>.2)&&(logger.info(`
|
|
@@ -456,7 +456,7 @@ Example:
|
|
|
456
456
|
`:`Mixed content session created with:
|
|
457
457
|
`,Sr=O.map(t=>{let c=getCardOrigin(t),u=Number.isFinite(t.score)?t.score.toFixed(2):`+INF`;return xr+=`${c===`review`?`Review`:`New`}: ${t.courseId}::${t.cardId} (score: ${u})
|
|
458
458
|
`,this._buildSupplyItem(t,c)});if(u){let t=this.supplyQ.mergeToFront(Sr,t=>t.cardID,yr);xr+=`Additive merge: ${t} cards added to front of supplyQ
|
|
459
|
-
`}else if(c)this.supplyQ.replaceAll(Sr,t=>t.cardID);else for(let t of Sr)this.supplyQ.add(t,t.cardID);return this.log(xr),br}_buildSupplyItem(t,c=getCardOrigin(t)){let u={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,score:t.score};return c===`review`?{...u,status:`review`,reviewID:t.reviewID}:{...u,status:`new`}}_getItemsToHydrate(){let t=[],c=3,u=2;for(let c=0;c<Math.min(3,this.supplyQ.length);c++)t.push(this.supplyQ.peek(c));for(let c=0;c<Math.min(2,this.failedQ.length);c++)t.push(this.failedQ.peek(c));return t}_selectNextItemToHydrate(){if(this.supplyQ.length===0&&this.failedQ.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;let t=this.supplyQ.length>0?this.supplyQ.peek(0):null;return this._minCardsGuarantee>0&&t?t:this.failedQ.length>0&&this._shouldInterleaveFailed(t!==null)?this.failedQ.peek(0):t||(this.failedQ.length>0?this.failedQ.peek(0):(this.log(`No more cards available for the session!`),null))}_shouldInterleaveFailed(t){return this.failedQ.length===0?!1:!t||this._secondsRemaining-this.estimateCleanupTime()<=_SessionController.FAILED_ENDGAME_SLACK_SECONDS?!0:this._supplyDrawsSinceFailed>=_SessionController.FAILED_INTERLEAVE_EVERY}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.supplyQ.length===0&&this.failedQ.length===0&&(this.log(`nextCard: queues empty, awaiting in-flight replan before drawing`),await this._replanPromise),this.supplyQ.length<=_SessionController.DEPLETION_PREFETCH_THRESHOLD&&this._secondsRemaining>0&&!this._replanPromise&&(this._suppressQualityReplan=!1,this.log(`[AutoReplan:depletion] supplyQ has ${this.supplyQ.length} card(s) (${this.failedQ.length} failed pending) with ${this._secondsRemaining}s remaining. Triggering background replan.`),this.requestReplan({label:`auto:depletion`,mode:`merge`})),!this._suppressQualityReplan&&this._wellIndicatedRemaining<=3&&this.supplyQ.length>0&&!this._replanPromise&&(this.log(`[AutoReplan:quality] ${this._wellIndicatedRemaining} well-indicated cards remaining (supplyQ: ${this.supplyQ.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.supplyQ.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.supplyQ.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`:`supplyQ`;return recordCardPresentation(t.cardID,t.courseID,this.courseNameCache.get(t.courseID),u,d,t.score),snapshotQueues(this.supplyQ.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),this._supplyDrawsSinceFailed=0}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.failedQ.peek(0)?.cardID===t.cardID?(this.failedQ.dequeue(t=>t.cardID),this._supplyDrawsSinceFailed=0):this.supplyQ.peek(0)?.cardID===t.cardID&&(this.supplyQ.dequeue(t=>t.cardID),this._supplyDrawsSinceFailed++,this._wellIndicatedRemaining>0&&this._wellIndicatedRemaining--)}_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),_defineProperty$2(_SessionController2,`FAILED_INTERLEAVE_EVERY`,4),_defineProperty$2(_SessionController2,`FAILED_ENDGAME_SLACK_SECONDS`,20),_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?`
|
|
459
|
+
`}else if(c)this.supplyQ.replaceAll(Sr,t=>t.cardID);else for(let t of Sr)this.supplyQ.add(t,t.cardID);return this.log(xr),br}_buildSupplyItem(t,c=getCardOrigin(t)){let u={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,score:t.score};return c===`review`?{...u,status:`review`,reviewID:t.reviewID}:{...u,status:`new`}}_getItemsToHydrate(){let t=[],c=3,u=2;for(let c=0;c<Math.min(3,this.supplyQ.length);c++)t.push(this.supplyQ.peek(c));for(let c=0;c<Math.min(2,this.failedQ.length);c++)t.push(this.failedQ.peek(c));return t}_selectNextItemToHydrate(){if(this.supplyQ.length===0&&this.failedQ.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;let t=this.supplyQ.length>0?this.supplyQ.peek(0):null;return this._minCardsGuarantee>0&&t?t:this.failedQ.length>0&&this._shouldInterleaveFailed(t!==null)?this.failedQ.peek(0):t||(this.failedQ.length>0?this.failedQ.peek(0):(this.log(`No more cards available for the session!`),null))}_shouldInterleaveFailed(t){return this.failedQ.length===0?!1:!t||this._secondsRemaining-this.estimateCleanupTime()<=_SessionController.FAILED_ENDGAME_SLACK_SECONDS?!0:this._supplyDrawsSinceFailed>=_SessionController.FAILED_INTERLEAVE_EVERY}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.supplyQ.length===0&&this.failedQ.length===0&&(this.log(`nextCard: queues empty, awaiting in-flight replan before drawing`),await this._replanPromise),this.supplyQ.length<=_SessionController.DEPLETION_PREFETCH_THRESHOLD&&this._secondsRemaining>0&&!this._replanPromise&&(this._suppressQualityReplan=!1,this.log(`[AutoReplan:depletion] supplyQ has ${this.supplyQ.length} card(s) (${this.failedQ.length} failed pending) with ${this._secondsRemaining}s remaining. Triggering background replan.`),this.requestReplan({label:`auto:depletion`,mode:`merge`})),!this._suppressQualityReplan&&this._wellIndicatedRemaining<=3&&this.supplyQ.length>0&&!this._replanPromise&&(this.log(`[AutoReplan:quality] ${this._wellIndicatedRemaining} well-indicated cards remaining (supplyQ: ${this.supplyQ.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.supplyQ.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.supplyQ.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`:`supplyQ`;return recordCardPresentation(t.cardID,t.courseID,this.courseNameCache.get(t.courseID),u,d,t.score),snapshotQueues(this.supplyQ.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),this._supplyDrawsSinceFailed=0}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.failedQ.peek(0)?.cardID===t.cardID?(this.failedQ.dequeue(t=>t.cardID),this._supplyDrawsSinceFailed=0):this.supplyQ.peek(0)?.cardID===t.cardID&&(this.supplyQ.dequeue(t=>t.cardID),this._supplyDrawsSinceFailed++,this._wellIndicatedRemaining>0&&this._wellIndicatedRemaining--)}_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),_defineProperty$2(_SessionController2,`FAILED_INTERLEAVE_EVERY`,4),_defineProperty$2(_SessionController2,`FAILED_ENDGAME_SLACK_SECONDS`,20),_SessionController2),init_TagFilteredContentSource(),init_factory(),init_userDBHelpers()}));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
460
|
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
461
|
`);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:yr=!1,inSSR:br=!1,ssrCssVars:xr=``,bindingMetadata:Sr=EMPTY_OBJ,inline:Cr=!1,isTS:wr=!1,onError:Tr=defaultOnError,onWarn:Er=defaultOnWarn,compatConfig:Dr}){let Or=c.replace(/\?.*$/,``).match(/([^/\\]+)\.\w+$/),kr={filename:c,selfName:Or&&capitalize(camelize(Or[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:yr,inSSR:br,ssrCssVars:xr,bindingMetadata:Sr,inline:Cr,isTS:wr,onError:Tr,onWarn:Er,compatConfig:Dr,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=kr.helpers.get(t)||0;return kr.helpers.set(t,c+1),t},removeHelper(t){let c=kr.helpers.get(t);if(c){let u=c-1;u?kr.helpers.set(t,u):kr.helpers.delete(t)}},helperString(t){return`_${helperNameMap[kr.helper(t)]}`},replaceNode(t){if(process.env.NODE_ENV!==`production`){if(!kr.currentNode)throw Error(`Node being replaced is already removed.`);if(!kr.parent)throw Error(`Cannot replace root node.`)}kr.parent.children[kr.childIndex]=kr.currentNode=t},removeNode(t){if(process.env.NODE_ENV!==`production`&&!kr.parent)throw Error(`Cannot remove root node.`);let c=kr.parent.children,u=t?c.indexOf(t):kr.currentNode?kr.childIndex:-1;if(process.env.NODE_ENV!==`production`&&u<0)throw Error(`node being removed is not a child of current parent`);!t||t===kr.currentNode?(kr.currentNode=null,kr.onNodeRemoved()):kr.childIndex>u&&(kr.childIndex--,kr.onNodeRemoved()),kr.parent.children.splice(u,1)},onNodeRemoved:NOOP,addIdentifiers(t){},removeIdentifiers(t){},hoist(t){isString$1(t)&&(t=createSimpleExpression(t)),kr.hoists.push(t);let c=createSimpleExpression(`_hoisted_${kr.hoists.length}`,!1,t.loc,2);return c.hoisted=t,c},cache(t,c=!1,u=!1){let d=createCacheExpression(kr.cached.length,t,c,u);return kr.cached.push(d),d}};return kr.filters=new Set,kr}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
462
|
`+` `.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,18 +469,18 @@ ${b}`:g)}let E=Function(`Vue`,T)(m);return E._rc=!0,g[S]=E}u.registerRuntimeComp
|
|
|
469
469
|
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),yr=O&&O.a,br=O&&O.d;O&&(b/=br,S/=yr,E/=yr,T/=br,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,yr=t.extraEventProperties;if(c=c||u&&u[expando],c){var br,xr=c.options,Sr=`on`+d.charAt(0).toUpperCase()+d.substr(1);window.CustomEvent&&!IE11OrLess&&!Edge?br=new CustomEvent(d,{bubbles:!0,cancelable:!0}):(br=document.createEvent(`Event`),br.initEvent(d,!0,!0)),br.to=b||u,br.from=S||u,br.item=m||u,br.clone=g,br.oldIndex=C,br.newIndex=w,br.oldDraggableIndex=T,br.newDraggableIndex=E,br.originalEvent=D,br.pullMode=O?O.lastPutMode:void 0;var Cr=_objectSpread2(_objectSpread2({},yr),PluginManager.getEventProperties(d,c));for(var wr in Cr)br[wr]=Cr[wr];u&&u.dispatchEvent(br),xr[Sr]&&xr[Sr].call(c,br)}}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,yr;for(D>E?(yr=E,O=D):(yr=D,O=E+1);yr<O;yr++)~multiDragElements.indexOf(T[yr])||(toggleClass(T[yr],w.selectedClass,!0),multiDragElements.push(T[yr]),dispatchEvent({sortable:m,rootEl:u,name:`select`,targetEl:T[yr],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 br=getRect(dragEl$1),xr=index(dragEl$1,`:not(.`+this.options.selectedClass+`)`);if(!initialFolding&&w.animation&&(dragEl$1.thisAnimationDuration=null),C.captureAnimationState(),!initialFolding&&(w.animation&&(dragEl$1.fromRect=br,multiDragElements.forEach(function(t){if(t.thisAnimationDuration=null,t!==dragEl$1){var c=folding?getRect(t):br;t.fromRect=c,C.addAnimationState({target:t,rect:c})}})),removeMultiDragElements(),multiDragElements.forEach(function(t){T[xr]?d.insertBefore(t,T[xr]):d.appendChild(t),xr++}),b===index(dragEl$1))){var Sr=!1;multiDragElements.forEach(function(t){if(t.sortableIndex!==index(t)){Sr=!0;return}}),Sr&&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,yr=!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(),yr=!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 yr;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 yr;if(g)return parentEl=rootEl,capture(),this._hideClone(),dragOverEvent(`revert`),Sortable.eventCanceled||(nextEl?rootEl.insertBefore(dragEl,nextEl):rootEl.appendChild(dragEl)),completed(!0);var br=lastChild(c,b.draggable);if(!br||_ghostIsLast(t,D,this)&&!br.animated){if(br===dragEl)return completed(!1);if(br&&c===t.target&&(u=br),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(br&&_ghostIsFirst(t,D,this)){var xr=getChild(c,0,b,!0);if(xr===dragEl)return completed(!1);if(u=xr,m=getRect(u),_onMove(rootEl,c,dragEl,d,u,m,t,!1)!==!1)return capture(),c.insertBefore(dragEl,xr),parentEl=c,changed(),completed(!0)}else if(u.parentNode===c){m=getRect(u);var Sr=0,Cr,wr=dragEl.parentNode!==c,Tr=!_dragElInRowColumn(dragEl.animated&&dragEl.toRect||d,u.animated&&u.toRect||m,D),Er=D?`top`:`left`,Dr=isScrolledPast(u,`top`,`top`)||isScrolledPast(dragEl,`top`,`top`),Or=Dr?Dr.scrollTop:void 0;lastTarget!==u&&(Cr=m[Er],pastFirstInvertThresh=!1,isCircumstantialInvert=!Tr&&b.invertSwap||wr),Sr=_getSwapDirection(t,u,m,D,Tr?1:b.swapThreshold,b.invertedSwapThreshold==null?b.swapThreshold:b.invertedSwapThreshold,isCircumstantialInvert,lastTarget===u);var kr;if(Sr!==0){var Ar=index(dragEl);do Ar-=Sr,kr=parentEl.children[Ar];while(kr&&(css(kr,`display`)===`none`||kr===ghostEl))}if(Sr===0||kr===u)return completed(!1);lastTarget=u,lastDirection=Sr;var jr=u.nextElementSibling,Mr=!1;Mr=Sr===1;var Nr=_onMove(rootEl,c,dragEl,d,u,m,t,Mr);if(Nr!==!1)return(Nr===1||Nr===-1)&&(Mr=Nr===1),_silent=!0,setTimeout(_unsilent,30),capture(),Mr&&!jr?c.appendChild(dragEl):u.parentNode.insertBefore(dragEl,Mr?jr:u),Dr&&scrollBy(Dr,0,Or-Dr.scrollTop),parentEl=dragEl.parentNode,Cr!==void 0&&!isCircumstantialInvert&&(targetMoveDistance=Math.abs(Cr-getRect(u)[Er])),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,yr=getRect(O),br=yr.top,xr=yr.bottom,Sr=yr.left,Cr=yr.right,wr=yr.width,Tr=yr.height,Er=void 0,Dr=void 0,Or=O.scrollWidth,kr=O.scrollHeight,Ar=css(O),jr=O.scrollLeft,Mr=O.scrollTop;O===C?(Er=wr<Or&&(Ar.overflowX===`auto`||Ar.overflowX===`scroll`||Ar.overflowX===`visible`),Dr=Tr<kr&&(Ar.overflowY===`auto`||Ar.overflowY===`scroll`||Ar.overflowY===`visible`)):(Er=wr<Or&&(Ar.overflowX===`auto`||Ar.overflowX===`scroll`),Dr=Tr<kr&&(Ar.overflowY===`auto`||Ar.overflowY===`scroll`));var Nr=Er&&(Math.abs(Cr-m)<=b&&jr+wr<Or)-(Math.abs(Sr-m)<=b&&!!jr),Pr=Dr&&(Math.abs(xr-g)<=b&&Mr+Tr<kr)-(Math.abs(br-g)<=b&&!!Mr);if(!autoScrolls[E])for(var Fr=0;Fr<=E;Fr++)autoScrolls[Fr]||(autoScrolls[Fr]={});(autoScrolls[E].vx!=Nr||autoScrolls[E].vy!=Pr||autoScrolls[E].el!==O)&&(autoScrolls[E].el=O,autoScrolls[E].vx=Nr,autoScrolls[E].vy=Pr,clearInterval(autoScrolls[E].pid),(Nr!=0||Pr!=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,yr,br,xr,Sr;if(O)for(yr in c){if(xr=c[yr],t.noTargetGet?(Sr=m(O,yr),br=Sr&&Sr.value):br=O[yr],D=w(T?yr:u+(E?`.`:`#`)+yr,t.forced),!D&&br!==void 0){if(typeof xr==typeof br)continue;C(xr,br)}(t.sham||br&&br.sham)&&g(xr,`sham`,!0),b(O,yr,xr,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),yr=0,br,xr,Sr,Cr,wr,Tr;if(D&&(E=d(E,T>2?arguments[2]:void 0,2)),O!=null&&!(u==Array&&b(O)))for(Cr=O.call(c),wr=Cr.next,xr=new u;!(Sr=wr.call(Cr)).done;yr++)Tr=D?g(Cr,E,[Sr.value,yr],!0):Sr.value,C(xr,yr,Tr);else for(br=S(c.length),xr=new u(br);br>yr;yr++)Tr=D?E(c[yr],yr):c[yr],C(xr,yr,Tr);return xr.length=yr,xr}}),"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,yr=/\$([$&'`]|\d\d?|<[^>]*>)/g,br=/\$([$&'`]|\d\d?)/g,maybeToString=function(t){return t===void 0?t:String(t)};d(`replace`,2,function(t,c,u,d){var xr=d.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,Sr=d.REPLACE_KEEPS_$0,Cr=xr?`$`:`$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(!xr&&Sr||typeof d==`string`&&d.indexOf(Cr)===-1){var g=u(c,t,this,d);if(g.done)return g.value}var C=m(t),O=String(this),yr=typeof d==`function`;yr||(d=String(d));var br=C.global;if(br){var wr=C.unicode;C.lastIndex=0}for(var Tr=[];;){var Er=T(C,O);if(Er===null||(Tr.push(Er),!br))break;String(Er[0])===``&&(C.lastIndex=w(O,b(C.lastIndex),wr))}for(var Dr=``,Or=0,kr=0;kr<Tr.length;kr++){Er=Tr[kr];for(var Ar=String(Er[0]),jr=E(D(S(Er.index),O.length),0),Mr=[],Nr=1;Nr<Er.length;Nr++)Mr.push(maybeToString(Er[Nr]));var Pr=Er.groups;if(yr){var Fr=[Ar].concat(Mr,jr,O);Pr!==void 0&&Fr.push(Pr);var Ir=String(d.apply(void 0,Fr))}else Ir=getSubstitution(Ar,O,jr,Mr,Pr,d);jr>=Or&&(Dr+=O.slice(Or,jr)+Ir,Or=jr+Ar.length)}return Dr+O.slice(Or)}];function getSubstitution(t,u,d,m,b,S){var C=d+t.length,w=m.length,T=br;return b!==void 0&&(b=g(b),T=yr),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,yr=E.set;set=function(t,c){return yr.call(E,t,c),c},get=function(t){return D.call(E,t)||{}},has=function(t){return O.call(E,t)}}else{var br=C(`state`);w[br]=!0,set=function(t,c){return b(t,br,c),c},get=function(t){return S(t,br)?t[br]:{}},has=function(t){return S(t,br)}}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`,yr=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},br,NullProtoObject=function(){try{br=document.domain&&new ActiveXObject(`htmlfile`)}catch{}NullProtoObject=br?NullProtoObjectViaActiveX(br):NullProtoObjectViaIFrame();for(var t=g.length;t--;)delete NullProtoObject[D][g[t]];return NullProtoObject()};b[yr]=!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[yr]=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`),yr=O.IteratorPrototype,br=O.BUGGY_SAFARI_ITERATORS,xr=T(`iterator`),Sr=`keys`,Cr=`values`,wr=`entries`,returnThis=function(){return this};t.exports=function(t,c,u,T,O,Tr,Er){m(u,c,T);var getIterationMethod=function(t){if(t===O&&jr)return jr;if(!br&&t in kr)return kr[t];switch(t){case Sr:return function keys(){return new u(this,t)};case Cr:return function values(){return new u(this,t)};case wr:return function entries(){return new u(this,t)}}return function(){return new u(this)}},Dr=c+` Iterator`,Or=!1,kr=t.prototype,Ar=kr[xr]||kr[`@@iterator`]||O&&kr[O],jr=!br&&Ar||getIterationMethod(O),Mr=c==`Array`&&kr.entries||Ar,Nr,Pr,Fr;if(Mr&&(Nr=g(Mr.call(new t)),yr!==Object.prototype&&Nr.next&&(!E&&g(Nr)!==yr&&(b?b(Nr,yr):typeof Nr[xr]!=`function`&&C(Nr,xr,returnThis)),S(Nr,Dr,!0,!0),E&&(D[Dr]=returnThis))),O==Cr&&Ar&&Ar.name!==Cr&&(Or=!0,jr=function values(){return Ar.call(this)}),(!E||Er)&&kr[xr]!==jr&&C(kr,xr,jr),D[c]=jr,O)if(Pr={values:getIterationMethod(Cr),keys:Tr?jr:getIterationMethod(Sr),entries:getIterationMethod(wr)},Er)for(Fr in Pr)(br||Or||!(Fr in kr))&&w(kr,Fr,Pr[Fr]);else d({target:c,proto:!0,forced:br||Or},Pr);return Pr}}),"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),yr=c.source,br=0,xr=t;return D&&(O=O.replace(`y`,``),O.indexOf(`g`)===-1&&(O+=`g`),xr=String(t).slice(c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&t[c.lastIndex-1]!==`
|
|
470
470
|
`)&&(yr=`(?: `+yr+`)`,xr=` `+xr,br++),m=RegExp(`^(?:`+yr+`)`,O)),T&&(m=RegExp(`^`+yr+`$(?!\\s)`,O)),C&&(u=c.lastIndex),S=g.call(D?m:c,xr),D?S?(S.input=S.input.slice(br),S[0]=S[0].slice(br),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`),yr=D(`isConcatSpreadable`),br=9007199254740991,xr=`Maximum allowed index exceeded`,Sr=O>=51||!m(function(){var t=[];return t[yr]=!1,t.concat()[0]!==t}),Cr=E(`concat`),isConcatSpreadable=function(t){if(!b(t))return!1;var c=t[yr];return c===void 0?g(t):!!c};d({target:`Array`,proto:!0,forced:!Sr||!Cr},{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>br)throw TypeError(xr);for(g=0;g<E;g++,d++)g in D&&w(u,d,D[g])}else{if(d>=br)throw TypeError(xr);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,yr;D<b;){if(D in u){if(yr=O?O(u[D],D,c):u[D],C>0&&d(yr))E=flattenIntoArray(t,c,yr,m(yr.length),E,C-1)-1;else{if(E>=9007199254740991)throw TypeError(`Exceed the acceptable array length`);t[E]=yr}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}),yr=Math.max,br=Math.min,xr=9007199254740991,Sr=`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,Cr,wr,Tr,Er;if(E===0?D=O=0:E===1?(D=0,O=d-T):(D=E-2,O=br(yr(g(c),0),d-T)),d+D-O>xr)throw TypeError(Sr);for(Cr=C(u,O),wr=0;wr<O;wr++)Tr=T+wr,Tr in u&&w(Cr,wr,u[Tr]);if(Cr.length=O,D<O){for(wr=T;wr<d-O;wr++)Tr=wr+O,Er=wr+D,Tr in u?u[Er]=u[Tr]:delete u[Er];for(wr=d;wr>d-O+D;wr--)delete u[wr-1]}else if(D>O)for(wr=d-O;wr>T;wr--)Tr=wr+O-1,Er=wr+D-1,Tr in u?u[Er]=u[Tr]:delete u[Er];for(wr=0;wr<D;wr++)u[wr+T]=arguments[wr+2];return u.length=d-O+D,Cr}})}),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`),yr=u(`825a`),br=u(`7b0b`),xr=u(`fc6a`),Sr=u(`c04e`),Cr=u(`5c6c`),wr=u(`7c73`),Tr=u(`df75`),Er=u(`241c`),Dr=u(`057f`),Or=u(`7418`),kr=u(`06cf`),Ar=u(`9bf2`),jr=u(`d1e7`),Mr=u(`9112`),Nr=u(`6eeb`),Pr=u(`5692`),Fr=u(`f772`),Ir=u(`d012`),Lr=u(`90e3`),Rr=u(`b622`),zr=u(`e538`),Br=u(`746f`),Vr=u(`d44e`),Hr=u(`69f3`),Ur=u(`b727`).forEach,Wr=Fr(`hidden`),Gr=`Symbol`,Kr=`prototype`,qr=Rr(`toPrimitive`),Jr=Hr.set,Yr=Hr.getterFor(Gr),Xr=Object[Kr],Zr=m.Symbol,Qr=g(`JSON`,`stringify`),$r=kr.f,ei=Ar.f,ti=Dr.f,ni=jr.f,ri=Pr(`symbols`),ii=Pr(`op-symbols`),ai=Pr(`string-to-symbol-registry`),oi=Pr(`symbol-to-string-registry`),si=Pr(`wks`),ci=m.QObject,li=!ci||!ci[Kr]||!ci[Kr].findChild,ui=S&&T(function(){return wr(ei({},`a`,{get:function(){return ei(this,`a`,{value:7}).a}})).a!=7})?function(t,c,u){var d=$r(Xr,c);d&&delete Xr[c],ei(t,c,u),d&&t!==Xr&&ei(Xr,c,d)}:ei,wrap=function(t,c){var u=ri[t]=wr(Zr[Kr]);return Jr(u,{type:Gr,tag:t,description:c}),S||(u.description=c),u},di=w?function(t){return typeof t==`symbol`}:function(t){return Object(t)instanceof Zr},fi=function defineProperty(t,c,u){t===Xr&&fi(ii,c,u),yr(t);var d=Sr(c,!0);return yr(u),E(ri,d)?(u.enumerable?(E(t,Wr)&&t[Wr][d]&&(t[Wr][d]=!1),u=wr(u,{enumerable:Cr(0,!1)})):(E(t,Wr)||ei(t,Wr,Cr(1,{})),t[Wr][d]=!0),ui(t,d,u)):ei(t,d,u)},pi=function defineProperties(t,c){yr(t);var u=xr(c);return Ur(Tr(u).concat(vi(u)),function(c){(!S||hi.call(u,c))&&fi(t,c,u[c])}),t},mi=function create(t,c){return c===void 0?wr(t):pi(wr(t),c)},hi=function propertyIsEnumerable(t){var c=Sr(t,!0),u=ni.call(this,c);return this===Xr&&E(ri,c)&&!E(ii,c)?!1:u||!E(this,c)||!E(ri,c)||E(this,Wr)&&this[Wr][c]?u:!0},gi=function getOwnPropertyDescriptor(t,c){var u=xr(t),d=Sr(c,!0);if(!(u===Xr&&E(ri,d)&&!E(ii,d))){var m=$r(u,d);return m&&E(ri,d)&&!(E(u,Wr)&&u[Wr][d])&&(m.enumerable=!0),m}},_i=function getOwnPropertyNames(t){var c=ti(xr(t)),u=[];return Ur(c,function(t){!E(ri,t)&&!E(Ir,t)&&u.push(t)}),u},vi=function getOwnPropertySymbols(t){var c=t===Xr,u=ti(c?ii:xr(t)),d=[];return Ur(u,function(t){E(ri,t)&&(!c||E(Xr,t))&&d.push(ri[t])}),d};C||(Zr=function Symbol(){if(this instanceof Zr)throw TypeError(`Symbol is not a constructor`);var t=!arguments.length||arguments[0]===void 0?void 0:String(arguments[0]),c=Lr(t),setter=function(t){this===Xr&&setter.call(ii,t),E(this,Wr)&&E(this[Wr],c)&&(this[Wr][c]=!1),ui(this,c,Cr(1,t))};return S&&li&&ui(Xr,c,{configurable:!0,set:setter}),wrap(c,t)},Nr(Zr[Kr],`toString`,function toString(){return Yr(this).tag}),Nr(Zr,`withoutSetter`,function(t){return wrap(Lr(t),t)}),jr.f=hi,Ar.f=fi,kr.f=gi,Er.f=Dr.f=_i,Or.f=vi,zr.f=function(t){return wrap(Rr(t),t)},S&&(ei(Zr[Kr],`description`,{configurable:!0,get:function description(){return Yr(this).description}}),b||Nr(Xr,`propertyIsEnumerable`,hi,{unsafe:!0}))),d({global:!0,wrap:!0,forced:!C,sham:!C},{Symbol:Zr}),Ur(Tr(si),function(t){Br(t)}),d({target:Gr,stat:!0,forced:!C},{for:function(t){var c=String(t);if(E(ai,c))return ai[c];var u=Zr(c);return ai[c]=u,oi[u]=c,u},keyFor:function keyFor(t){if(!di(t))throw TypeError(t+` is not a symbol`);if(E(oi,t))return oi[t]},useSetter:function(){li=!0},useSimple:function(){li=!1}}),d({target:`Object`,stat:!0,forced:!C,sham:!S},{create:mi,defineProperty:fi,defineProperties:pi,getOwnPropertyDescriptor:gi}),d({target:`Object`,stat:!0,forced:!C},{getOwnPropertyNames:_i,getOwnPropertySymbols:vi}),d({target:`Object`,stat:!0,forced:T(function(){Or.f(1)})},{getOwnPropertySymbols:function getOwnPropertySymbols(t){return Or.f(br(t))}}),Qr&&d({target:`JSON`,stat:!0,forced:!C||T(function(){var t=Zr();return Qr([t])!=`[null]`||Qr({a:t})!=`{}`||Qr(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||di(t)))return D(replacer)||(replacer=function(t,c){if(typeof m==`function`&&(c=m.call(this,t,c)),!di(c))return c}),u[1]=replacer,Qr.apply(null,u)}}),Zr[Kr][qr]||Mr(Zr[Kr],qr,Zr[Kr].valueOf),Vr(Zr,Gr),Ir[Wr]=!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,yr,br,xr){for(var Sr=g(O),Cr=m(Sr),wr=d(yr,br,3),Tr=b(Cr.length),Er=0,Dr=xr||S,Or=c?Dr(O,Tr):u?Dr(O,0):void 0,kr,Ar;Tr>Er;Er++)if((D||Er in Cr)&&(kr=Cr[Er],Ar=wr(kr,Er,Sr),t)){if(c)Or[Er]=Ar;else if(Ar)switch(t){case 3:return!0;case 5:return kr;case 6:return Er;case 2:C.call(Or,kr)}else if(T)return!1}return E?-1:w||T?T:Or}};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 yr=g(t),br=!m(function(){var c={};return c[yr]=function(){return 7},``[t](c)!=7}),xr=br&&!m(function(){var c=!1,u=/a/;return t===`split`&&(u={},u.constructor={},u.constructor[C]=function(){return u},u.flags=``,u[yr]=/./[yr]),u.exec=function(){return c=!0,null},u[yr](``),!c});if(!br||!xr||t===`replace`&&!(w&&T&&!D)||t===`split`&&!O){var Sr=/./[yr],Cr=u(yr,``[t],function(t,c,u,d,m){return c.exec===b?br&&!m?{done:!0,value:Sr.call(c,u,d)}:{done:!0,value:t.call(u,c,d)}:{done:!1}},{REPLACE_KEEPS_$0:T,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:D}),wr=Cr[0],Tr=Cr[1];d(String.prototype,t,wr),d(RegExp.prototype,yr,c==2?function(t,c){return Tr.call(t,this,c)}:function(t){return Tr.call(t,this)})}E&&S(RegExp.prototype[yr],`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 yr in g)if(O[yr]!==g[yr])try{b(O,yr,g[yr])}catch{O[yr]=g[yr]}}}}}),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 yr=O.toString,br=String(T(`test`))==`Symbol(test)`,xr=/^Symbol\((.*)\)[^)]+$/;C(O,`description`,{configurable:!0,get:function description(){var t=S(this)?this.valueOf():this,c=yr.call(t);if(b(E,t))return``;var u=br?c.slice(7,-1):c.replace(xr,`$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
471
|
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`],yr=[O,E,D].flatMap(function(t){return t}).map(function(t){return`on${t}`}),br={manage:O,manageAndEmit:E,emit:D};function isReadOnly(t){return yr.indexOf(t)!==-1}u(`caad`),u(`2ca0`);var xr=`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 xr.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];br[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 Sr=function getHtmlElementFromNode(t){return t.el},Cr=function addContext(t,c){return t.__draggable_context=c},wr=function getContext(t){return t.__draggable_context},Tr=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){Cr(Sr(t),{element:c[u],index:u})})}},{key:`getUnderlyingVm`,value:function getUnderlyingVm(t){return wr(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=wr(g);if(b)return b.index;if(d===0)return 0;var S=Sr(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}(),Er=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,Er.resolveComponent)(t):c?Er.TransitionGroup:t}}function computeComponentStructure(t){var c=t.$slots,u=t.tag,d=t.realList,m=t.getKey;return new Tr({nodes:computeNodes({$slots:c,realList:d,getKey:m}),root:getRootInformation(u),realList:d})}function _emit(t,c){var u=this;(0,Er.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 Dr=null,Or={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}},kr=[`update:modelValue`,`change`].concat(_toConsumableArray([].concat(_toConsumableArray(br.manageAndEmit),_toConsumableArray(br.emit)).map(function(t){return t.toLowerCase()})));c.default=(0,Er.defineComponent)({name:`draggable`,inheritAttrs:!1,props:Or,emits:kr,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(Er.h,S)}catch(t){return this.error=!0,(0,Er.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,Er.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),Dr=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(Dr)!==-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(){Dr=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`),yr=D(`slice`,{ACCESSORS:!0,0:0,1:2}),br=T(`species`),xr=[].slice,Sr=Math.max;d({target:`Array`,proto:!0,forced:!O||!yr},{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,yr;if(g(u)&&(D=u.constructor,typeof D==`function`&&(D===Array||g(D.prototype))?D=void 0:m(D)&&(D=D[br],D===null&&(D=void 0)),D===Array||D===void 0))return xr.call(u,T,E);for(O=new(D===void 0?Array:D)(Sr(E-T,0)),yr=0;T<E;T++,yr++)T in u&&w(O,yr,u[T]);return O.length=yr,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:()=>nr,CardHistoryViewer:()=>at$1,CardLoader:()=>un,CardSearch:()=>Ke$1,CardSearchResults:()=>Qe$1,CardViewer:()=>Q$1,CodeBlockRenderer:()=>Lt$1,CourseCardBrowser:()=>Kn,CourseInformation:()=>$n,CourseTagFilterWidget:()=>lr,Displayable:()=>Displayable,FillInInput:()=>me$2,HeatMap:()=>Ae$1,MarkdownRenderer:()=>yn$1,MdTokenRenderer:()=>gn$1,MultipleChoiceOption:()=>$t,PaginatingToolbar:()=>Ue$1,Question:()=>Question,RadioMultipleChoice:()=>nn,RequestPasswordReset:()=>yn,ResetPassword:()=>Nn,SessionControllerDebug:()=>Bt,SkMouseTrap:()=>Ne$1,SkMouseTrapToolTip:()=>Fe$1,SkldrMouseTrap:()=>I$2,SnackbarService:()=>Be$1,StudySession:()=>Zt,StudySessionTimer:()=>st$1,TFSelect:()=>on,TagsInput:()=>Rn,UserChip:()=>dn,UserInputNumber:()=>cn,UserInputString:()=>de$2,UserLogin:()=>mn,UserLoginAndRegistrationContainer:()=>Cn,UserRegistration:()=>gn,UserTagPreferences:()=>vr,VerifyEmail:()=>An,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`),yr=resolveComponent(`v-dialog`);return t.display?(openBlock(),createBlock(yr,{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:`8`},{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-sort`)])),_:1}),c[3]||(c[3]=createBaseVNode(`strong`,null,`Supply Queue`,-1))]),createBaseVNode(`div`,ft$1,[createBaseVNode(`span`,pt$1,`Length: `+toDisplayString(t.debugInfo.supplyQueue.length),1),createBaseVNode(`span`,mt$1,`Dequeued: `+toDisplayString(t.debugInfo.supplyQueue.dequeueCount),1)]),t.debugInfo.supplyQueue.items.length>0?(openBlock(),createElementBlock(`div`,ht$1,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.supplyQueue.items.slice(0,8),(c,u)=>(openBlock(),createElementBlock(`div`,{key:u,class:`debug-item`},[createBaseVNode(`span`,gt$1,toDisplayString(u)+`: `+toDisplayString(c.courseID)+`::`+toDisplayString(c.cardID),1),createBaseVNode(`span`,_t,`(`+toDisplayString(c.status)+`)`,1),createBaseVNode(`span`,vt$1,toDisplayString(t.fmtScore(c.score)),1)]))),128)),t.debugInfo.supplyQueue.items.length>8?(openBlock(),createElementBlock(`div`,yt,` ... +`+toDisplayString(t.debugInfo.supplyQueue.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,bt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,xt,[createBaseVNode(`div`,St,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[5]||(c[5]=createBaseVNode(`strong`,null,`Failed Cards Queue`,-1))]),createBaseVNode(`div`,Ct,[createBaseVNode(`span`,wt,`Length: `+toDisplayString(t.debugInfo.failedQueue.length),1),createBaseVNode(`span`,Tt,`Dequeued: `+toDisplayString(t.debugInfo.failedQueue.dequeueCount),1)]),t.debugInfo.failedQueue.items.length>0?(openBlock(),createElementBlock(`div`,Et,[(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`,Dt,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Ot,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.failedQueue.items.length>5?(openBlock(),createElementBlock(`div`,kt,` ... +`+toDisplayString(t.debugInfo.failedQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,At,` (empty) `))])]),_:1})]),_:1}),createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`},{default:withCtx(()=>[createVNode(E,{class:`my-2`}),createBaseVNode(`div`,jt,[createBaseVNode(`div`,Mt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-database`)])),_:1}),c[7]||(c[7]=createBaseVNode(`strong`,null,`Hydrated Cards Cache`,-1))]),createBaseVNode(`div`,Nt,[createBaseVNode(`span`,Pt,`Cached: `+toDisplayString(t.debugInfo.hydratedCache.count),1),createBaseVNode(`span`,Ft,`Failed Cache: `+toDisplayString(t.debugInfo.hydratedCache.failedCacheSize),1)]),t.debugInfo.hydratedCache.items.length>0?(openBlock(),createElementBlock(`div`,It,[(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`,Lt,toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1)]))),128)),t.debugInfo.hydratedCache.items.length>8?(openBlock(),createElementBlock(`div`,Rt,` ... +`+toDisplayString(t.debugInfo.hydratedCache.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,zt,` (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`),yr=resolveComponent(`SkMouseTrap`);return t.sessionPrepared?(openBlock(),createElementBlock(`div`,Wt,[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`,Gt)),t.sessionFinished?(openBlock(),createElementBlock(`div`,Kt,[renderSlot(t.$slots,`session-finished`,{sessionRecord:t.sessionRecord,report:t.sessionController?.report},()=>[createBaseVNode(`div`,qt,[c[1]||(c[1]=createBaseVNode(`p`,null,`Study session finished! Great job!`,-1)),t.sessionController?(openBlock(),createElementBlock(`p`,Jt,toDisplayString(t.sessionController.report),1)):createCommentVNode(``,!0),createVNode(T,{"activity-records-getter":()=>t.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):(openBlock(),createElementBlock(`div`,Yt,[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`,Xt,[(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(yr)]),_: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`,tn,[(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`,an,[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`),yr=resolveComponent(`v-card`);return openBlock(),createBlock(yr,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`),yr=resolveComponent(`v-card`);return openBlock(),createBlock(yr,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`,vn,[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`),yr=resolveComponent(`v-col`),br=resolveComponent(`v-row`),xr=resolveComponent(`v-container`);return openBlock(),createBlock(xr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(br,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(yr,{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`,Tn,[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`,En,[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`,Dn,`Welcome, `+toDisplayString(t.username)+`!`,1)):createCommentVNode(``,!0)])):t.verificationStatus===`error`?(openBlock(),createElementBlock(`div`,On,[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`,kn,[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`),yr=resolveComponent(`v-card`),br=resolveComponent(`v-col`),xr=resolveComponent(`v-row`),Sr=resolveComponent(`v-container`);return openBlock(),createBlock(Sr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(xr,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(br,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(yr,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`,Mn,[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`,Fn,[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`,In,toDisplayString(t.item.text),1),t.item.data&&t.item.data.snippet?(openBlock(),createElementBlock(`span`,Ln,` - `+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`),yr=resolveComponent(`card-loader`),br=resolveComponent(`v-chip`),xr=resolveComponent(`v-chip-group`),Sr=resolveComponent(`tags-input`),Cr=resolveComponent(`v-list`),wr=resolveComponent(`v-card`);return openBlock(),createBlock(wr,null,{default:withCtx(()=>[t.updatePending?(openBlock(),createElementBlock(`div`,Bn,[createVNode(b,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,Vn,[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(Cr,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`,Hn,[createVNode(yr,{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`,Un,[createVNode(xr,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cardTags[u.card.cardID],t=>(openBlock(),createBlock(br,{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(Sr,{"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`,Wn,[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`,Gn,[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`),yr=resolveComponent(`course-card-browser`);return t.updatePending?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,Jn,[renderSlot(t.$slots,`header`,{courseConfig:t.courseConfig,courseId:t.courseId},()=>[createBaseVNode(`h1`,Yn,toDisplayString(t.courseConfig.name),1)],!0),createBaseVNode(`p`,Xn,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`,Zn,[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`,Qn,[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(yr,{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`,tr,[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`,ir,[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`,ar,[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`,or,` Including: `+toDisplayString(t.localFilter.include.join(`, `)),1)):createCommentVNode(``,!0),t.localFilter.include.length&&t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,sr,` · `)):createCommentVNode(``,!0),t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,cr,` 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`),yr=resolveComponent(`v-btn`),br=resolveComponent(`v-list`),xr=resolveComponent(`v-progress-circular`),Sr=resolveComponent(`v-card-text`),Cr=resolveComponent(`v-spacer`),wr=resolveComponent(`v-card-actions`),Tr=resolveComponent(`v-card`);return openBlock(),createBlock(Tr,{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(Sr,null,{default:withCtx(()=>[t.courseId?t.loading?(openBlock(),createElementBlock(`div`,_r,[createVNode(xr,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,fr,[createBaseVNode(`div`,pr,[createBaseVNode(`h3`,mr,[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(br,{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`,hr,[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`,gr,toDisplayString(t.formatMultiplier(t.preferences.boost[c])),1),createVNode(yr,{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(yr,{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(wr,{key:1},{default:withCtx(()=>[createVNode(Cr),createVNode(yr,{variant:`text`,disabled:!t.hasChanges,onClick:t.resetToSaved},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Reset `)])),_:1},8,[`disabled`,`onClick`]),createVNode(yr,{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,useAuthStore,useConfigStore,dn,fn,pn,mn,hn,gn,_n,vn,yn,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,$$2,ur,dr,fr,pr,mr,hr,gr,_r,vr,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(`
|
|
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`],yr=[O,E,D].flatMap(function(t){return t}).map(function(t){return`on${t}`}),br={manage:O,manageAndEmit:E,emit:D};function isReadOnly(t){return yr.indexOf(t)!==-1}u(`caad`),u(`2ca0`);var xr=`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 xr.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];br[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 Sr=function getHtmlElementFromNode(t){return t.el},Cr=function addContext(t,c){return t.__draggable_context=c},wr=function getContext(t){return t.__draggable_context},Tr=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){Cr(Sr(t),{element:c[u],index:u})})}},{key:`getUnderlyingVm`,value:function getUnderlyingVm(t){return wr(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=wr(g);if(b)return b.index;if(d===0)return 0;var S=Sr(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}(),Er=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,Er.resolveComponent)(t):c?Er.TransitionGroup:t}}function computeComponentStructure(t){var c=t.$slots,u=t.tag,d=t.realList,m=t.getKey;return new Tr({nodes:computeNodes({$slots:c,realList:d,getKey:m}),root:getRootInformation(u),realList:d})}function _emit(t,c){var u=this;(0,Er.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 Dr=null,Or={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}},kr=[`update:modelValue`,`change`].concat(_toConsumableArray([].concat(_toConsumableArray(br.manageAndEmit),_toConsumableArray(br.emit)).map(function(t){return t.toLowerCase()})));c.default=(0,Er.defineComponent)({name:`draggable`,inheritAttrs:!1,props:Or,emits:kr,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(Er.h,S)}catch(t){return this.error=!0,(0,Er.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,Er.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),Dr=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(Dr)!==-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(){Dr=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`),yr=D(`slice`,{ACCESSORS:!0,0:0,1:2}),br=T(`species`),xr=[].slice,Sr=Math.max;d({target:`Array`,proto:!0,forced:!O||!yr},{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,yr;if(g(u)&&(D=u.constructor,typeof D==`function`&&(D===Array||g(D.prototype))?D=void 0:m(D)&&(D=D[br],D===null&&(D=void 0)),D===Array||D===void 0))return xr.call(u,T,E);for(O=new(D===void 0?Array:D)(Sr(E-T,0)),yr=0;T<E;T++,yr++)T in u&&w(O,yr,u[T]);return O.length=yr,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:()=>nr,CardHistoryViewer:()=>at$1,CardLoader:()=>un,CardSearch:()=>Ke$1,CardSearchResults:()=>Qe$1,CardViewer:()=>Q$1,CodeBlockRenderer:()=>Lt$1,CourseCardBrowser:()=>Kn,CourseInformation:()=>$n,CourseTagFilterWidget:()=>lr,Displayable:()=>Displayable,FillInInput:()=>me$2,HeatMap:()=>Ae$1,MarkdownRenderer:()=>yn$1,MdTokenRenderer:()=>gn$1,MultipleChoiceOption:()=>$t,PaginatingToolbar:()=>Ue$1,Question:()=>Question,RadioMultipleChoice:()=>nn,RequestPasswordReset:()=>yn,ResetPassword:()=>Nn,SessionControllerDebug:()=>Bt,SkMouseTrap:()=>Ne$1,SkMouseTrapToolTip:()=>Fe$1,SkldrMouseTrap:()=>I$2,SnackbarService:()=>Be$1,StudySession:()=>Zt,StudySessionTimer:()=>st$1,TFSelect:()=>on,TagsInput:()=>Rn,UserChip:()=>dn,UserInputNumber:()=>cn,UserInputString:()=>de$2,UserLogin:()=>mn,UserLoginAndRegistrationContainer:()=>Cn,UserRegistration:()=>gn,UserTagPreferences:()=>vr,VerifyEmail:()=>An,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`),yr=resolveComponent(`v-dialog`);return t.display?(openBlock(),createBlock(yr,{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.allowAddTime&&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:`8`},{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-sort`)])),_:1}),c[3]||(c[3]=createBaseVNode(`strong`,null,`Supply Queue`,-1))]),createBaseVNode(`div`,ft$1,[createBaseVNode(`span`,pt$1,`Length: `+toDisplayString(t.debugInfo.supplyQueue.length),1),createBaseVNode(`span`,mt$1,`Dequeued: `+toDisplayString(t.debugInfo.supplyQueue.dequeueCount),1)]),t.debugInfo.supplyQueue.items.length>0?(openBlock(),createElementBlock(`div`,ht$1,[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.debugInfo.supplyQueue.items.slice(0,8),(c,u)=>(openBlock(),createElementBlock(`div`,{key:u,class:`debug-item`},[createBaseVNode(`span`,gt$1,toDisplayString(u)+`: `+toDisplayString(c.courseID)+`::`+toDisplayString(c.cardID),1),createBaseVNode(`span`,_t,`(`+toDisplayString(c.status)+`)`,1),createBaseVNode(`span`,vt$1,toDisplayString(t.fmtScore(c.score)),1)]))),128)),t.debugInfo.supplyQueue.items.length>8?(openBlock(),createElementBlock(`div`,yt,` ... +`+toDisplayString(t.debugInfo.supplyQueue.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,bt,` (empty) `))])]),_:1}),createVNode(w,{cols:`12`,md:`4`},{default:withCtx(()=>[createBaseVNode(`div`,xt,[createBaseVNode(`div`,St,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`mdi-alert-circle`)])),_:1}),c[5]||(c[5]=createBaseVNode(`strong`,null,`Failed Cards Queue`,-1))]),createBaseVNode(`div`,Ct,[createBaseVNode(`span`,wt,`Length: `+toDisplayString(t.debugInfo.failedQueue.length),1),createBaseVNode(`span`,Tt,`Dequeued: `+toDisplayString(t.debugInfo.failedQueue.dequeueCount),1)]),t.debugInfo.failedQueue.items.length>0?(openBlock(),createElementBlock(`div`,Et,[(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`,Dt,toDisplayString(c)+`: `+toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1),createBaseVNode(`span`,Ot,`(`+toDisplayString(t.status)+`)`,1)]))),128)),t.debugInfo.failedQueue.items.length>5?(openBlock(),createElementBlock(`div`,kt,` ... +`+toDisplayString(t.debugInfo.failedQueue.items.length-5)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,At,` (empty) `))])]),_:1})]),_:1}),createVNode(T,{dense:``},{default:withCtx(()=>[createVNode(w,{cols:`12`},{default:withCtx(()=>[createVNode(E,{class:`my-2`}),createBaseVNode(`div`,jt,[createBaseVNode(`div`,Mt,[createVNode(S,{size:`x-small`,class:`mr-1`},{default:withCtx(()=>c[6]||(c[6]=[createTextVNode(`mdi-database`)])),_:1}),c[7]||(c[7]=createBaseVNode(`strong`,null,`Hydrated Cards Cache`,-1))]),createBaseVNode(`div`,Nt,[createBaseVNode(`span`,Pt,`Cached: `+toDisplayString(t.debugInfo.hydratedCache.count),1),createBaseVNode(`span`,Ft,`Failed Cache: `+toDisplayString(t.debugInfo.hydratedCache.failedCacheSize),1)]),t.debugInfo.hydratedCache.items.length>0?(openBlock(),createElementBlock(`div`,It,[(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`,Lt,toDisplayString(t.courseID)+`::`+toDisplayString(t.cardID),1)]))),128)),t.debugInfo.hydratedCache.items.length>8?(openBlock(),createElementBlock(`div`,Rt,` ... +`+toDisplayString(t.debugInfo.hydratedCache.items.length-8)+` more `,1)):createCommentVNode(``,!0)])):(openBlock(),createElementBlock(`div`,zt,` (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`),yr=resolveComponent(`SkMouseTrap`);return t.sessionPrepared?(openBlock(),createElementBlock(`div`,Wt,[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`,Gt)),t.sessionFinished?(openBlock(),createElementBlock(`div`,Kt,[renderSlot(t.$slots,`session-finished`,{sessionRecord:t.sessionRecord,report:t.sessionController?.report},()=>[createBaseVNode(`div`,qt,[c[1]||(c[1]=createBaseVNode(`p`,null,`Study session finished! Great job!`,-1)),t.sessionController?(openBlock(),createElementBlock(`p`,Jt,toDisplayString(t.sessionController.report),1)):createCommentVNode(``,!0),createVNode(T,{"activity-records-getter":()=>t.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):(openBlock(),createElementBlock(`div`,Yt,[createVNode(Transition,{name:t.transitionName,mode:t.resolvedTransitionMode},{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`,`mode`])],512)),t.frameless?createCommentVNode(``,!0):(openBlock(),createElementBlock(Fragment,{key:5},[c[2]||(c[2]=createBaseVNode(`br`,null,null,-1)),t.sessionController?(openBlock(),createElementBlock(`div`,Xt,[(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(yr)]),_: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`,tn,[(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`,an,[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`),yr=resolveComponent(`v-card`);return openBlock(),createBlock(yr,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`),yr=resolveComponent(`v-card`);return openBlock(),createBlock(yr,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`,vn,[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`),yr=resolveComponent(`v-col`),br=resolveComponent(`v-row`),xr=resolveComponent(`v-container`);return openBlock(),createBlock(xr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(br,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(yr,{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`,Tn,[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`,En,[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`,Dn,`Welcome, `+toDisplayString(t.username)+`!`,1)):createCommentVNode(``,!0)])):t.verificationStatus===`error`?(openBlock(),createElementBlock(`div`,On,[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`,kn,[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`),yr=resolveComponent(`v-card`),br=resolveComponent(`v-col`),xr=resolveComponent(`v-row`),Sr=resolveComponent(`v-container`);return openBlock(),createBlock(Sr,{class:`fill-height`,fluid:``},{default:withCtx(()=>[createVNode(xr,{align:`center`,justify:`center`},{default:withCtx(()=>[createVNode(br,{cols:`12`,sm:`8`,md:`6`},{default:withCtx(()=>[createVNode(yr,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`,Mn,[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`,Fn,[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`,In,toDisplayString(t.item.text),1),t.item.data&&t.item.data.snippet?(openBlock(),createElementBlock(`span`,Ln,` - `+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`),yr=resolveComponent(`card-loader`),br=resolveComponent(`v-chip`),xr=resolveComponent(`v-chip-group`),Sr=resolveComponent(`tags-input`),Cr=resolveComponent(`v-list`),wr=resolveComponent(`v-card`);return openBlock(),createBlock(wr,null,{default:withCtx(()=>[t.updatePending?(openBlock(),createElementBlock(`div`,Bn,[createVNode(b,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,Vn,[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(Cr,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`,Hn,[createVNode(yr,{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`,Un,[createVNode(xr,null,{default:withCtx(()=>[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.cardTags[u.card.cardID],t=>(openBlock(),createBlock(br,{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(Sr,{"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`,Wn,[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`,Gn,[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`),yr=resolveComponent(`course-card-browser`);return t.updatePending?createCommentVNode(``,!0):(openBlock(),createElementBlock(`div`,Jn,[renderSlot(t.$slots,`header`,{courseConfig:t.courseConfig,courseId:t.courseId},()=>[createBaseVNode(`h1`,Yn,toDisplayString(t.courseConfig.name),1)],!0),createBaseVNode(`p`,Xn,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`,Zn,[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`,Qn,[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(yr,{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`,tr,[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`,ir,[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`,ar,[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`,or,` Including: `+toDisplayString(t.localFilter.include.join(`, `)),1)):createCommentVNode(``,!0),t.localFilter.include.length&&t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,sr,` · `)):createCommentVNode(``,!0),t.localFilter.exclude.length?(openBlock(),createElementBlock(`span`,cr,` 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`),yr=resolveComponent(`v-btn`),br=resolveComponent(`v-list`),xr=resolveComponent(`v-progress-circular`),Sr=resolveComponent(`v-card-text`),Cr=resolveComponent(`v-spacer`),wr=resolveComponent(`v-card-actions`),Tr=resolveComponent(`v-card`);return openBlock(),createBlock(Tr,{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(Sr,null,{default:withCtx(()=>[t.courseId?t.loading?(openBlock(),createElementBlock(`div`,_r,[createVNode(xr,{indeterminate:``,color:`primary`})])):(openBlock(),createElementBlock(`div`,fr,[createBaseVNode(`div`,pr,[createBaseVNode(`h3`,mr,[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(br,{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`,hr,[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`,gr,toDisplayString(t.formatMultiplier(t.preferences.boost[c])),1),createVNode(yr,{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(yr,{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(wr,{key:1},{default:withCtx(()=>[createVNode(Cr),createVNode(yr,{variant:`text`,disabled:!t.hasChanges,onClick:t.resetToSaved},{default:withCtx(()=>c[12]||(c[12]=[createTextVNode(` Reset `)])),_:1},8,[`disabled`,`onClick`]),createVNode(yr,{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,useAuthStore,useConfigStore,dn,fn,pn,mn,hn,gn,_n,vn,yn,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,$$2,ur,dr,fr,pr,mr,hr,gr,_r,vr,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
473
|
Displayable Constructor was called with no view Data.
|
|
474
474
|
`);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
|
-
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-
|
|
475
|
+
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},allowAddTime:{type:Boolean,default:!0}},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-5e104ccc`]]),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(`
|
|
476
476
|
Card was displayed at ${t.timeStamp}
|
|
477
477
|
User spent ${t.timeSpent} milliseconds with the card.
|
|
478
478
|
`),this.$emit(`emitResponse`,t)}}}),__name(_sfc_render$17,`_sfc_render`),Q$1=F$3(ct$1,[[`render`,_sfc_render$17],[`__scopeId`,`data-v-2d892b82`]]),lt$1=defineComponent({name:`SessionControllerDebug`,props:{sessionController:{type:Object,required:!0}},setup(t){let c=ref(0),u=null;onMounted(()=>{u=setInterval(()=>{c.value++},500)}),onUnmounted(()=>{u&&clearInterval(u)});let d=computed(()=>(c.value,t.sessionController?t.sessionController.getDebugInfo():{supplyQueue:{length:0,dequeueCount:0,items:[]},failedQueue:{length:0,dequeueCount:0,items:[]},hydratedCache:{count:0,failedCacheSize:0,items:[]}})),fmtScore=t=>t===void 0?``:Number.isFinite(t)?t.toFixed(2):`REQ`;return{debugInfo:d,fmtScore}}}),ut$1={class:`debug-section`},dt$1={class:`debug-header`},ft$1={class:`debug-stats`},pt$1={class:`text-caption`},mt$1={class:`text-caption ml-2`},ht$1={key:0,class:`debug-items`},gt$1={class:`text-caption`},_t={class:`text-caption text-grey ml-1`},vt$1={class:`text-caption ml-1`,style:{color:`#90caf9`}},yt={key:0,class:`text-caption text-grey`},bt={key:1,class:`text-caption text-grey`},xt={class:`debug-section`},St={class:`debug-header`},Ct={class:`debug-stats`},wt={class:`text-caption`},Tt={class:`text-caption ml-2`},Et={key:0,class:`debug-items`},Dt={class:`text-caption`},Ot={class:`text-caption text-grey ml-1`},kt={key:0,class:`text-caption text-grey`},At={key:1,class:`text-caption text-grey`},jt={class:`debug-section`},Mt={class:`debug-header`},Nt={class:`debug-stats`},Pt={class:`text-caption`},Ft={class:`text-caption ml-2`},It={key:0,class:`debug-items`},Lt={class:`text-caption`},Rt={key:0,class:`text-caption text-grey`},zt={key:1,class:`text-caption text-grey`},__name(_sfc_render$16,`_sfc_render`),Bt=F$3(lt$1,[[`render`,_sfc_render$16],[`__scopeId`,`data-v-641ac170`]]),Vt={},(function main(t,c,u,d){var m=!!(t.Worker&&t.Blob&&t.Promise&&t.OffscreenCanvas&&t.OffscreenCanvasRenderingContext2D&&t.HTMLCanvasElement&&t.HTMLCanvasElement.prototype.transferControlToOffscreen&&t.URL&&t.URL.createObjectURL),g=typeof Path2D==`function`&&typeof DOMMatrix==`function`,b=(function(){if(!t.OffscreenCanvas)return!1;var c=new OffscreenCanvas(1,1),u=c.getContext(`2d`);u.fillRect(0,0,1,1);var d=c.transferToImageBitmap();try{u.createPattern(d,`no-repeat`)}catch{return!1}return!0})();function noop(){}function promise(u){var d=c.exports.Promise,m=d===void 0?t.Promise:d;return typeof m==`function`?new m(u):(u(noop,noop),null)}var S=(function(t,c){return{transform:function(u){if(t)return u;if(c.has(u))return c.get(u);var d=new OffscreenCanvas(u.width,u.height);return d.getContext(`2d`).drawImage(u,0,0),c.set(u,d),d},clear:function(){c.clear()}}})(b,new Map),C=function(){var t=16,frame,cancel,c={},u=0;return typeof requestAnimationFrame==`function`&&typeof cancelAnimationFrame==`function`?(frame=function(d){var m=Math.random();return c[m]=requestAnimationFrame(function onFrame(g){u===g||u+t-1<g?(u=g,delete c[m],d()):c[m]=requestAnimationFrame(onFrame)}),m},cancel=function(t){c[t]&&cancelAnimationFrame(c[t])}):(frame=function(c){return setTimeout(c,t)},cancel=function(t){return clearTimeout(t)}),{frame,cancel}}(),w=(function(){var t,c,d={};function decorate(t){function execute(c,u){t.postMessage({options:c||{},callback:u})}t.init=function initWorker(c){var u=c.transferControlToOffscreen();t.postMessage({canvas:u},[u])},t.fire=function fireWorker(u,m,g){if(c)return execute(u,null),c;var b=Math.random().toString(36).slice(2);return c=promise(function(m){function workerDone(u){u.data.callback===b&&(delete d[b],t.removeEventListener(`message`,workerDone),c=null,S.clear(),g(),m())}t.addEventListener(`message`,workerDone),execute(u,b),d[b]=workerDone.bind(null,{data:{callback:b}})}),c},t.reset=function resetWorker(){for(var c in t.postMessage({reset:!0}),d)d[c](),delete d[c]}}return function(){if(t)return t;if(!u&&m){var c=[`var CONFETTI, SIZE = {}, module = {};`,`(`+main.toString()+`)(this, module, true, SIZE);`,`onmessage = function(msg) {`,` if (msg.data.options) {`,` CONFETTI(msg.data.options).then(function () {`,` if (msg.data.callback) {`,` postMessage({ callback: msg.data.callback });`,` }`,` });`,` } else if (msg.data.reset) {`,` CONFETTI && CONFETTI.reset();`,` } else if (msg.data.resize) {`,` SIZE.width = msg.data.resize.width;`,` SIZE.height = msg.data.resize.height;`,` } else if (msg.data.canvas) {`,` SIZE.width = msg.data.canvas.width;`,` SIZE.height = msg.data.canvas.height;`,` CONFETTI = module.exports.create(msg.data.canvas);`,` }`,`}`].join(`
|
|
479
|
-
`);try{t=new Worker(URL.createObjectURL(new Blob([c])))}catch(t){return typeof console.warn==`function`&&console.warn(`🎊 Could not load worker`,t),null}decorate(t)}return t}})(),T={particleCount:50,angle:90,spread:45,startVelocity:45,decay:.9,gravity:1,drift:0,ticks:200,x:.5,y:.5,shapes:[`square`,`circle`],zIndex:100,colors:[`#26ccff`,`#a25afd`,`#ff5e7e`,`#88ff5a`,`#fcff42`,`#ffa62d`,`#ff36ff`],disableForReducedMotion:!1,scalar:1};function convert(t,c){return c?c(t):t}function isOk(t){return t!=null}function prop(t,c,u){return convert(t&&isOk(t[c])?t[c]:T[c],u)}function onlyPositiveInt(t){return t<0?0:Math.floor(t)}function randomInt(t,c){return Math.floor(Math.random()*(c-t))+t}function toDecimal(t){return parseInt(t,16)}function colorsToRgb(t){return t.map(hexToRgb)}function hexToRgb(t){var c=String(t).replace(/[^0-9a-f]/gi,``);return c.length<6&&(c=c[0]+c[0]+c[1]+c[1]+c[2]+c[2]),{r:toDecimal(c.substring(0,2)),g:toDecimal(c.substring(2,4)),b:toDecimal(c.substring(4,6))}}function getOrigin(t){var c=prop(t,`origin`,Object);return c.x=prop(c,`x`,Number),c.y=prop(c,`y`,Number),c}function setCanvasWindowSize(t){t.width=document.documentElement.clientWidth,t.height=document.documentElement.clientHeight}function setCanvasRectSize(t){var c=t.getBoundingClientRect();t.width=c.width,t.height=c.height}function getCanvas(t){var c=document.createElement(`canvas`);return c.style.position=`fixed`,c.style.top=`0px`,c.style.left=`0px`,c.style.pointerEvents=`none`,c.style.zIndex=t,c}function ellipse(t,c,u,d,m,g,b,S,C){t.save(),t.translate(c,u),t.rotate(g),t.scale(d,m),t.arc(0,0,1,b,S,C),t.restore()}function randomPhysics(t){var c=t.angle*(Math.PI/180),u=t.spread*(Math.PI/180);return{x:t.x,y:t.y,wobble:Math.random()*10,wobbleSpeed:Math.min(.11,Math.random()*.1+.05),velocity:t.startVelocity*.5+Math.random()*t.startVelocity,angle2D:-c+(.5*u-Math.random()*u),tiltAngle:(Math.random()*.5+.25)*Math.PI,color:t.color,shape:t.shape,tick:0,totalTicks:t.ticks,decay:t.decay,drift:t.drift,random:Math.random()+2,tiltSin:0,tiltCos:0,wobbleX:0,wobbleY:0,gravity:t.gravity*3,ovalScalar:.6,scalar:t.scalar,flat:t.flat}}function updateFetti(t,c){c.x+=Math.cos(c.angle2D)*c.velocity+c.drift,c.y+=Math.sin(c.angle2D)*c.velocity+c.gravity,c.velocity*=c.decay,c.flat?(c.wobble=0,c.wobbleX=c.x+10*c.scalar,c.wobbleY=c.y+10*c.scalar,c.tiltSin=0,c.tiltCos=0,c.random=1):(c.wobble+=c.wobbleSpeed,c.wobbleX=c.x+10*c.scalar*Math.cos(c.wobble),c.wobbleY=c.y+10*c.scalar*Math.sin(c.wobble),c.tiltAngle+=.1,c.tiltSin=Math.sin(c.tiltAngle),c.tiltCos=Math.cos(c.tiltAngle),c.random=Math.random()+2);var u=c.tick++/c.totalTicks,d=c.x+c.random*c.tiltCos,m=c.y+c.random*c.tiltSin,b=c.wobbleX+c.random*c.tiltCos,C=c.wobbleY+c.random*c.tiltSin;if(t.fillStyle=`rgba(`+c.color.r+`, `+c.color.g+`, `+c.color.b+`, `+(1-u)+`)`,t.beginPath(),g&&c.shape.type===`path`&&typeof c.shape.path==`string`&&Array.isArray(c.shape.matrix))t.fill(transformPath2D(c.shape.path,c.shape.matrix,c.x,c.y,Math.abs(b-d)*.1,Math.abs(C-m)*.1,Math.PI/10*c.wobble));else if(c.shape.type===`bitmap`){var w=Math.PI/10*c.wobble,T=Math.abs(b-d)*.1,E=Math.abs(C-m)*.1,D=c.shape.bitmap.width*c.scalar,O=c.shape.bitmap.height*c.scalar,yr=new DOMMatrix([Math.cos(w)*T,Math.sin(w)*T,-Math.sin(w)*E,Math.cos(w)*E,c.x,c.y]);yr.multiplySelf(new DOMMatrix(c.shape.matrix));var br=t.createPattern(S.transform(c.shape.bitmap),`no-repeat`);br.setTransform(yr),t.globalAlpha=1-u,t.fillStyle=br,t.fillRect(c.x-D/2,c.y-O/2,D,O),t.globalAlpha=1}else if(c.shape===`circle`)t.ellipse?t.ellipse(c.x,c.y,Math.abs(b-d)*c.ovalScalar,Math.abs(C-m)*c.ovalScalar,Math.PI/10*c.wobble,0,2*Math.PI):ellipse(t,c.x,c.y,Math.abs(b-d)*c.ovalScalar,Math.abs(C-m)*c.ovalScalar,Math.PI/10*c.wobble,0,2*Math.PI);else if(c.shape===`star`)for(var xr=Math.PI/2*3,Sr=4*c.scalar,Cr=8*c.scalar,wr=c.x,Tr=c.y,Er=5,Dr=Math.PI/Er;Er--;)wr=c.x+Math.cos(xr)*Cr,Tr=c.y+Math.sin(xr)*Cr,t.lineTo(wr,Tr),xr+=Dr,wr=c.x+Math.cos(xr)*Sr,Tr=c.y+Math.sin(xr)*Sr,t.lineTo(wr,Tr),xr+=Dr;else t.moveTo(Math.floor(c.x),Math.floor(c.y)),t.lineTo(Math.floor(c.wobbleX),Math.floor(m)),t.lineTo(Math.floor(b),Math.floor(C)),t.lineTo(Math.floor(d),Math.floor(c.wobbleY));return t.closePath(),t.fill(),c.tick<c.totalTicks}function animate(t,c,m,g,b){var w=c.slice(),T=t.getContext(`2d`),E,D,O=promise(function(c){function onDone(){E=D=null,T.clearRect(0,0,g.width,g.height),S.clear(),b(),c()}function update(){u&&!(g.width===d.width&&g.height===d.height)&&(g.width=t.width=d.width,g.height=t.height=d.height),!g.width&&!g.height&&(m(t),g.width=t.width,g.height=t.height),T.clearRect(0,0,g.width,g.height),w=w.filter(function(t){return updateFetti(T,t)}),w.length?E=C.frame(update):onDone()}E=C.frame(update),D=onDone});return{addFettis:function(t){return w=w.concat(t),O},canvas:t,promise:O,reset:function(){E&&C.cancel(E),D&&D()}}}function confettiCannon(c,u){var d=!c,g=!!prop(u||{},`resize`),b=!1,S=prop(u,`disableForReducedMotion`,Boolean),C=m&&prop(u||{},`useWorker`)?w():null,T=d?setCanvasWindowSize:setCanvasRectSize,E=c&&C?!!c.__confetti_initialized:!1,D=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion)`).matches,O;function fireLocal(t,u,d){for(var m=prop(t,`particleCount`,onlyPositiveInt),g=prop(t,`angle`,Number),b=prop(t,`spread`,Number),S=prop(t,`startVelocity`,Number),C=prop(t,`decay`,Number),w=prop(t,`gravity`,Number),E=prop(t,`drift`,Number),D=prop(t,`colors`,colorsToRgb),yr=prop(t,`ticks`,Number),br=prop(t,`shapes`),xr=prop(t,`scalar`),Sr=!!prop(t,`flat`),Cr=getOrigin(t),wr=m,Tr=[],Er=c.width*Cr.x,Dr=c.height*Cr.y;wr--;)Tr.push(randomPhysics({x:Er,y:Dr,angle:g,spread:b,startVelocity:S,color:D[wr%D.length],shape:br[randomInt(0,br.length)],ticks:yr,decay:C,gravity:w,drift:E,scalar:xr,flat:Sr}));return O?O.addFettis(Tr):(O=animate(c,Tr,T,u,d),O.promise)}function fire(u){var m=S||prop(u,`disableForReducedMotion`,Boolean),w=prop(u,`zIndex`,Number);if(m&&D)return promise(function(t){t()});d&&O?c=O.canvas:d&&!c&&(c=getCanvas(w),document.body.appendChild(c)),g&&!E&&T(c);var yr={width:c.width,height:c.height};C&&!E&&C.init(c),E=!0,C&&(c.__confetti_initialized=!0);function onResize(){if(C){var t={getBoundingClientRect:function(){if(!d)return c.getBoundingClientRect()}};T(t),C.postMessage({resize:{width:t.width,height:t.height}});return}yr.width=yr.height=null}function done(){O=null,g&&(b=!1,t.removeEventListener(`resize`,onResize)),d&&c&&(document.body.contains(c)&&document.body.removeChild(c),c=null,E=!1)}return g&&!b&&(b=!0,t.addEventListener(`resize`,onResize,!1)),C?C.fire(u,yr,done):fireLocal(u,yr,done)}return fire.reset=function(){C&&C.reset(),O&&O.reset()},fire}var E;function getDefaultFire(){return E||(E=confettiCannon(null,{useWorker:!0,resize:!0})),E}function transformPath2D(t,c,u,d,m,g,b){var S=new Path2D(t),C=new Path2D;C.addPath(S,new DOMMatrix(c));var w=new Path2D;return w.addPath(C,new DOMMatrix([Math.cos(b)*m,Math.sin(b)*m,-Math.sin(b)*g,Math.cos(b)*g,u,d])),w}function shapeFromPath(t){if(!g)throw Error(`path confetti are not supported in this browser`);var c,u;typeof t==`string`?c=t:(c=t.path,u=t.matrix);var d=new Path2D(c),m=document.createElement(`canvas`).getContext(`2d`);if(!u){for(var b=1e3,S=b,C=b,w=0,T=0,E,D,O=0;O<b;O+=2)for(var yr=0;yr<b;yr+=2)m.isPointInPath(d,O,yr,`nonzero`)&&(S=Math.min(S,O),C=Math.min(C,yr),w=Math.max(w,O),T=Math.max(T,yr));E=w-S,D=T-C;var br=10,xr=Math.min(br/E,br/D);u=[xr,0,0,xr,-Math.round(E/2+S)*xr,-Math.round(D/2+C)*xr]}return{type:`path`,path:c,matrix:u}}function shapeFromText(t){var c,u=1,d=`#000000`,m=`"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "EmojiOne Color", "Android Emoji", "Twemoji Mozilla", "system emoji", sans-serif`;typeof t==`string`?c=t:(c=t.text,u=`scalar`in t?t.scalar:u,m=`fontFamily`in t?t.fontFamily:m,d=`color`in t?t.color:d);var g=10*u,b=``+g+`px `+m,S=new OffscreenCanvas(g,g),C=S.getContext(`2d`);C.font=b;var w=C.measureText(c),T=Math.ceil(w.actualBoundingBoxRight+w.actualBoundingBoxLeft),E=Math.ceil(w.actualBoundingBoxAscent+w.actualBoundingBoxDescent),D=2,O=w.actualBoundingBoxLeft+D,yr=w.actualBoundingBoxAscent+D;T+=D+D,E+=D+D,S=new OffscreenCanvas(T,E),C=S.getContext(`2d`),C.font=b,C.fillStyle=d,C.fillText(c,O,yr);var br=1/u;return{type:`bitmap`,bitmap:S.transferToImageBitmap(),matrix:[br,0,0,br,-T*br/2,-E*br/2]}}c.exports=function(){return getDefaultFire().apply(this,arguments)},c.exports.reset=function(){getDefaultFire().reset()},c.exports.create=confettiCannon,c.exports.shapeFromPath=shapeFromPath,c.exports.shapeFromText=shapeFromText})((function(){return typeof window<`u`?window:typeof self<`u`?self:this||{}})(),Vt,!1),Ht=Vt.exports,Vt.exports.create,Ut=defineComponent({name:`StudySession`,ref:{},components:{CardViewer:Q$1,StudySessionTimer:st$1,SkMouseTrap:Ne$1,HeatMap:Ae$1,SessionControllerDebug:Bt},props:{sessionTimeLimit:{type:Number,required:!0},contentSources:{type:Array,required:!0},user:{type:Object,required:!0},dataLayer:{type:Object,required:!0},sessionConfig:{type:Object,default:()=>({likesConfetti:!1})},getViewComponent:{type:Function,required:!0},frameless:{type:Boolean,default:!1},hideFooter:{type:Boolean,default:!1},transitionName:{type:String,default:`component-fade`},transitionMode:{type:String,default:`out-in`}},emits:[`session-finished`,`session-started`,`card-loaded`,`card-response`,`time-changed`,`session-prepared`,`session-error`,`replan-requested`],data(){return{cardID:``,view:null,data:[],courseID:``,card_elo:1e3,courseNames:{},cardCount:1,sessionController:null,sessionPrepared:!1,sessionFinished:!1,sessionRecord:[],percentageRemaining:100,timerIsActive:!0,loading:!1,userCourseRegDoc:null,sessionContentSources:[],timeRemaining:300,replanPending:!1,replanOptions:null,deferredNextCardAction:null,intervalHandler:null,cardType:``,debugMode:window.debugMode===!0}},computed:{currentCard(){return this.sessionRecord[this.sessionRecord.length-1]}},async created(){this.userCourseRegDoc=await this.user.getCourseRegistrationsDoc(),console.log(`[StudySession] Created lifecycle hook - starting initSession`),await this.initSession(),console.log(`[StudySession] InitSession completed in created hook`)},errorCaptured(t,c,u){return console.error(`[StudySession] Card render error (${u}), skipping card "${this.cardID}":`,t),this.sessionController&&this.sessionController.nextCard().then(t=>this.loadCard(t)),!1},methods:{async handleReadyToAdvance(){let t=this.deferredNextCardAction;if(!t){console.warn(`[StudySession] ready-to-advance received but no deferred action stashed — ignoring`);return}console.log(`[StudySession] ready-to-advance received — advancing with stashed action: ${t}`),this.deferredNextCardAction=null,this.loadCard(await this.sessionController.nextCard(t))},handleReplanRequest(t){if(this.sessionController){let c=t?.label,u=c?` [${c}]`:``;console.log(`[StudySession] Replan requested by card view${u}, deferring until after response processing`),this.replanPending=!0,this.replanOptions=t??null}},user_elo(t){let c=this.userCourseRegDoc.courses.find(c=>c.courseID===t);return toCourseElo(c?c.elo:void 0)},handleClassroomMessage(){return t=>(Z$2({text:this.user?.getUsername()||`[Unknown user]`,status:Status.ok}),console.log(`[StudySession] There was a change in the classroom DB:`),console.log(`[StudySession] change: ${t}`),console.log(`[StudySession] Stringified change: ${JSON.stringify(t)}`),{})},incrementSessionClock(){let t=60*this.sessionTimeLimit-this.timeRemaining;this.sessionController.addTime(Math.min(t,60)),this.tick()},tick(){this.timeRemaining=this.sessionController.secondsRemaining,this.percentageRemaining=this.timeRemaining>60?100*(this.timeRemaining/(60*this.sessionTimeLimit)):100*(this.timeRemaining/60),this.$emit(`time-changed`,this.timeRemaining),this.timeRemaining===0&&clearInterval(this.intervalHandler)},async initSession(){let t=[];try{console.log(`[StudySession] starting study session w/ sources: ${JSON.stringify(this.contentSources)}`),console.log(`[StudySession] Beginning preparation process`),this.sessionContentSources=markRaw((await Promise.all(this.contentSources.map(async t=>{try{return await getStudySource(t,this.user)}catch(c){return console.error(`Failed to load study source: ${t.type}/${t.id}`,c),null}}))).filter(t=>t!==null)),this.timeRemaining=this.sessionTimeLimit*60,t=await Promise.all(this.contentSources.filter(t=>t.type===`classroom`).map(async t=>await this.dataLayer.getClassroomDB(t.id,`student`))),t.forEach(t=>{});let c={};this.sessionConfig?.defaultBatchLimit!==void 0&&(c.defaultBatchLimit=this.sessionConfig.defaultBatchLimit),this.sessionConfig?.outcomeObservers?.length&&(c.outcomeObservers=this.sessionConfig.outcomeObservers),this.sessionController=markRaw(new SessionController(this.sessionContentSources,60*this.sessionTimeLimit,this.dataLayer,this.getViewComponent,void 0,c)),this.sessionController.sessionRecord=this.sessionRecord,this.sessionConfig?.initHints&&(this.sessionController.setSessionHints(this.sessionConfig.initHints),console.log(`[StudySession] Applied init hints as session-durable hints`)),await this.sessionController.prepareSession(),this.intervalHandler=setInterval(this.tick,1e3),this.sessionPrepared=!0,console.log(`[StudySession] Session preparation complete, emitting session-prepared event`),this.$emit(`session-prepared`),console.log(`[StudySession] Event emission completed`)}catch(t){console.error(`[StudySession] Error during session preparation:`,t),this.$emit(`session-error`,{message:`Failed to prepare study session`,error:t})}try{this.contentSources.filter(t=>t.type===`course`).forEach(async t=>this.courseNames[t.id]=(await this.dataLayer.getCoursesDB().getCourseConfig(t.id)).name),console.log(`[StudySession] Session created:
|
|
479
|
+
`);try{t=new Worker(URL.createObjectURL(new Blob([c])))}catch(t){return typeof console.warn==`function`&&console.warn(`🎊 Could not load worker`,t),null}decorate(t)}return t}})(),T={particleCount:50,angle:90,spread:45,startVelocity:45,decay:.9,gravity:1,drift:0,ticks:200,x:.5,y:.5,shapes:[`square`,`circle`],zIndex:100,colors:[`#26ccff`,`#a25afd`,`#ff5e7e`,`#88ff5a`,`#fcff42`,`#ffa62d`,`#ff36ff`],disableForReducedMotion:!1,scalar:1};function convert(t,c){return c?c(t):t}function isOk(t){return t!=null}function prop(t,c,u){return convert(t&&isOk(t[c])?t[c]:T[c],u)}function onlyPositiveInt(t){return t<0?0:Math.floor(t)}function randomInt(t,c){return Math.floor(Math.random()*(c-t))+t}function toDecimal(t){return parseInt(t,16)}function colorsToRgb(t){return t.map(hexToRgb)}function hexToRgb(t){var c=String(t).replace(/[^0-9a-f]/gi,``);return c.length<6&&(c=c[0]+c[0]+c[1]+c[1]+c[2]+c[2]),{r:toDecimal(c.substring(0,2)),g:toDecimal(c.substring(2,4)),b:toDecimal(c.substring(4,6))}}function getOrigin(t){var c=prop(t,`origin`,Object);return c.x=prop(c,`x`,Number),c.y=prop(c,`y`,Number),c}function setCanvasWindowSize(t){t.width=document.documentElement.clientWidth,t.height=document.documentElement.clientHeight}function setCanvasRectSize(t){var c=t.getBoundingClientRect();t.width=c.width,t.height=c.height}function getCanvas(t){var c=document.createElement(`canvas`);return c.style.position=`fixed`,c.style.top=`0px`,c.style.left=`0px`,c.style.pointerEvents=`none`,c.style.zIndex=t,c}function ellipse(t,c,u,d,m,g,b,S,C){t.save(),t.translate(c,u),t.rotate(g),t.scale(d,m),t.arc(0,0,1,b,S,C),t.restore()}function randomPhysics(t){var c=t.angle*(Math.PI/180),u=t.spread*(Math.PI/180);return{x:t.x,y:t.y,wobble:Math.random()*10,wobbleSpeed:Math.min(.11,Math.random()*.1+.05),velocity:t.startVelocity*.5+Math.random()*t.startVelocity,angle2D:-c+(.5*u-Math.random()*u),tiltAngle:(Math.random()*.5+.25)*Math.PI,color:t.color,shape:t.shape,tick:0,totalTicks:t.ticks,decay:t.decay,drift:t.drift,random:Math.random()+2,tiltSin:0,tiltCos:0,wobbleX:0,wobbleY:0,gravity:t.gravity*3,ovalScalar:.6,scalar:t.scalar,flat:t.flat}}function updateFetti(t,c){c.x+=Math.cos(c.angle2D)*c.velocity+c.drift,c.y+=Math.sin(c.angle2D)*c.velocity+c.gravity,c.velocity*=c.decay,c.flat?(c.wobble=0,c.wobbleX=c.x+10*c.scalar,c.wobbleY=c.y+10*c.scalar,c.tiltSin=0,c.tiltCos=0,c.random=1):(c.wobble+=c.wobbleSpeed,c.wobbleX=c.x+10*c.scalar*Math.cos(c.wobble),c.wobbleY=c.y+10*c.scalar*Math.sin(c.wobble),c.tiltAngle+=.1,c.tiltSin=Math.sin(c.tiltAngle),c.tiltCos=Math.cos(c.tiltAngle),c.random=Math.random()+2);var u=c.tick++/c.totalTicks,d=c.x+c.random*c.tiltCos,m=c.y+c.random*c.tiltSin,b=c.wobbleX+c.random*c.tiltCos,C=c.wobbleY+c.random*c.tiltSin;if(t.fillStyle=`rgba(`+c.color.r+`, `+c.color.g+`, `+c.color.b+`, `+(1-u)+`)`,t.beginPath(),g&&c.shape.type===`path`&&typeof c.shape.path==`string`&&Array.isArray(c.shape.matrix))t.fill(transformPath2D(c.shape.path,c.shape.matrix,c.x,c.y,Math.abs(b-d)*.1,Math.abs(C-m)*.1,Math.PI/10*c.wobble));else if(c.shape.type===`bitmap`){var w=Math.PI/10*c.wobble,T=Math.abs(b-d)*.1,E=Math.abs(C-m)*.1,D=c.shape.bitmap.width*c.scalar,O=c.shape.bitmap.height*c.scalar,yr=new DOMMatrix([Math.cos(w)*T,Math.sin(w)*T,-Math.sin(w)*E,Math.cos(w)*E,c.x,c.y]);yr.multiplySelf(new DOMMatrix(c.shape.matrix));var br=t.createPattern(S.transform(c.shape.bitmap),`no-repeat`);br.setTransform(yr),t.globalAlpha=1-u,t.fillStyle=br,t.fillRect(c.x-D/2,c.y-O/2,D,O),t.globalAlpha=1}else if(c.shape===`circle`)t.ellipse?t.ellipse(c.x,c.y,Math.abs(b-d)*c.ovalScalar,Math.abs(C-m)*c.ovalScalar,Math.PI/10*c.wobble,0,2*Math.PI):ellipse(t,c.x,c.y,Math.abs(b-d)*c.ovalScalar,Math.abs(C-m)*c.ovalScalar,Math.PI/10*c.wobble,0,2*Math.PI);else if(c.shape===`star`)for(var xr=Math.PI/2*3,Sr=4*c.scalar,Cr=8*c.scalar,wr=c.x,Tr=c.y,Er=5,Dr=Math.PI/Er;Er--;)wr=c.x+Math.cos(xr)*Cr,Tr=c.y+Math.sin(xr)*Cr,t.lineTo(wr,Tr),xr+=Dr,wr=c.x+Math.cos(xr)*Sr,Tr=c.y+Math.sin(xr)*Sr,t.lineTo(wr,Tr),xr+=Dr;else t.moveTo(Math.floor(c.x),Math.floor(c.y)),t.lineTo(Math.floor(c.wobbleX),Math.floor(m)),t.lineTo(Math.floor(b),Math.floor(C)),t.lineTo(Math.floor(d),Math.floor(c.wobbleY));return t.closePath(),t.fill(),c.tick<c.totalTicks}function animate(t,c,m,g,b){var w=c.slice(),T=t.getContext(`2d`),E,D,O=promise(function(c){function onDone(){E=D=null,T.clearRect(0,0,g.width,g.height),S.clear(),b(),c()}function update(){u&&!(g.width===d.width&&g.height===d.height)&&(g.width=t.width=d.width,g.height=t.height=d.height),!g.width&&!g.height&&(m(t),g.width=t.width,g.height=t.height),T.clearRect(0,0,g.width,g.height),w=w.filter(function(t){return updateFetti(T,t)}),w.length?E=C.frame(update):onDone()}E=C.frame(update),D=onDone});return{addFettis:function(t){return w=w.concat(t),O},canvas:t,promise:O,reset:function(){E&&C.cancel(E),D&&D()}}}function confettiCannon(c,u){var d=!c,g=!!prop(u||{},`resize`),b=!1,S=prop(u,`disableForReducedMotion`,Boolean),C=m&&prop(u||{},`useWorker`)?w():null,T=d?setCanvasWindowSize:setCanvasRectSize,E=c&&C?!!c.__confetti_initialized:!1,D=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion)`).matches,O;function fireLocal(t,u,d){for(var m=prop(t,`particleCount`,onlyPositiveInt),g=prop(t,`angle`,Number),b=prop(t,`spread`,Number),S=prop(t,`startVelocity`,Number),C=prop(t,`decay`,Number),w=prop(t,`gravity`,Number),E=prop(t,`drift`,Number),D=prop(t,`colors`,colorsToRgb),yr=prop(t,`ticks`,Number),br=prop(t,`shapes`),xr=prop(t,`scalar`),Sr=!!prop(t,`flat`),Cr=getOrigin(t),wr=m,Tr=[],Er=c.width*Cr.x,Dr=c.height*Cr.y;wr--;)Tr.push(randomPhysics({x:Er,y:Dr,angle:g,spread:b,startVelocity:S,color:D[wr%D.length],shape:br[randomInt(0,br.length)],ticks:yr,decay:C,gravity:w,drift:E,scalar:xr,flat:Sr}));return O?O.addFettis(Tr):(O=animate(c,Tr,T,u,d),O.promise)}function fire(u){var m=S||prop(u,`disableForReducedMotion`,Boolean),w=prop(u,`zIndex`,Number);if(m&&D)return promise(function(t){t()});d&&O?c=O.canvas:d&&!c&&(c=getCanvas(w),document.body.appendChild(c)),g&&!E&&T(c);var yr={width:c.width,height:c.height};C&&!E&&C.init(c),E=!0,C&&(c.__confetti_initialized=!0);function onResize(){if(C){var t={getBoundingClientRect:function(){if(!d)return c.getBoundingClientRect()}};T(t),C.postMessage({resize:{width:t.width,height:t.height}});return}yr.width=yr.height=null}function done(){O=null,g&&(b=!1,t.removeEventListener(`resize`,onResize)),d&&c&&(document.body.contains(c)&&document.body.removeChild(c),c=null,E=!1)}return g&&!b&&(b=!0,t.addEventListener(`resize`,onResize,!1)),C?C.fire(u,yr,done):fireLocal(u,yr,done)}return fire.reset=function(){C&&C.reset(),O&&O.reset()},fire}var E;function getDefaultFire(){return E||(E=confettiCannon(null,{useWorker:!0,resize:!0})),E}function transformPath2D(t,c,u,d,m,g,b){var S=new Path2D(t),C=new Path2D;C.addPath(S,new DOMMatrix(c));var w=new Path2D;return w.addPath(C,new DOMMatrix([Math.cos(b)*m,Math.sin(b)*m,-Math.sin(b)*g,Math.cos(b)*g,u,d])),w}function shapeFromPath(t){if(!g)throw Error(`path confetti are not supported in this browser`);var c,u;typeof t==`string`?c=t:(c=t.path,u=t.matrix);var d=new Path2D(c),m=document.createElement(`canvas`).getContext(`2d`);if(!u){for(var b=1e3,S=b,C=b,w=0,T=0,E,D,O=0;O<b;O+=2)for(var yr=0;yr<b;yr+=2)m.isPointInPath(d,O,yr,`nonzero`)&&(S=Math.min(S,O),C=Math.min(C,yr),w=Math.max(w,O),T=Math.max(T,yr));E=w-S,D=T-C;var br=10,xr=Math.min(br/E,br/D);u=[xr,0,0,xr,-Math.round(E/2+S)*xr,-Math.round(D/2+C)*xr]}return{type:`path`,path:c,matrix:u}}function shapeFromText(t){var c,u=1,d=`#000000`,m=`"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "EmojiOne Color", "Android Emoji", "Twemoji Mozilla", "system emoji", sans-serif`;typeof t==`string`?c=t:(c=t.text,u=`scalar`in t?t.scalar:u,m=`fontFamily`in t?t.fontFamily:m,d=`color`in t?t.color:d);var g=10*u,b=``+g+`px `+m,S=new OffscreenCanvas(g,g),C=S.getContext(`2d`);C.font=b;var w=C.measureText(c),T=Math.ceil(w.actualBoundingBoxRight+w.actualBoundingBoxLeft),E=Math.ceil(w.actualBoundingBoxAscent+w.actualBoundingBoxDescent),D=2,O=w.actualBoundingBoxLeft+D,yr=w.actualBoundingBoxAscent+D;T+=D+D,E+=D+D,S=new OffscreenCanvas(T,E),C=S.getContext(`2d`),C.font=b,C.fillStyle=d,C.fillText(c,O,yr);var br=1/u;return{type:`bitmap`,bitmap:S.transferToImageBitmap(),matrix:[br,0,0,br,-T*br/2,-E*br/2]}}c.exports=function(){return getDefaultFire().apply(this,arguments)},c.exports.reset=function(){getDefaultFire().reset()},c.exports.create=confettiCannon,c.exports.shapeFromPath=shapeFromPath,c.exports.shapeFromText=shapeFromText})((function(){return typeof window<`u`?window:typeof self<`u`?self:this||{}})(),Vt,!1),Ht=Vt.exports,Vt.exports.create,Ut=defineComponent({name:`StudySession`,ref:{},components:{CardViewer:Q$1,StudySessionTimer:st$1,SkMouseTrap:Ne$1,HeatMap:Ae$1,SessionControllerDebug:Bt},props:{sessionTimeLimit:{type:Number,required:!0},contentSources:{type:Array,required:!0},user:{type:Object,required:!0},dataLayer:{type:Object,required:!0},sessionConfig:{type:Object,default:()=>({likesConfetti:!1})},getViewComponent:{type:Function,required:!0},frameless:{type:Boolean,default:!1},hideFooter:{type:Boolean,default:!1},transitionName:{type:String,default:`component-fade`},transitionMode:{type:String,default:`out-in`}},emits:[`session-finished`,`session-started`,`card-loaded`,`card-response`,`time-changed`,`session-prepared`,`session-error`,`replan-requested`],data(){return{cardID:``,view:null,data:[],courseID:``,card_elo:1e3,courseNames:{},cardCount:1,sessionController:null,sessionPrepared:!1,sessionFinished:!1,sessionRecord:[],percentageRemaining:100,timerIsActive:!0,loading:!1,userCourseRegDoc:null,sessionContentSources:[],timeRemaining:300,replanPending:!1,replanOptions:null,deferredNextCardAction:null,intervalHandler:null,cardType:``,debugMode:window.debugMode===!0}},computed:{currentCard(){return this.sessionRecord[this.sessionRecord.length-1]},resolvedTransitionMode(){return this.transitionMode===`default`?void 0:this.transitionMode}},async created(){this.userCourseRegDoc=await this.user.getCourseRegistrationsDoc(),console.log(`[StudySession] Created lifecycle hook - starting initSession`),await this.initSession(),console.log(`[StudySession] InitSession completed in created hook`)},errorCaptured(t,c,u){return console.error(`[StudySession] Card render error (${u}), skipping card "${this.cardID}":`,t),this.sessionController&&this.sessionController.nextCard().then(t=>this.loadCard(t)),!1},methods:{async handleReadyToAdvance(){let t=this.deferredNextCardAction;if(!t){console.warn(`[StudySession] ready-to-advance received but no deferred action stashed — ignoring`);return}console.log(`[StudySession] ready-to-advance received — advancing with stashed action: ${t}`),this.deferredNextCardAction=null,this.loadCard(await this.sessionController.nextCard(t))},handleReplanRequest(t){if(this.sessionController){let c=t?.label,u=c?` [${c}]`:``;console.log(`[StudySession] Replan requested by card view${u}, deferring until after response processing`),this.replanPending=!0,this.replanOptions=t??null}},user_elo(t){let c=this.userCourseRegDoc.courses.find(c=>c.courseID===t);return toCourseElo(c?c.elo:void 0)},handleClassroomMessage(){return t=>(Z$2({text:this.user?.getUsername()||`[Unknown user]`,status:Status.ok}),console.log(`[StudySession] There was a change in the classroom DB:`),console.log(`[StudySession] change: ${t}`),console.log(`[StudySession] Stringified change: ${JSON.stringify(t)}`),{})},incrementSessionClock(){let t=60*this.sessionTimeLimit-this.timeRemaining;this.sessionController.addTime(Math.min(t,60)),this.tick()},tick(){this.timeRemaining=this.sessionController.secondsRemaining,this.percentageRemaining=this.timeRemaining>60?100*(this.timeRemaining/(60*this.sessionTimeLimit)):100*(this.timeRemaining/60),this.$emit(`time-changed`,this.timeRemaining),this.timeRemaining===0&&clearInterval(this.intervalHandler)},async initSession(){let t=[];try{console.log(`[StudySession] starting study session w/ sources: ${JSON.stringify(this.contentSources)}`),console.log(`[StudySession] Beginning preparation process`),this.sessionContentSources=markRaw((await Promise.all(this.contentSources.map(async t=>{try{return await getStudySource(t,this.user)}catch(c){return console.error(`Failed to load study source: ${t.type}/${t.id}`,c),null}}))).filter(t=>t!==null)),this.timeRemaining=this.sessionTimeLimit*60,t=await Promise.all(this.contentSources.filter(t=>t.type===`classroom`).map(async t=>await this.dataLayer.getClassroomDB(t.id,`student`))),t.forEach(t=>{});let c={};this.sessionConfig?.defaultBatchLimit!==void 0&&(c.defaultBatchLimit=this.sessionConfig.defaultBatchLimit),this.sessionConfig?.outcomeObservers?.length&&(c.outcomeObservers=this.sessionConfig.outcomeObservers),this.sessionController=markRaw(new SessionController(this.sessionContentSources,60*this.sessionTimeLimit,this.dataLayer,this.getViewComponent,void 0,c)),this.sessionController.sessionRecord=this.sessionRecord,this.sessionConfig?.initHints&&(this.sessionController.setSessionHints(this.sessionConfig.initHints),console.log(`[StudySession] Applied init hints as session-durable hints`)),await this.sessionController.prepareSession(),this.intervalHandler=setInterval(this.tick,1e3),this.sessionPrepared=!0,console.log(`[StudySession] Session preparation complete, emitting session-prepared event`),this.$emit(`session-prepared`),console.log(`[StudySession] Event emission completed`)}catch(t){console.error(`[StudySession] Error during session preparation:`,t),this.$emit(`session-error`,{message:`Failed to prepare study session`,error:t})}try{this.contentSources.filter(t=>t.type===`course`).forEach(async t=>this.courseNames[t.id]=(await this.dataLayer.getCoursesDB().getCourseConfig(t.id)).name),console.log(`[StudySession] Session created:
|
|
480
480
|
${this.sessionController?.toString()||`Session controller not initialized`}
|
|
481
481
|
User courses: ${this.contentSources.filter(t=>t.type===`course`).map(t=>t.id).toString()}
|
|
482
482
|
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&&Ht({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}}}),Wt={key:0,class:`StudySession`},Gt={key:2},Kt={key:3},qt={class:`text-h4`},Jt={key:0},Yt={key:4,ref:`shadowWrapper`,class:`card-transition-container`},Xt={key:0},__name(_sfc_render$15,`_sfc_render`),Zt=F$3(Ut,[[`render`,_sfc_render$15],[`__scopeId`,`data-v-
|
|
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&&Ht({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}}}),Wt={key:0,class:`StudySession`},Gt={key:2},Kt={key:3,class:`session-finished-area`},qt={class:`text-h4`},Jt={key:0},Yt={key:4,ref:`shadowWrapper`,class:`card-transition-container`},Xt={key:0},__name(_sfc_render$15,`_sfc_render`),Zt=F$3(Ut,[[`render`,_sfc_render$15],[`__scopeId`,`data-v-d6d88dad`]]),Qt=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`),$t=F$3(Qt,[[`render`,_sfc_render$14],[`__scopeId`,`data-v-96de7172`]]),en=defineComponent({name:`RadioMultipleChoice`,components:{MultipleChoiceOption:$t},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)})}}}),tn={ref:`containerRef`,class:`multipleChoice`},__name(_sfc_render$13,`_sfc_render`),nn=F$3(en,[[`render`,_sfc_render$13]]),rn=defineComponent({name:`TrueFalse`,components:{RadioMultipleChoice:nn},props:{MouseTrap:{type:Object,required:!0},submit:{type:Function,required:!0}}}),an={"data-viewable":`TrueFalse`},__name(_sfc_render$12,`_sfc_render`),on=F$3(rn,[[`render`,_sfc_render$12]]),sn=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`),cn=F$3(sn,[[`render`,_sfc_render$11],[`__scopeId`,`data-v-a56dcd1c`]]),ln=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
484
|
Card was displayed at ${t.timeStamp}
|
|
485
485
|
User spent ${t.timeSpent} milliseconds with the card.
|
|
486
486
|
`),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`),un=F$3(ln,[[`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}}}})()},dn=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`),yr=resolveComponent(`v-divider`),br=resolveComponent(`v-list`),xr=resolveComponent(`v-menu`),Sr=resolveComponent(`v-badge`),Cr=resolveComponent(`v-card-title`),wr=resolveComponent(`v-text-field`),Tr=resolveComponent(`v-card-text`),Er=resolveComponent(`v-spacer`),Dr=resolveComponent(`v-btn`),Or=resolveComponent(`v-card-actions`),kr=resolveComponent(`v-card`),Ar=resolveComponent(`v-dialog`);return openBlock(),createElementBlock(Fragment,null,[createVNode(Sr,{content:b.value.length,"model-value":T.value,color:`accent`,location:`end top`},{default:withCtx(()=>[createVNode(xr,{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(br,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(yr,{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(Ar,{modelValue:S.value,"onUpdate:modelValue":c[3]||(c[3]=t=>S.value=t),"max-width":`500px`,persistent:``},{default:withCtx(()=>[createVNode(kr,null,{default:withCtx(()=>[createVNode(Cr,{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(Tr,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(wr,{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(Or,null,{default:withCtx(()=>[createVNode(Er),createVNode(Dr,{text:``,onClick:resetDialogState},{default:withCtx(()=>c[16]||(c[16]=[createTextVNode(`Cancel`)])),_:1}),createVNode(Dr,{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`]]),fn={class:`d-flex flex-column align-start`},pn={class:`mb-2`},mn=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),yr=ref(void 0),br=computed(()=>g.name===`login`),xr=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`),yr.value=await getCurrentUser(),log$2(`Got User instance, attempting login`),await yr.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`),br.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`),yr=resolveComponent(`v-form`),Sr=resolveComponent(`v-card-text`),Cr=resolveComponent(`v-card`);return openBlock(),createBlock(Cr,null,{default:withCtx(()=>[br.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(Sr,null,{default:withCtx(()=>[createVNode(yr,{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`,fn,[createBaseVNode(`div`,pn,[createVNode(m,{class:`mr-2`,type:`submit`,loading:E.value,color:xr.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`]),br.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`]]),hn=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(`
|