@vue-skuilder/common-ui 0.1.33 → 0.1.34

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.
@@ -1,4 +1,4 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`),require(`moment`),require(`@vue-skuilder/common`),require(`@vue-skuilder/db`),require(`pinia`),require(`vue-router`),require(`@vojtechlanka/vue-tags-input`)):typeof define==`function`&&define.amd?define([`exports`,`vue`,`moment`,`@vue-skuilder/common`,`@vue-skuilder/db`,`pinia`,`vue-router`,`@vojtechlanka/vue-tags-input`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VueSkuilderCommonUI={},e.Vue,e.moment,e.VueSkuilderCommon,e.VueSkuilderDb,e.Pinia,e.VueRouter,e.VueTagsInput))})(this,function(e,t,n,r,i,a,o,s){var c=document.createElement(`style`);c.textContent=`.tooltip[data-v-ca46239a]{color:#fff;background-color:#000c;border-radius:3px;padding:5px;font-size:12px}.sk-mousetrap-tooltip-wrapper[data-v-5d6fb09c]{display:inline-block;position:relative}.sk-mousetrap-tooltip[data-v-5d6fb09c]{color:#fff;white-space:nowrap;pointer-events:none;z-index:9999;background-color:#000c;border-radius:4px;padding:2px 6px;font-size:12px;position:absolute}.sk-mt-tooltip-top[data-v-5d6fb09c]{margin-bottom:5px;bottom:100%;left:50%;transform:translate(-50%)}.sk-mt-tooltip-bottom[data-v-5d6fb09c]{margin-top:5px;top:100%;left:50%;transform:translate(-50%)}.sk-mt-tooltip-left[data-v-5d6fb09c]{margin-right:5px;top:50%;right:100%;transform:translateY(-50%)}.sk-mt-tooltip-right[data-v-5d6fb09c]{margin-left:5px;top:50%;left:100%;transform:translateY(-50%)}.sk-mousetrap-highlight-glow[data-v-5d6fb09c]{transition:box-shadow .25s;box-shadow:0 0 8px 2px #1976d299}.sk-mousetrap-highlight-scale[data-v-5d6fb09c]{transition:transform .25s;transform:scale(1.03)}.sk-mousetrap-highlight-border[data-v-5d6fb09c]{outline-offset:2px;border-radius:4px;outline:2px solid #1976d2cc;transition:outline .25s,outline-offset .25s}.fade-enter-active[data-v-5d6fb09c],.fade-leave-active[data-v-5d6fb09c]{transition:opacity .25s}.fade-enter-from[data-v-5d6fb09c],.fade-leave-to[data-v-5d6fb09c]{opacity:0}.pageSelect[data-v-a75fea7e]{max-width:60px}.selected-card[data-v-285e13bd]{background-color:#e0f2f7;border-left:4px solid #2196f3}.cursor-pointer[data-v-285e13bd]{cursor:pointer}.error-message[data-v-a4bdfdfb]{color:#f44336;background-color:#ffebee;border-radius:4px;margin:8px 0;padding:16px}.negative-interval[data-v-a4bdfdfb]{color:#f44336;background-color:#ffebee;border-radius:3px;padding:2px 4px;font-weight:700}.invalid-timestamp[data-v-a4bdfdfb]{color:#f44336;font-weight:700}.card-history-viewer[data-v-a4bdfdfb]{margin:16px 0}.timer-container[data-v-5960940a]{cursor:pointer;display:inline-flex}.cardView[data-v-2d892b82]{border-radius:8px;padding:15px}.session-debug[data-v-1a6ac7a1]{max-height:400px;font-family:Courier New,monospace;font-size:.75rem;overflow-y:auto}.debug-section[data-v-1a6ac7a1]{background-color:#ffffff0d;border-radius:4px;min-height:120px;padding:8px}.debug-header[data-v-1a6ac7a1]{border-bottom:1px solid #ffffff1a;align-items:center;margin-bottom:4px;padding-bottom:4px;display:flex}.debug-stats[data-v-1a6ac7a1]{gap:8px;margin-bottom:8px;display:flex}.debug-items[data-v-1a6ac7a1]{margin-top:4px;padding-left:8px}.debug-item[data-v-1a6ac7a1]{border-left:2px solid #fff3;margin-bottom:2px;padding:2px 0 2px 6px}.footer-controls[data-v-fc2f14b9]{background-color:var(--v-background);z-index:100;position:fixed;bottom:0}.footer-right[data-v-fc2f14b9]{background-color:var(--v-background);z-index:100;position:fixed;bottom:0;right:0}.correct[data-v-fc2f14b9]{animation:1.25s ease-out varFade-fc2f14b9}.incorrect[data-v-fc2f14b9]{animation:1.25s ease-out purpleFade-fc2f14b9}a[data-v-fc2f14b9]{text-decoration:underline}.StudySession[data-v-fc2f14b9]{flex-direction:column;flex:1;min-height:0;display:flex}.card-transition-container[data-v-fc2f14b9]{flex-direction:column;flex:1;justify-content:center;min-height:0;display:flex;position:relative;overflow:hidden}@keyframes varFade-fc2f14b9{0%{box-shadow:rgba(var(--r), var(--g), 0, .25) 0px 7px 8px -4px, rgba(var(--r), var(--g), 0, .25) 0px 12px 17px 2px, rgba(var(--r), var(--g), 0, .25) 0px 5px 22px 4px}to{box-shadow:0 0 #00960000}}@keyframes greenFade-fc2f14b9{0%{box-shadow:0 7px 8px -4px #00960040,0 12px 17px 2px #00960040,0 5px 22px 4px #00960040}to{box-shadow:0 0 #00960000}}@keyframes purpleFade-fc2f14b9{0%{box-shadow:0 7px 8px -4px #73004b40,0 12px 17px 2px #73004b40,0 5px 22px 4px #73004b40}to{box-shadow:0 0 #73004b00}}.component-fade-enter-active,.component-fade-leave-active{transition:opacity .2s}.component-fade-enter-from,.component-fade-leave-to{opacity:0}.card-slide-leave-active{will-change:transform, opacity;pointer-events:none;height:-moz-fit-content;height:fit-content;margin:auto;animation:.4s cubic-bezier(.4,0,.7,.2) both cardBackOutLeft;top:0;bottom:0;left:0;right:0;position:absolute!important}.card-slide-leave-active *{transition:none!important;animation-play-state:paused!important}.card-slide-enter-active{will-change:transform, opacity;animation:.25s ease-out .1s both cardSlideInRight}@keyframes cardBackOutLeft{0%{opacity:1;transform:translate(0)scale(1)}40%{opacity:.8;transform:translate(0)scale(.88)}to{opacity:0;transform:translate(-100%)scale(.88)}}@keyframes cardSlideInRight{0%{opacity:0;transform:translate(60%)}to{opacity:1;transform:translate(0)}}.card-scale-leave-active{transition:transform .15s ease-in,opacity .15s ease-in}.card-scale-enter-active{transition:transform .2s cubic-bezier(.34,1.4,.64,1),opacity .15s ease-out}.card-scale-leave-to{opacity:0;transform:scale(.92)}.card-scale-enter-from{opacity:0;transform:scale(1.03)}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}.code-block-wrapper{background-color:#f6f8fa;border-radius:4px;margin:1rem 0;position:relative;overflow:auto}.language-indicator{color:#666;z-index:1;text-transform:lowercase;background-color:#ffffffb3;border-radius:4px;padding:2px 8px;font-family:monospace;font-size:.75rem;position:absolute;top:8px;right:10px}.user-input-container[data-v-aa14961f]{vertical-align:baseline;min-width:6em;display:inline-block}.user-input-string[data-v-aa14961f]{color:currentColor;font-family:inherit;font-size:inherit;line-height:inherit;text-align:center;background:0 0;border:none;border-bottom:1px solid;outline:none;width:100%;margin:0;padding:0;display:inline-block}.user-input-string[data-v-aa14961f]:focus{border-bottom:2px solid}#input[data-v-486ac035]{text-align:center;min-width:4em;display:inline-block}.underline[data-v-486ac035]{text-decoration:underline;-webkit-text-decoration-style:solid 14px;text-decoration-style:solid 14px}blockquote[data-v-de3eebd6]{border-left:3px solid teal;padding-left:8px}.codespan[data-v-de3eebd6]{margin-left:1px;margin-right:1px;padding-left:3px;padding-right:3px}p[data-v-de3eebd6]{margin-top:15px;margin-bottom:15px}.playing[data-v-e1a0f62c]{z-index:1;animation:.85s ease-in-out infinite alternate pulse-e1a0f62c}@keyframes pulse-e1a0f62c{0%{transform:scale(1)}to{transform:scale(1.15)}}.choice[data-v-96de7172]{text-align:center;border-radius:4px;min-width:75px;margin:10px;padding:5px 15px;transition:all .2s ease-in-out;display:inline-block}.selected[data-v-96de7172]{z-index:1;transform:translateY(-10px)scale(1.15)}.not-selected[data-v-96de7172]{z-index:0}.userInput[data-v-a56dcd1c]{text-align:center;border:none;border-bottom:1px #000}.cardView[data-v-93f758b5]{border-radius:8px;padding:15px}.component-fade-enter-active[data-v-93f758b5],.component-fade-leave-active[data-v-93f758b5]{transition:opacity .3s}.component-fade-enter[data-v-93f758b5],.component-fade-leave-to[data-v-93f758b5]{opacity:0}.component-fade-enter-active[data-v-9a38a213],.component-fade-leave-active[data-v-9a38a213]{transition:opacity .5s}.component-fade-enter[data-v-9a38a213],.component-fade-leave-to[data-v-9a38a213]{opacity:0}.login[data-v-563b0048]{max-width:650px}.component-fade-enter-active[data-v-5a55bdf0],.component-fade-leave-active[data-v-5a55bdf0]{transition:opacity .5s}.component-fade-enter[data-v-5a55bdf0],.component-fade-leave-to[data-v-5a55bdf0]{opacity:0}.vue-tags-input[data-v-f7373dc0]{max-width:100%}.autocomplete-item[data-v-f7373dc0]{align-items:center;padding:5px;display:flex}.autocomplete-item.is-active[data-v-f7373dc0]{background-color:#e8e8e8}.autocomplete-item.is-active>.tag-name[data-v-f7373dc0]{color:#fff;background-color:#5c6bc0}.tag-name[data-v-f7373dc0]{color:#333;background-color:#e0e0e0;border-radius:3px;margin-right:5px;padding:2px 6px;font-weight:700}.tag-snippet[data-v-f7373dc0]{color:#666;font-size:.9em}.autocomplete-item.is-active .tag-snippet[data-v-f7373dc0]{color:#333}.component-fade-enter-active[data-v-5ecc9d21],.component-fade-leave-active[data-v-5ecc9d21]{transition:opacity .5s}.component-fade-enter[data-v-5ecc9d21],.component-fade-leave-to[data-v-5ecc9d21]{opacity:0}.component-scale-enter-active[data-v-5ecc9d21],.component-scale-leave-active[data-v-5ecc9d21]{max-height:auto;transform-origin:top;transition:transform .3s,max-height .3s;transform:scale(1)}.component-scale-enter[data-v-5ecc9d21],.component-fade-leave-to[data-v-5ecc9d21]{max-height:0;overflow:hidden;transform:scaleY(0)}.component-fade-enter-active[data-v-38e9efe1],.component-fade-leave-active[data-v-38e9efe1]{transition:opacity .5s}.component-fade-enter[data-v-38e9efe1],.component-fade-leave-to[data-v-38e9efe1]{opacity:0}.component-scale-enter-active[data-v-38e9efe1],.component-scale-leave-active[data-v-38e9efe1]{max-height:auto;transform-origin:top;transition:transform .3s,max-height .3s;transform:scale(1)}.component-scale-enter[data-v-38e9efe1],.component-fade-leave-to[data-v-38e9efe1]{max-height:0;overflow:hidden;transform:scaleY(0)}.course-tag-filter-widget[data-v-e1ba963b]{width:100%}.filter-summary[data-v-e1ba963b]{color:rgba(var(--v-theme-on-surface), .7)}
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`),require(`moment`),require(`@vue-skuilder/common`),require(`@vue-skuilder/db`),require(`pinia`),require(`vue-router`),require(`@vojtechlanka/vue-tags-input`)):typeof define==`function`&&define.amd?define([`exports`,`vue`,`moment`,`@vue-skuilder/common`,`@vue-skuilder/db`,`pinia`,`vue-router`,`@vojtechlanka/vue-tags-input`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.VueSkuilderCommonUI={},e.Vue,e.moment,e.VueSkuilderCommon,e.VueSkuilderDb,e.Pinia,e.VueRouter,e.VueTagsInput))})(this,function(e,t,n,r,i,a,o,s){var c=document.createElement(`style`);c.textContent=`.tooltip[data-v-ca46239a]{color:#fff;background-color:#000c;border-radius:3px;padding:5px;font-size:12px}.sk-mousetrap-tooltip-wrapper[data-v-5d6fb09c]{display:inline-block;position:relative}.sk-mousetrap-tooltip[data-v-5d6fb09c]{color:#fff;white-space:nowrap;pointer-events:none;z-index:9999;background-color:#000c;border-radius:4px;padding:2px 6px;font-size:12px;position:absolute}.sk-mt-tooltip-top[data-v-5d6fb09c]{margin-bottom:5px;bottom:100%;left:50%;transform:translate(-50%)}.sk-mt-tooltip-bottom[data-v-5d6fb09c]{margin-top:5px;top:100%;left:50%;transform:translate(-50%)}.sk-mt-tooltip-left[data-v-5d6fb09c]{margin-right:5px;top:50%;right:100%;transform:translateY(-50%)}.sk-mt-tooltip-right[data-v-5d6fb09c]{margin-left:5px;top:50%;left:100%;transform:translateY(-50%)}.sk-mousetrap-highlight-glow[data-v-5d6fb09c]{transition:box-shadow .25s;box-shadow:0 0 8px 2px #1976d299}.sk-mousetrap-highlight-scale[data-v-5d6fb09c]{transition:transform .25s;transform:scale(1.03)}.sk-mousetrap-highlight-border[data-v-5d6fb09c]{outline-offset:2px;border-radius:4px;outline:2px solid #1976d2cc;transition:outline .25s,outline-offset .25s}.fade-enter-active[data-v-5d6fb09c],.fade-leave-active[data-v-5d6fb09c]{transition:opacity .25s}.fade-enter-from[data-v-5d6fb09c],.fade-leave-to[data-v-5d6fb09c]{opacity:0}.pageSelect[data-v-a75fea7e]{max-width:60px}.selected-card[data-v-285e13bd]{background-color:#e0f2f7;border-left:4px solid #2196f3}.cursor-pointer[data-v-285e13bd]{cursor:pointer}.error-message[data-v-a4bdfdfb]{color:#f44336;background-color:#ffebee;border-radius:4px;margin:8px 0;padding:16px}.negative-interval[data-v-a4bdfdfb]{color:#f44336;background-color:#ffebee;border-radius:3px;padding:2px 4px;font-weight:700}.invalid-timestamp[data-v-a4bdfdfb]{color:#f44336;font-weight:700}.card-history-viewer[data-v-a4bdfdfb]{margin:16px 0}.timer-container[data-v-5960940a]{cursor:pointer;display:inline-flex}.cardView[data-v-2d892b82]{border-radius:8px;padding:15px}.session-debug[data-v-1a6ac7a1]{max-height:400px;font-family:Courier New,monospace;font-size:.75rem;overflow-y:auto}.debug-section[data-v-1a6ac7a1]{background-color:#ffffff0d;border-radius:4px;min-height:120px;padding:8px}.debug-header[data-v-1a6ac7a1]{border-bottom:1px solid #ffffff1a;align-items:center;margin-bottom:4px;padding-bottom:4px;display:flex}.debug-stats[data-v-1a6ac7a1]{gap:8px;margin-bottom:8px;display:flex}.debug-items[data-v-1a6ac7a1]{margin-top:4px;padding-left:8px}.debug-item[data-v-1a6ac7a1]{border-left:2px solid #fff3;margin-bottom:2px;padding:2px 0 2px 6px}.footer-controls[data-v-bc445530]{background-color:var(--v-background);z-index:100;position:fixed;bottom:0}.footer-right[data-v-bc445530]{background-color:var(--v-background);z-index:100;position:fixed;bottom:0;right:0}.correct[data-v-bc445530]{animation:1.25s ease-out varFade-bc445530}.incorrect[data-v-bc445530]{animation:1.25s ease-out purpleFade-bc445530}a[data-v-bc445530]{text-decoration:underline}.StudySession[data-v-bc445530]{flex-direction:column;flex:1;min-height:0;display:flex}.card-transition-container[data-v-bc445530]{flex-direction:column;flex:1;justify-content:center;min-height:0;display:flex;position:relative;overflow:hidden}@keyframes varFade-bc445530{0%{box-shadow:rgba(var(--r), var(--g), 0, .25) 0px 7px 8px -4px, rgba(var(--r), var(--g), 0, .25) 0px 12px 17px 2px, rgba(var(--r), var(--g), 0, .25) 0px 5px 22px 4px}to{box-shadow:0 0 #00960000}}@keyframes greenFade-bc445530{0%{box-shadow:0 7px 8px -4px #00960040,0 12px 17px 2px #00960040,0 5px 22px 4px #00960040}to{box-shadow:0 0 #00960000}}@keyframes purpleFade-bc445530{0%{box-shadow:0 7px 8px -4px #73004b40,0 12px 17px 2px #73004b40,0 5px 22px 4px #73004b40}to{box-shadow:0 0 #73004b00}}.component-fade-enter-active,.component-fade-leave-active{transition:opacity .2s}.component-fade-enter-from,.component-fade-leave-to{opacity:0}.card-slide-leave-active{will-change:transform, opacity;pointer-events:none;height:-moz-fit-content;height:fit-content;margin:auto;animation:.4s cubic-bezier(.4,0,.7,.2) both cardBackOutLeft;top:0;bottom:0;left:0;right:0;position:absolute!important}.card-slide-leave-active *{transition:none!important;animation-play-state:paused!important}.card-slide-enter-active{will-change:transform, opacity;animation:.25s ease-out .1s both cardSlideInRight}@keyframes cardBackOutLeft{0%{opacity:1;transform:translate(0)scale(1)}40%{opacity:.8;transform:translate(0)scale(.88)}to{opacity:0;transform:translate(-100%)scale(.88)}}@keyframes cardSlideInRight{0%{opacity:0;transform:translate(60%)}to{opacity:1;transform:translate(0)}}.card-scale-leave-active{transition:transform .15s ease-in,opacity .15s ease-in}.card-scale-enter-active{transition:transform .2s cubic-bezier(.34,1.4,.64,1),opacity .15s ease-out}.card-scale-leave-to{opacity:0;transform:scale(.92)}.card-scale-enter-from{opacity:0;transform:scale(1.03)}pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}.code-block-wrapper{background-color:#f6f8fa;border-radius:4px;margin:1rem 0;position:relative;overflow:auto}.language-indicator{color:#666;z-index:1;text-transform:lowercase;background-color:#ffffffb3;border-radius:4px;padding:2px 8px;font-family:monospace;font-size:.75rem;position:absolute;top:8px;right:10px}.user-input-container[data-v-aa14961f]{vertical-align:baseline;min-width:6em;display:inline-block}.user-input-string[data-v-aa14961f]{color:currentColor;font-family:inherit;font-size:inherit;line-height:inherit;text-align:center;background:0 0;border:none;border-bottom:1px solid;outline:none;width:100%;margin:0;padding:0;display:inline-block}.user-input-string[data-v-aa14961f]:focus{border-bottom:2px solid}#input[data-v-486ac035]{text-align:center;min-width:4em;display:inline-block}.underline[data-v-486ac035]{text-decoration:underline;-webkit-text-decoration-style:solid 14px;text-decoration-style:solid 14px}blockquote[data-v-de3eebd6]{border-left:3px solid teal;padding-left:8px}.codespan[data-v-de3eebd6]{margin-left:1px;margin-right:1px;padding-left:3px;padding-right:3px}p[data-v-de3eebd6]{margin-top:15px;margin-bottom:15px}.playing[data-v-e1a0f62c]{z-index:1;animation:.85s ease-in-out infinite alternate pulse-e1a0f62c}@keyframes pulse-e1a0f62c{0%{transform:scale(1)}to{transform:scale(1.15)}}.choice[data-v-96de7172]{text-align:center;border-radius:4px;min-width:75px;margin:10px;padding:5px 15px;transition:all .2s ease-in-out;display:inline-block}.selected[data-v-96de7172]{z-index:1;transform:translateY(-10px)scale(1.15)}.not-selected[data-v-96de7172]{z-index:0}.userInput[data-v-a56dcd1c]{text-align:center;border:none;border-bottom:1px #000}.cardView[data-v-93f758b5]{border-radius:8px;padding:15px}.component-fade-enter-active[data-v-93f758b5],.component-fade-leave-active[data-v-93f758b5]{transition:opacity .3s}.component-fade-enter[data-v-93f758b5],.component-fade-leave-to[data-v-93f758b5]{opacity:0}.component-fade-enter-active[data-v-9a38a213],.component-fade-leave-active[data-v-9a38a213]{transition:opacity .5s}.component-fade-enter[data-v-9a38a213],.component-fade-leave-to[data-v-9a38a213]{opacity:0}.login[data-v-563b0048]{max-width:650px}.component-fade-enter-active[data-v-5a55bdf0],.component-fade-leave-active[data-v-5a55bdf0]{transition:opacity .5s}.component-fade-enter[data-v-5a55bdf0],.component-fade-leave-to[data-v-5a55bdf0]{opacity:0}.vue-tags-input[data-v-f7373dc0]{max-width:100%}.autocomplete-item[data-v-f7373dc0]{align-items:center;padding:5px;display:flex}.autocomplete-item.is-active[data-v-f7373dc0]{background-color:#e8e8e8}.autocomplete-item.is-active>.tag-name[data-v-f7373dc0]{color:#fff;background-color:#5c6bc0}.tag-name[data-v-f7373dc0]{color:#333;background-color:#e0e0e0;border-radius:3px;margin-right:5px;padding:2px 6px;font-weight:700}.tag-snippet[data-v-f7373dc0]{color:#666;font-size:.9em}.autocomplete-item.is-active .tag-snippet[data-v-f7373dc0]{color:#333}.component-fade-enter-active[data-v-5ecc9d21],.component-fade-leave-active[data-v-5ecc9d21]{transition:opacity .5s}.component-fade-enter[data-v-5ecc9d21],.component-fade-leave-to[data-v-5ecc9d21]{opacity:0}.component-scale-enter-active[data-v-5ecc9d21],.component-scale-leave-active[data-v-5ecc9d21]{max-height:auto;transform-origin:top;transition:transform .3s,max-height .3s;transform:scale(1)}.component-scale-enter[data-v-5ecc9d21],.component-fade-leave-to[data-v-5ecc9d21]{max-height:0;overflow:hidden;transform:scaleY(0)}.component-fade-enter-active[data-v-38e9efe1],.component-fade-leave-active[data-v-38e9efe1]{transition:opacity .5s}.component-fade-enter[data-v-38e9efe1],.component-fade-leave-to[data-v-38e9efe1]{opacity:0}.component-scale-enter-active[data-v-38e9efe1],.component-scale-leave-active[data-v-38e9efe1]{max-height:auto;transform-origin:top;transition:transform .3s,max-height .3s;transform:scale(1)}.component-scale-enter[data-v-38e9efe1],.component-fade-leave-to[data-v-38e9efe1]{max-height:0;overflow:hidden;transform:scaleY(0)}.course-tag-filter-widget[data-v-e1ba963b]{width:100%}.filter-summary[data-v-e1ba963b]{color:rgba(var(--v-theme-on-surface), .7)}
2
2
  /*$vite$:1*/`,document.head.appendChild(c),Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var l=Object.create,u=Object.defineProperty,__name=(e,t)=>u(e,`name`,{value:t,configurable:!0}),d=Object.getOwnPropertyDescriptor,f=Object.getOwnPropertyNames,p=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,__esmMin=(e,t)=>()=>(e&&(t=e(e=0)),t),__commonJSMin=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),__exportAll=(e,t)=>{let n={};for(var r in e)u(n,r,{get:e[r],enumerable:!0});return t||u(n,Symbol.toStringTag,{value:`Module`}),n},__copyProps=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=f(t),a=0,o=i.length,s;a<o;a++)s=i[a],!m.call(e,s)&&s!==n&&u(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=d(t,s))||r.enumerable});return e},__toESM=(e,t,n)=>(n=e==null?{}:l(p(e)),__copyProps(t||!e||!e.__esModule?u(n,`default`,{value:e,enumerable:!0}):n,e));n=__toESM(n);var h=(0,t.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 e=Array.isArray(this.localActivityRecords)&&this.localActivityRecords.length>0,t=e?this.localActivityRecords:this.activityRecords||[];return console.log(`Using effectiveActivityRecords, count:`,t.length,`source:`,e?`local`:`prop`),t}},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 e=await this.activityRecordsGetter();Array.isArray(e)?(this.localActivityRecords=e.filter(e=>{if(!e||!e.timeStamp)return!1;try{let t=(0,n.default)(e.timeStamp);return t.isValid()&&t.year()>2e3&&t.year()<2100}catch{return!1}}),console.log(`Received ${e.length} records, ${this.localActivityRecords.length} valid after filtering`),this.processRecords(),this.createWeeksData()):(console.error(`Activity records getter did not return an array:`,e),this.localActivityRecords=[])}catch(e){console.error(`Error fetching activity records:`,e),this.localActivityRecords=[]}finally{this.isLoading=!1}else console.log(`No activityRecordsGetter provided, using direct activityRecords prop`)},methods:{toDateString(e){let t=(0,n.default)(e);return n.default.months()[t.month()]+` `+t.date()},processRecords(){let e=this.effectiveActivityRecords||[];console.log(`Processing ${e.length} records`);let t={};if(e.length===0){console.log(`No records to process`),this.heatmapData=t;return}let r=new Set,i={},a=0,o=0;for(let s=0;s<e.length;s++){let c=e[s];if(!c||typeof c!=`object`||!c.timeStamp){o++;continue}try{let e;if(typeof c.timeStamp==`string`)e=(0,n.default)(c.timeStamp).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`number`)e=(0,n.default)(new Date(c.timeStamp)).format(`YYYY-MM-DD`);else if(typeof c.timeStamp==`object`)e=typeof c.timeStamp.format==`function`?c.timeStamp.format(`YYYY-MM-DD`):c.timeStamp instanceof Date?(0,n.default)(c.timeStamp).format(`YYYY-MM-DD`):(0,n.default)(String(c.timeStamp)).format(`YYYY-MM-DD`);else{o++;continue}if((0,n.default)(e,`YYYY-MM-DD`,!0).isValid()){t[e]=(t[e]||0)+1,r.add(e);let n=e.substring(0,7);i[n]=(i[n]||0)+1,a++}else o++}catch{o++}}console.log(`Processed ${a} valid dates, ${o} invalid dates`),console.log(`Found ${r.size} unique dates`),console.log(`Date distribution by month:`,i),this.heatmapData=t},createWeeksData(){this.weeks=[],this.maxInRange=0;let e=(0,n.default)(),t=e.clone().subtract(52,`weeks`),r=t.clone().startOf(`week`);console.log(`Creating weeks data from`,t.format(`YYYY-MM-DD`),`to`,e.format(`YYYY-MM-DD`)),Object.keys(this.heatmapData).length===0&&console.log(`No heatmap data available to display`);let i=Object.keys(this.heatmapData).slice(0,5);for(console.log(`Sample dates in heatmap data:`,i);r.isSameOrBefore(e);){let e=[];for(let t=0;t<7;t++){let t=r.format(`YYYY-MM-DD`),n={date:t,count:this.heatmapData[t]||0};e.push(n),n.count>this.maxInRange&&(this.maxInRange=n.count),r.add(1,`day`)}this.weeks.push(e)}console.log(`Weeks data created, maxInRange:`,this.maxInRange);let a=0,o=0;Object.values(this.heatmapData).forEach(e=>{a++,o+=e}),console.log(`Activity summary: ${o} activities across ${a} days`)},getColor(e){if(this.maxInRange===0)return this.hslToString(this.inactiveColor);let t=e===0?0:Math.min(2*e/this.maxInRange,1),r=this.activeColor;if(this.enableSeasonalColors){let e=(0,n.default)();e.month()===11&&e.date()>=5?r=Math.random()>.5?{h:350,s:.8,l:.5}:{h:135,s:.8,l:.4}:e.month()===9&&e.date()>=25&&(r=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 i=r.h,a=this.interpolate(this.inactiveColor.s,r.s,t),o=this.interpolate(this.inactiveColor.l,r.l,t);return this.hslToString({h:i,s:a,l:o})},interpolate(e,t,n){return e+(t-e)*n},hslToString(e){return`hsl(${e.h}, ${e.s*100}%, ${e.l*100}%)`},showTooltip(e,t){this.tooltipData=e,this.tooltipStyle={position:`absolute`,left:`${t.pageX+10}px`,top:`${t.pageY+10}px`}},hideTooltip(){this.tooltipData=null}}}),g,_=__esmMin((()=>{g=__name((e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},`default`)}));_();var v=[`width`,`height`],y=[`transform`],b=[`y`,`width`,`height`,`fill`,`onMouseover`];function _sfc_render$29(e,n,r,i,a,o){return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,null,[((0,t.openBlock)(),(0,t.createElementBlock)(`svg`,{width:e.width,height:e.height},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.weeks,(r,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`g`,{key:i,transform:`translate(${i*(e.cellSize+e.cellMargin)}, 0)`},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(r,(r,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`rect`,{key:r.date,x:0,y:i*(e.cellSize+e.cellMargin),width:e.cellSize,height:e.cellSize,fill:e.getColor(r.count),onMouseover:t=>e.showTooltip(r,t),onMouseout:n[0]||(n[0]=(...t)=>e.hideTooltip&&e.hideTooltip(...t))},null,40,b))),128))],8,y))),128))],8,v)),e.tooltipData?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:`tooltip`,style:(0,t.normalizeStyle)(e.tooltipStyle)},(0,t.toDisplayString)(e.tooltipData.count)+` review`+(0,t.toDisplayString)(e.tooltipData.count===1?``:`s`)+` on `+(0,t.toDisplayString)(e.toDateString(e.tooltipData.date)),5)):(0,t.createCommentVNode)(``,!0)])}__name(_sfc_render$29,`_sfc_render`);var x=g(h,[[`render`,_sfc_render$29],[`__scopeId`,`data-v-ca46239a`]]),S=__commonJSMin(((e,t)=>{(function(e,n,r){if(!e)return;for(var i={8:`backspace`,9:`tab`,13:`enter`,16:`shift`,17:`ctrl`,18:`alt`,20:`capslock`,27:`esc`,32:`space`,33:`pageup`,34:`pagedown`,35:`end`,36:`home`,37:`left`,38:`up`,39:`right`,40:`down`,45:`ins`,46:`del`,91:`meta`,93:`meta`,224:`meta`},a={106:`*`,107:`+`,109:`-`,110:`.`,111:`/`,186:`;`,187:`=`,188:`,`,189:`-`,190:`.`,191:`/`,192:"`",219:`[`,220:`\\`,221:`]`,222:`'`},o={"~":"`","!":`1`,"@":`2`,"#":`3`,$:`4`,"%":`5`,"^":`6`,"&":`7`,"*":`8`,"(":`9`,")":`0`,_:`-`,"+":`=`,":":`;`,'"':`'`,"<":`,`,">":`.`,"?":`/`,"|":`\\`},s={option:`alt`,command:`meta`,return:`enter`,escape:`esc`,plus:`+`,mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?`meta`:`ctrl`},c,l=1;l<20;++l)i[111+l]=`f`+l;for(l=0;l<=9;++l)i[l+96]=l.toString();function _addEvent(e,t,n){if(e.addEventListener){e.addEventListener(t,n,!1);return}e.attachEvent(`on`+t,n)}function _characterFromEvent(e){if(e.type==`keypress`){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return i[e.which]?i[e.which]:a[e.which]?a[e.which]:String.fromCharCode(e.which).toLowerCase()}function _modifiersMatch(e,t){return e.sort().join(`,`)===t.sort().join(`,`)}function _eventModifiers(e){var t=[];return e.shiftKey&&t.push(`shift`),e.altKey&&t.push(`alt`),e.ctrlKey&&t.push(`ctrl`),e.metaKey&&t.push(`meta`),t}function _preventDefault(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function _stopPropagation(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function _isModifier(e){return e==`shift`||e==`ctrl`||e==`alt`||e==`meta`}function _getReverseMap(){if(!c)for(var e in c={},i)e>95&&e<112||i.hasOwnProperty(e)&&(c[i[e]]=e);return c}function _pickBestAction(e,t,n){return n||(n=_getReverseMap()[e]?`keydown`:`keypress`),n==`keypress`&&t.length&&(n=`keydown`),n}function _keysFromString(e){return e===`+`?[`+`]:(e=e.replace(/\+{2}/g,`+plus`),e.split(`+`))}function _getKeyInfo(e,t){var n,r,i,a=[];for(n=_keysFromString(e),i=0;i<n.length;++i)r=n[i],s[r]&&(r=s[r]),t&&t!=`keypress`&&o[r]&&(r=o[r],a.push(`shift`)),_isModifier(r)&&a.push(r);return t=_pickBestAction(r,a,t),{key:r,modifiers:a,action:t}}function _belongsTo(e,t){return e===null||e===n?!1:e===t?!0:_belongsTo(e.parentNode,t)}function Mousetrap(e){var t=this;if(e=e||n,!(t instanceof Mousetrap))return new Mousetrap(e);t.target=e,t._callbacks={},t._directMap={};var r={},i,a=!1,o=!1,s=!1;function _resetSequences(e){e=e||{};var t=!1,n;for(n in r){if(e[n]){t=!0;continue}r[n]=0}t||(s=!1)}function _getMatches(e,n,i,a,o,s){var c,l,u=[],d=i.type;if(!t._callbacks[e])return[];for(d==`keyup`&&_isModifier(e)&&(n=[e]),c=0;c<t._callbacks[e].length;++c)if(l=t._callbacks[e][c],!(!a&&l.seq&&r[l.seq]!=l.level)&&d==l.action&&(d==`keypress`&&!i.metaKey&&!i.ctrlKey||_modifiersMatch(n,l.modifiers))){var f=!a&&l.combo==o,p=a&&l.seq==a&&l.level==s;(f||p)&&t._callbacks[e].splice(c,1),u.push(l)}return u}function _fireCallback(e,n,r,i){t.stopCallback(n,n.target||n.srcElement,r,i)||e(n,r)===!1&&(_preventDefault(n),_stopPropagation(n))}t._handleKey=function(e,t,n){var r=_getMatches(e,t,n),i,a={},c=0,l=!1;for(i=0;i<r.length;++i)r[i].seq&&(c=Math.max(c,r[i].level));for(i=0;i<r.length;++i){if(r[i].seq){if(r[i].level!=c)continue;l=!0,a[r[i].seq]=1,_fireCallback(r[i].callback,n,r[i].combo,r[i].seq);continue}l||_fireCallback(r[i].callback,n,r[i].combo)}var u=n.type==`keypress`&&o;n.type==s&&!_isModifier(e)&&!u&&_resetSequences(a),o=l&&n.type==`keydown`};function _handleKeyEvent(e){typeof e.which!=`number`&&(e.which=e.keyCode);var n=_characterFromEvent(e);if(n){if(e.type==`keyup`&&a===n){a=!1;return}t.handleKey(n,_eventModifiers(e),e)}}function _resetSequenceTimer(){clearTimeout(i),i=setTimeout(_resetSequences,1e3)}function _bindSequence(e,t,n,i){r[e]=0;function _increaseSequence(t){return function(){s=t,++r[e],_resetSequenceTimer()}}function _callbackAndReset(t){_fireCallback(n,t,e),i!==`keyup`&&(a=_characterFromEvent(t)),setTimeout(_resetSequences,10)}for(var o=0;o<t.length;++o){var c=o+1===t.length?_callbackAndReset:_increaseSequence(i||_getKeyInfo(t[o+1]).action);_bindSingle(t[o],c,i,e,o)}}function _bindSingle(e,n,r,i,a){t._directMap[e+`:`+r]=n,e=e.replace(/\s+/g,` `);var o=e.split(` `),s;if(o.length>1){_bindSequence(e,o,n,r);return}s=_getKeyInfo(e,r),t._callbacks[s.key]=t._callbacks[s.key]||[],_getMatches(s.key,s.modifiers,{type:s.action},i,e,a),t._callbacks[s.key][i?`unshift`:`push`]({callback:n,modifiers:s.modifiers,action:s.action,seq:i,level:a,combo:e})}t._bindMultiple=function(e,t,n){for(var r=0;r<e.length;++r)_bindSingle(e[r],t,n)},_addEvent(e,`keypress`,_handleKeyEvent),_addEvent(e,`keydown`,_handleKeyEvent),_addEvent(e,`keyup`,_handleKeyEvent)}Mousetrap.prototype.bind=function(e,t,n){var r=this;return e=e instanceof Array?e:[e],r._bindMultiple.call(r,e,t,n),r},Mousetrap.prototype.unbind=function(e,t){var n=this;return n.bind.call(n,e,function(){},t)},Mousetrap.prototype.trigger=function(e,t){var n=this;return n._directMap[e+`:`+t]&&n._directMap[e+`:`+t]({},e),n},Mousetrap.prototype.reset=function(){var e=this;return e._callbacks={},e._directMap={},e},Mousetrap.prototype.stopCallback=function(e,t){var n=this;if((` `+t.className+` `).indexOf(` mousetrap `)>-1||_belongsTo(t,n.target))return!1;if(`composedPath`in e&&typeof e.composedPath==`function`){var r=e.composedPath()[0];r!==e.target&&(t=r)}return t.tagName==`INPUT`||t.tagName==`SELECT`||t.tagName==`TEXTAREA`||t.isContentEditable},Mousetrap.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},Mousetrap.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(i[t]=e[t]);c=null},Mousetrap.init=function(){var e=Mousetrap(n);for(var t in e)t.charAt(0)!==`_`&&(Mousetrap[t]=function(t){return function(){return e[t].apply(e,arguments)}}(t))},Mousetrap.init(),e.Mousetrap=Mousetrap,t!==void 0&&t.exports&&(t.exports=Mousetrap),typeof define==`function`&&define.amd&&define(function(){return Mousetrap})})(typeof window<`u`?window:null,typeof window<`u`?document:null)}));function _typeof(e){"@babel/helpers - typeof";return _typeof=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},_typeof(e)}var C=__esmMin((()=>{}));function toPrimitive(e,t){if(_typeof(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(_typeof(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var w=__esmMin((()=>{C()}));function toPropertyKey(e){var t=toPrimitive(e,`string`);return _typeof(t)==`symbol`?t:t+``}var T=__esmMin((()=>{C(),w()}));function _defineProperty(e,t,n){return(t=toPropertyKey(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var E=__esmMin((()=>{T()}));function inputElementIsFocused(){let e=document.activeElement;return e instanceof HTMLInputElement&&(e.type===`checkbox`||e.type===`radio`)?!1:e instanceof HTMLElement&&(e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.tagName===`SELECT`||e.isContentEditable)}var D,O,k=__esmMin((()=>{D=__toESM(S()),E(),O=class SkldrMouseTrap{constructor(){_defineProperty(this,`mouseTrap`,void 0),_defineProperty(this,`hotkeys`,void 0),this.mouseTrap=new D.default,this.mouseTrap.stopCallback=()=>!1,this.hotkeys=[]}static get commands(){return SkldrMouseTrap.instance().hotkeys.map(e=>({command:e.command,hotkey:e.hotkey}))}static addBinding(e){let t=Array.isArray(e)?e:[e],n=SkldrMouseTrap.instance();n.hotkeys=[...n.hotkeys,...t],t.forEach(e=>{n.mouseTrap.bind(e.hotkey,(t,n)=>{if(inputElementIsFocused()){console.log(`Ignoring hotkey ${e.hotkey} while input element is focused`);return}e.callback(t,n)})})}static removeBinding(e){let t=SkldrMouseTrap.instance(),n=[...t.hotkeys];Array.isArray(e)&&!e.every(e=>typeof e==`string`||typeof e==`number`)?e.forEach(e=>{t.hotkeys=t.hotkeys.filter(t=>JSON.stringify(t.hotkey)!==JSON.stringify(e)),t.mouseTrap.unbind(e)}):(t.hotkeys=n.filter(t=>JSON.stringify(t.hotkey)!==JSON.stringify(e)),t.mouseTrap.unbind(e))}static reset(){console.warn(`SkldrMouseTrap.reset() may affect hotkeys registered by other components. Consider using removeBinding() with specific hotkeys for better component isolation.`),SkldrMouseTrap.instance().mouseTrap.reset(),SkldrMouseTrap.instance().hotkeys=[]}static instance(){return SkldrMouseTrap._instance||(SkldrMouseTrap._instance=new SkldrMouseTrap),SkldrMouseTrap._instance}},_defineProperty(O,`_instance`,void 0)}));k();var A=(0,t.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=O.commands,this.display=this.commands.length>0}}});_();var ee={class:`text-caption ml-2`};function _sfc_render$28(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-icon`),c=(0,t.resolveComponent)(`v-btn`),l=(0,t.resolveComponent)(`v-toolbar-title`),u=(0,t.resolveComponent)(`v-toolbar`),d=(0,t.resolveComponent)(`v-spacer`),f=(0,t.resolveComponent)(`v-list-item`),p=(0,t.resolveComponent)(`v-list`),m=(0,t.resolveComponent)(`v-card`),h=(0,t.resolveComponent)(`v-dialog`);return e.display?((0,t.openBlock)(),(0,t.createBlock)(h,{key:0,"max-width":`500px`,transition:`dialog-transition`},{activator:(0,t.withCtx)(({props:e})=>[(0,t.createVNode)(c,(0,t.mergeProps)({icon:``,color:`primary`},e),{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,null,{default:(0,t.withCtx)(()=>n[0]||(n[0]=[(0,t.createTextVNode)(`mdi-keyboard`)])),_:1})]),_:2},1040)]),default:(0,t.withCtx)(()=>[(0,t.createVNode)(m,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,{color:`secondary`,dark:``,dense:``},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,{class:`text-subtitle-1`},{default:(0,t.withCtx)(()=>n[1]||(n[1]=[(0,t.createTextVNode)(`Shortcut keys:`)])),_:1})]),_:1}),(0,t.createVNode)(p,{dense:``},{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.commands,e=>((0,t.openBlock)(),(0,t.createBlock)(f,{key:Array.isArray(e.hotkey)?e.hotkey.join(`,`):e.hotkey,class:`py-1`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(c,{variant:`outlined`,color:`primary`,class:`text-white`,size:`small`},{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(Array.isArray(e.hotkey)?e.hotkey[0]:e.hotkey),1)]),_:2},1024),(0,t.createVNode)(d),(0,t.createElementVNode)(`span`,ee,(0,t.toDisplayString)(e.command),1)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1})):(0,t.createCommentVNode)(``,!0)}__name(_sfc_render$28,`_sfc_render`);var j=g(A,[[`render`,_sfc_render$28]]);k();var te=(0,t.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(e,{emit:n}){let r=(0,t.ref)(null),i=(0,t.ref)(!1);(0,t.ref)(`hotkey-${Math.random().toString(36).substring(2,15)}`);let a=(0,t.computed)(()=>{let t=Array.isArray(e.hotkey)?e.hotkey[0]:e.hotkey;return t.includes(` `)?t.toLowerCase().split(` `).map(e=>e.charAt(0)+e.slice(1)).join(`, `):t.toLowerCase().split(`+`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` + `)});(0,t.watch)(()=>i.value,t=>{if(!r.value||e.disabled)return;let n=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);n&&(n.style.transition=`all 250ms ease`,t&&e.highlightEffect!==`none`?n.style.filter=`brightness(1.1)`:n.style.filter=``)});let handleKeyDown=e=>{e.key===`Control`&&(i.value=!0)},handleKeyUp=e=>{e.key===`Control`&&(i.value=!1)},handleHotkeyPress=()=>{if(e.disabled||!r.value)return;let t=r.value.querySelector(`button, a, input[type="button"], [role="button"]`);if(t||(t=r.value.querySelector(`v-list-item, .v-list-item, router-link, .router-link, a, [to]`)),!t&&(r.value.hasAttribute(`to`)||r.value.tagName===`A`||r.value.classList.contains(`v-list-item`))&&(t=r.value),!t){let e=r.value.closest(`v-list-item, .v-list-item, a, [to]`);e&&(t=e)}if(t)if(t.hasAttribute(`to`)){let r=t.getAttribute(`to`);if(r&&window.location.pathname!==r){let e=window.$nuxt?.$router||window.$router;e&&typeof e.push==`function`?e.push(r):window.location.pathname=r}n(`hotkey-triggered`,e.hotkey)}else t.click(),n(`hotkey-triggered`,e.hotkey);else console.log(`No clickable element found for hotkey`,e.hotkey),n(`hotkey-triggered`,e.hotkey)},registerHotkey=()=>{e.disabled||O.addBinding({hotkey:e.hotkey,command:e.command,callback:handleHotkeyPress})},unregisterHotkey=()=>{e.disabled||O.removeBinding(e.hotkey)};return(0,t.watch)(()=>e.disabled,e=>{e?unregisterHotkey():registerHotkey()}),(0,t.onMounted)(()=>{document.addEventListener(`keydown`,handleKeyDown),document.addEventListener(`keyup`,handleKeyUp),registerHotkey()}),(0,t.onBeforeUnmount)(()=>{document.removeEventListener(`keydown`,handleKeyDown),document.removeEventListener(`keyup`,handleKeyUp),unregisterHotkey()}),{wrapperElement:r,isControlKeyPressed:i,formattedHotkey:a}}});_();function _sfc_render$27(e,n,r,i,a,o){return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:(0,t.normalizeClass)([`sk-mousetrap-tooltip-wrapper`,[e.isControlKeyPressed&&!e.disabled&&e.highlightEffect!==`none`?`sk-mousetrap-highlight-${e.highlightEffect}`:``]]),ref:`wrapperElement`},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0),(0,t.createVNode)(t.Transition,{name:`fade`},{default:(0,t.withCtx)(()=>[e.showTooltip&&e.isControlKeyPressed&&!e.disabled?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:(0,t.normalizeClass)([`sk-mousetrap-tooltip`,{"sk-mt-tooltip-top":e.position===`top`,"sk-mt-tooltip-bottom":e.position===`bottom`,"sk-mt-tooltip-left":e.position===`left`,"sk-mt-tooltip-right":e.position===`right`}])},(0,t.toDisplayString)(e.formattedHotkey),3)):(0,t.createCommentVNode)(``,!0)]),_:1})],2)}__name(_sfc_render$27,`_sfc_render`);var ne=g(te,[[`render`,_sfc_render$27],[`__scopeId`,`data-v-5d6fb09c`]]),{setInstance:re,getInstance:M,alertUser:N}=(()=>{let e=null;return{setInstance(t){e=t},getInstance(){return e},alertUser(t){let n=e;if(n){n.addSnack(t);return}console.error(`SnackbarService not found`)}}})(),ie=(0,t.defineComponent)({name:`SnackbarService`,data(){return{snacks:[],show:[]}},mounted(){re(this)},methods:{addSnack(e){this.snacks.push(e),this.show.push(!0)},close(){this.show.pop(),this.show.push(!1)},getColor(e){if(e.status===r.Status.ok)return`success`;if(e.status===r.Status.error)return`error`;if(e.status===r.Status.warning)return`yellow`}}});_();var ae={class:`d-flex align-center justify-space-between w-100`};function _sfc_render$26(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-icon`),c=(0,t.resolveComponent)(`v-btn`),l=(0,t.resolveComponent)(`v-snackbar`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,null,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.snacks,r=>((0,t.openBlock)(),(0,t.createBlock)(l,{key:e.snacks.indexOf(r),modelValue:e.show[e.snacks.indexOf(r)],"onUpdate:modelValue":t=>e.show[e.snacks.indexOf(r)]=t,timeout:r.timeout,location:`bottom right`,color:e.getColor(r)},{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`div`,ae,[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(r.text),1),(0,t.createVNode)(c,{icon:``,variant:`text`,onClick:n[0]||(n[0]=t=>e.close())},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,null,{default:(0,t.withCtx)(()=>n[1]||(n[1]=[(0,t.createTextVNode)(`mdi-close`)])),_:1})]),_:1})])]),_:2},1032,[`modelValue`,`onUpdate:modelValue`,`timeout`,`color`]))),128))])}__name(_sfc_render$26,`_sfc_render`);var oe=g(ie,[[`render`,_sfc_render$26]]),se=(0,t.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`]});_();var ce={key:0,class:`ms-2 text-subtitle-2`,"data-cy":`paginating-toolbar-subtitle`};function _sfc_render$25(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-toolbar-title`),c=(0,t.resolveComponent)(`v-spacer`),l=(0,t.resolveComponent)(`v-icon`),u=(0,t.resolveComponent)(`v-btn`),d=(0,t.resolveComponent)(`v-select`),f=(0,t.resolveComponent)(`v-toolbar`);return(0,t.openBlock)(),(0,t.createBlock)(f,{density:`compact`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,null,{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`span`,null,(0,t.toDisplayString)(e.title),1),e.subtitle?((0,t.openBlock)(),(0,t.createElementBlock)(`span`,ce,(0,t.toDisplayString)(e.subtitle),1)):(0,t.createCommentVNode)(``,!0)]),_:1}),(0,t.createVNode)(c),(0,t.createVNode)(u,{variant:`text`,icon:``,color:`secondary`,disabled:e.page==1,onClick:n[0]||(n[0]=t=>e.$emit(`first`))},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[5]||(n[5]=[(0,t.createTextVNode)(`mdi-page-first`)])),_:1})]),_:1},8,[`disabled`]),(0,t.createVNode)(u,{variant:`text`,icon:``,color:`secondary`,disabled:e.page==1,onClick:n[1]||(n[1]=t=>e.$emit(`prev`))},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[6]||(n[6]=[(0,t.createTextVNode)(`mdi-chevron-left`)])),_:1})]),_:1},8,[`disabled`]),(0,t.createVNode)(d,{"model-value":e.page,items:e.pages,class:`pageSelect`,density:`compact`,"hide-details":``,"return-object":!1,variant:`outlined`,"onUpdate:modelValue":n[2]||(n[2]=t=>e.$emit(`set-page`,t))},{selection:(0,t.withCtx)(({item:e})=>[(0,t.createTextVNode)((0,t.toDisplayString)(e.value),1)]),_:1},8,[`model-value`,`items`]),(0,t.createVNode)(u,{variant:`text`,icon:``,color:`secondary`,disabled:e.page==e.pages.length,onClick:n[3]||(n[3]=t=>e.$emit(`next`))},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[7]||(n[7]=[(0,t.createTextVNode)(`mdi-chevron-right`)])),_:1})]),_:1},8,[`disabled`]),(0,t.createVNode)(u,{variant:`text`,icon:``,color:`secondary`,disabled:e.page==e.pages.length,onClick:n[4]||(n[4]=t=>e.$emit(`last`))},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[8]||(n[8]=[(0,t.createTextVNode)(`mdi-page-last`)])),_:1})]),_:1},8,[`disabled`])]),_:1})}__name(_sfc_render$25,`_sfc_render`);var le=g(se,[[`render`,_sfc_render$25],[`__scopeId`,`data-v-a75fea7e`]]),ue=(0,t.defineComponent)({name:`CardSearch`,emits:{search:e=>typeof e==`string`},data(){return{query:``}},methods:{search(){this.$emit(`search`,this.query)}}});_();var de={class:`card-search`};function _sfc_render$24(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-text-field`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,de,[(0,t.createVNode)(s,{modelValue:e.query,"onUpdate:modelValue":n[0]||(n[0]=t=>e.query=t),label:`Search for cards...`,"append-icon":`mdi-magnify`,"onClick:append":e.search,onKeydown:(0,t.withKeys)(e.search,[`enter`])},null,8,[`modelValue`,`onClick:append`,`onKeydown`])])}__name(_sfc_render$24,`_sfc_render`);var fe=g(ue,[[`render`,_sfc_render$24]]),pe=(0,t.defineComponent)({name:`CardSearchResults`,emits:{"card-selected":e=>typeof e.cardId==`string`&&typeof e.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(e){e&&this.fetchResults(e)}}},methods:{async fetchResults(e){this.loading=!0,this.error=null;try{let t=[];if(this.courseFilter)t=[this.courseFilter],console.log(`Filtering search to course: ${this.courseFilter}`);else{let{CourseLookup:e}=await import(`@vue-skuilder/db`);t=(await e.allCourseWare()).map(e=>e._id).filter(Boolean),console.log(`Searching across all ${t.length} courses`)}let n=[];for(let r of t){let t=await this.dataLayer.getCourseDB(r).searchCards(e);for(let e of t)n.push({...e,courseId:r})}this.cards=n,console.log(`Search completed: found ${n.length} cards across ${t.length} courses`)}catch(e){this.error=`Error fetching search results.`,console.error(`Search error:`,e)}finally{this.loading=!1}},selectCard(e){this.selectedCardId=e._id,this.$emit(`card-selected`,{cardId:e._id,courseId:e.courseId})}}});_();var me={class:`card-search-results`},he={key:0},ge={key:1},_e={key:2};function _sfc_render$23(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-list-item-title`),c=(0,t.resolveComponent)(`v-list-item-subtitle`),l=(0,t.resolveComponent)(`v-list-item`),u=(0,t.resolveComponent)(`v-list`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,me,[e.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,he,`Loading...`)):e.error?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ge,(0,t.toDisplayString)(e.error),1)):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,_e,[(0,t.createVNode)(u,null,{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.cards,n=>((0,t.openBlock)(),(0,t.createBlock)(l,{key:n._id,onClick:t=>e.selectCard(n),class:(0,t.normalizeClass)([{"selected-card":n._id===e.selectedCardId},`cursor-pointer`])},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,null,{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)((0,t.toDisplayString)(n._id),1)]),_:2},1024),(0,t.createVNode)(c,null,{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(`Course: `+(0,t.toDisplayString)(n.courseId),1)]),_:2},1024)]),_:2},1032,[`onClick`,`class`]))),128))]),_:1})]))])}__name(_sfc_render$23,`_sfc_render`);var ve=g(pe,[[`render`,_sfc_render$23],[`__scopeId`,`data-v-285e13bd`]]),ye=(0,t.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(e){e&&this.userDB&&this.fetchHistory()}},userDB:{handler(e){e&&this.cardId&&this.fetchHistory()}}},methods:{async fetchHistory(){this.loading=!0,this.error=null;try{let e=(0,i.getCardHistoryID)(this.courseId,this.cardId),t=await this.userDB.get(e);this.cardHistory=t,this.bestIntervalHumanized=n.default.duration(t.bestInterval,`seconds`).humanize();let r=[...t.records].sort((e,t)=>(0,n.default)(e.timeStamp).valueOf()-(0,n.default)(t.timeStamp).valueOf());this.history=r.map((e,t)=>{let i=(0,n.default)(e.timeStamp),a={...e,formattedTimeStamp:i.format(`YYYY-MM-DD HH:mm:ss`),timeSpentSeconds:Math.round(e.timeSpent/1e3),isCorrect:e.isCorrect,performance:e.performance,priorAttemps:e.priorAttemps,userAnswer:e.userAnswer};if(t>0){let e=(0,n.default)(r[t-1].timeStamp),o=i.diff(e,`seconds`,!0);a.intervalFromPrevious=Math.round(o*100)/100,a.userFriendlyInterval=`${a.intervalFromPrevious} sec (${n.default.duration(o,`seconds`).humanize()})`}return a})}catch(e){this.error=`Error fetching card history.`,console.error(e)}finally{this.loading=!1}}}});_();var be={class:`card-history-viewer`},xe={key:0},Se={key:1},Ce={key:2,class:`error-message`},we={key:3};function _sfc_render$22(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-card-title`),c=(0,t.resolveComponent)(`v-list-item-title`),l=(0,t.resolveComponent)(`v-list-item-subtitle`),u=(0,t.resolveComponent)(`v-list-item-content`),d=(0,t.resolveComponent)(`v-list-item`),f=(0,t.resolveComponent)(`v-card`),p=(0,t.resolveComponent)(`v-data-table`);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,be,[e.userId?((0,t.openBlock)(),(0,t.createElementBlock)(`h3`,xe,`Card History for User: `+(0,t.toDisplayString)(e.userId),1)):(0,t.createCommentVNode)(``,!0),e.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Se,`Loading...`)):e.error?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ce,(0,t.toDisplayString)(e.error),1)):e.cardHistory?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,we,[(0,t.createVNode)(f,{class:`mb-4`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,null,{default:(0,t.withCtx)(()=>n[0]||(n[0]=[(0,t.createTextVNode)(`Summary`)])),_:1}),(0,t.createVNode)(d,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(c,null,{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(`Best Interval: `+(0,t.toDisplayString)(e.cardHistory.bestInterval)+` seconds (`+(0,t.toDisplayString)(e.bestIntervalHumanized)+`)`,1)]),_:1}),(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[1]||(n[1]=[(0,t.createTextVNode)(`The to-date largest interval between successful card reviews.`)])),_:1})]),_:1})]),_:1}),(0,t.createVNode)(d,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(c,null,{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(`Lapses: `+(0,t.toDisplayString)(e.cardHistory.lapses),1)]),_:1}),(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[2]||(n[2]=[(0,t.createTextVNode)(`The number of times that a card has been failed in review.`)])),_:1})]),_:1})]),_:1}),(0,t.createVNode)(d,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(c,null,{default:(0,t.withCtx)(()=>[(0,t.createTextVNode)(`Streak: `+(0,t.toDisplayString)(e.cardHistory.streak),1)]),_:1}),(0,t.createVNode)(l,null,{default:(0,t.withCtx)(()=>n[3]||(n[3]=[(0,t.createTextVNode)(`The number of consecutive successful impressions on this card.`)])),_:1})]),_:1})]),_:1})]),_:1}),(0,t.createVNode)(p,{headers:e.headers,items:e.history,class:`elevation-1`},null,8,[`headers`,`items`])])):(0,t.createCommentVNode)(``,!0)])}__name(_sfc_render$22,`_sfc_render`);var Te=g(ye,[[`render`,_sfc_render$22],[`__scopeId`,`data-v-a4bdfdfb`]]);function useViewable(e,r,i){let a=(0,t.ref)(n.default.utc()),o=(0,t.ref)([]),s={log:(e,...t)=>console.log(`[${i}]: `,e,...t),error:(e,...t)=>console.error(`[${i}]: `,e,...t),warn:(e,...t)=>console.warn(`[${i}]: `,e,...t)},c=(0,t.computed)(()=>Math.abs(n.default.utc().diff(a.value,`milliseconds`))),getURL=(t,n=0)=>{try{if(e.data[n]?.[t])return URL.createObjectURL(e.data[n][t])}catch(e){s.error(`Error creating URL for item:`,t,e)}return``},emitResponse=e=>{r(`emitResponse`,e)};return{startTime:a,hotKeys:o,timeSpent:c,logger:s,getURL,emitResponse}}function useQuestionView(e){let n=(0,t.ref)(0),r=(0,t.ref)(0),i=(0,t.ref)([]),a=(0,t.ref)(3),o=(0,t.ref)(2),s=(0,t.ref)(),submitAnswer=(t,n,a)=>{if(e.logger.log(`submitAnswer called...`),!s.value)throw Error(`Question not initialized`);i.value.push([t,n??``]);let o=s.value.evaluate(t,e.timeSpent.value);e.logger.log(`evaluation of answer ${t}:`,o);let c={...o,priorAttemps:r.value,courseID:``,cardID:``,timeSpent:e.timeSpent.value,timeStamp:e.startTime.value,userAnswer:t};return a?.deferAdvance!==void 0&&(c.deferAdvance=a.deferAdvance),o.isCorrect||r.value++,e.emitResponse(c),c};return{priorSessionViews:n,priorAttempts:r,priorAnswers:i,maxAttemptsPerView:a,maxSessionViews:o,question:s,submitAnswer}}function isQuestionView(e){return typeof e==`object`&&!!e&&`submitAnswer`in e&&`priorAttempts`in e}var Ee=__esmMin((()=>{}));Ee(),E();function isDefineComponent(e){return e.__isFragment!==void 0}var Displayable=class{constructor(e){if(e.length===0)throw Error(`
3
3
  Displayable Constructor was called with no view Data.
4
4
  `);validateData(this.dataShapes(),e)}};_defineProperty(Displayable,`dataShapes`,void 0),_defineProperty(Displayable,`views`,void 0),_defineProperty(Displayable,`seedData`,void 0),_defineProperty(Displayable,`acceptsUserData`,!0);function validateData(e,t){for(let n=0;n<e.length;n++)e[n].fields.forEach((e,i)=>{console.log(`[Displayable] shape[${n}].field[${i}]:\n ${JSON.stringify(e)}`),t[n][e.name]===void 0&&e.type!==r.FieldType.MEDIA_UPLOADS&&console.warn(`[Displayable] missing data`)})}var Question=class extends Displayable{displayedSkill(e,t){console.warn(`Question is running the reference implementation of displayedSkill.
@@ -6,11 +6,11 @@ Displayable Constructor was called with no view Data.
6
6
  Card was displayed at ${e.timeStamp}
7
7
  User spent ${e.timeSpent} milliseconds with the card.
8
8
  `),this.$emit(`emitResponse`,e)}}});_();function _sfc_render$20(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-card`);return e.frameless?((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)(e.view),{ref:`activeView`,key:e.course_id+`-`+e.card_id+`-`+e.sessionOrder,data:e.data,"modify-difficulty":e.user_elo.global.score-e.card_elo,class:`cardView`,onEmitResponse:n[0]||(n[0]=t=>e.processResponse(t)),onRequestReplan:n[1]||(n[1]=t=>e.$emit(`requestReplan`,t)),onReadyToAdvance:n[2]||(n[2]=t=>e.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`])):((0,t.openBlock)(),(0,t.createBlock)(s,{key:1,elevation:`12`},{default:(0,t.withCtx)(()=>[((0,t.openBlock)(),(0,t.createBlock)((0,t.resolveDynamicComponent)(e.view),{ref:`activeView`,key:e.course_id+`-`+e.card_id+`-`+e.sessionOrder,data:e.data,"modify-difficulty":e.user_elo.global.score-e.card_elo,class:`cardView ma-2 pa-2`,onEmitResponse:n[3]||(n[3]=t=>e.processResponse(t)),onRequestReplan:n[4]||(n[4]=t=>e.$emit(`requestReplan`,t)),onReadyToAdvance:n[5]||(n[5]=t=>e.$emit(`readyToAdvance`))},null,40,[`data`,`modify-difficulty`]))]),_:1}))}__name(_sfc_render$20,`_sfc_render`);var P=g(ke,[[`render`,_sfc_render$20],[`__scopeId`,`data-v-2d892b82`]]),Ae=(0,t.defineComponent)({name:`SessionControllerDebug`,props:{sessionController:{type:Object,required:!0}},setup(e){let n=(0,t.ref)(0),r=null;return(0,t.onMounted)(()=>{r=setInterval(()=>{n.value++},500)}),(0,t.onUnmounted)(()=>{r&&clearInterval(r)}),{debugInfo:(0,t.computed)(()=>(n.value,e.sessionController?e.sessionController.getDebugInfo():{reviewQueue:{length:0,dequeueCount:0,items:[]},newQueue:{length:0,dequeueCount:0,items:[]},failedQueue:{length:0,dequeueCount:0,items:[]},hydratedCache:{count:0,failedCacheSize:0,items:[]}}))}}});_();var je={class:`debug-section`},Me={class:`debug-header`},Ne={class:`debug-stats`},Pe={class:`text-caption`},Fe={class:`text-caption ml-2`},Ie={key:0,class:`debug-items`},Le={class:`text-caption`},Re={class:`text-caption text-grey ml-1`},ze={key:0,class:`text-caption text-grey`},Be={key:1,class:`text-caption text-grey`},Ve={class:`debug-section`},He={class:`debug-header`},Ue={class:`debug-stats`},We={class:`text-caption`},Ge={class:`text-caption ml-2`},Ke={key:0,class:`debug-items`},qe={class:`text-caption`},Je={class:`text-caption text-grey ml-1`},Ye={key:0,class:`text-caption text-grey`},Xe={key:1,class:`text-caption text-grey`},Ze={class:`debug-section`},Qe={class:`debug-header`},$e={class:`debug-stats`},et={class:`text-caption`},tt={class:`text-caption ml-2`},nt={key:0,class:`debug-items`},rt={class:`text-caption`},it={class:`text-caption text-grey ml-1`},at={key:0,class:`text-caption text-grey`},ot={key:1,class:`text-caption text-grey`},st={class:`debug-section`},ct={class:`debug-header`},lt={class:`debug-stats`},ut={class:`text-caption`},dt={class:`text-caption ml-2`},ft={key:0,class:`debug-items`},pt={class:`text-caption`},mt={key:0,class:`text-caption text-grey`},ht={key:1,class:`text-caption text-grey`};function _sfc_render$19(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-spacer`),c=(0,t.resolveComponent)(`v-icon`),l=(0,t.resolveComponent)(`v-card-title`),u=(0,t.resolveComponent)(`v-col`),d=(0,t.resolveComponent)(`v-row`),f=(0,t.resolveComponent)(`v-divider`),p=(0,t.resolveComponent)(`v-card-text`),m=(0,t.resolveComponent)(`v-card`);return e.sessionController?((0,t.openBlock)(),(0,t.createBlock)(m,{key:0,class:`session-debug ma-2`,elevation:`2`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(l,{class:`text-caption bg-grey-darken-3`},{default:(0,t.withCtx)(()=>[n[1]||(n[1]=(0,t.createTextVNode)(` Session Controller Debug `)),(0,t.createVNode)(s),(0,t.createVNode)(c,{size:`small`},{default:(0,t.withCtx)(()=>n[0]||(n[0]=[(0,t.createTextVNode)(`mdi-bug`)])),_:1})]),_:1}),(0,t.createVNode)(p,{class:`pa-2`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(d,{dense:``},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,{cols:`12`,md:`4`},{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`div`,je,[(0,t.createElementVNode)(`div`,Me,[(0,t.createVNode)(c,{size:`x-small`,class:`mr-1`},{default:(0,t.withCtx)(()=>n[2]||(n[2]=[(0,t.createTextVNode)(`mdi-calendar-check`)])),_:1}),n[3]||(n[3]=(0,t.createElementVNode)(`strong`,null,`Review Queue`,-1))]),(0,t.createElementVNode)(`div`,Ne,[(0,t.createElementVNode)(`span`,Pe,`Length: `+(0,t.toDisplayString)(e.debugInfo.reviewQueue.length),1),(0,t.createElementVNode)(`span`,Fe,`Dequeued: `+(0,t.toDisplayString)(e.debugInfo.reviewQueue.dequeueCount),1)]),e.debugInfo.reviewQueue.items.length>0?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ie,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.debugInfo.reviewQueue.items.slice(0,5),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:`debug-item`},[(0,t.createElementVNode)(`span`,Le,(0,t.toDisplayString)(n)+`: `+(0,t.toDisplayString)(e.courseID)+`::`+(0,t.toDisplayString)(e.cardID),1),(0,t.createElementVNode)(`span`,Re,`(`+(0,t.toDisplayString)(e.status)+`)`,1)]))),128)),e.debugInfo.reviewQueue.items.length>5?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ze,` ... +`+(0,t.toDisplayString)(e.debugInfo.reviewQueue.items.length-5)+` more `,1)):(0,t.createCommentVNode)(``,!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Be,` (empty) `))])]),_:1}),(0,t.createVNode)(u,{cols:`12`,md:`4`},{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`div`,Ve,[(0,t.createElementVNode)(`div`,He,[(0,t.createVNode)(c,{size:`x-small`,class:`mr-1`},{default:(0,t.withCtx)(()=>n[4]||(n[4]=[(0,t.createTextVNode)(`mdi-file-document-plus`)])),_:1}),n[5]||(n[5]=(0,t.createElementVNode)(`strong`,null,`New Cards Queue`,-1))]),(0,t.createElementVNode)(`div`,Ue,[(0,t.createElementVNode)(`span`,We,`Length: `+(0,t.toDisplayString)(e.debugInfo.newQueue.length),1),(0,t.createElementVNode)(`span`,Ge,`Dequeued: `+(0,t.toDisplayString)(e.debugInfo.newQueue.dequeueCount),1)]),e.debugInfo.newQueue.items.length>0?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ke,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.debugInfo.newQueue.items.slice(0,5),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:`debug-item`},[(0,t.createElementVNode)(`span`,qe,(0,t.toDisplayString)(n)+`: `+(0,t.toDisplayString)(e.courseID)+`::`+(0,t.toDisplayString)(e.cardID),1),(0,t.createElementVNode)(`span`,Je,`(`+(0,t.toDisplayString)(e.status)+`)`,1)]))),128)),e.debugInfo.newQueue.items.length>5?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Ye,` ... +`+(0,t.toDisplayString)(e.debugInfo.newQueue.items.length-5)+` more `,1)):(0,t.createCommentVNode)(``,!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Xe,` (empty) `))])]),_:1}),(0,t.createVNode)(u,{cols:`12`,md:`4`},{default:(0,t.withCtx)(()=>[(0,t.createElementVNode)(`div`,Ze,[(0,t.createElementVNode)(`div`,Qe,[(0,t.createVNode)(c,{size:`x-small`,class:`mr-1`},{default:(0,t.withCtx)(()=>n[6]||(n[6]=[(0,t.createTextVNode)(`mdi-alert-circle`)])),_:1}),n[7]||(n[7]=(0,t.createElementVNode)(`strong`,null,`Failed Cards Queue`,-1))]),(0,t.createElementVNode)(`div`,$e,[(0,t.createElementVNode)(`span`,et,`Length: `+(0,t.toDisplayString)(e.debugInfo.failedQueue.length),1),(0,t.createElementVNode)(`span`,tt,`Dequeued: `+(0,t.toDisplayString)(e.debugInfo.failedQueue.dequeueCount),1)]),e.debugInfo.failedQueue.items.length>0?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,nt,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.debugInfo.failedQueue.items.slice(0,5),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:`debug-item`},[(0,t.createElementVNode)(`span`,rt,(0,t.toDisplayString)(n)+`: `+(0,t.toDisplayString)(e.courseID)+`::`+(0,t.toDisplayString)(e.cardID),1),(0,t.createElementVNode)(`span`,it,`(`+(0,t.toDisplayString)(e.status)+`)`,1)]))),128)),e.debugInfo.failedQueue.items.length>5?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,at,` ... +`+(0,t.toDisplayString)(e.debugInfo.failedQueue.items.length-5)+` more `,1)):(0,t.createCommentVNode)(``,!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ot,` (empty) `))])]),_:1})]),_:1}),(0,t.createVNode)(d,{dense:``},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,{cols:`12`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(f,{class:`my-2`}),(0,t.createElementVNode)(`div`,st,[(0,t.createElementVNode)(`div`,ct,[(0,t.createVNode)(c,{size:`x-small`,class:`mr-1`},{default:(0,t.withCtx)(()=>n[8]||(n[8]=[(0,t.createTextVNode)(`mdi-database`)])),_:1}),n[9]||(n[9]=(0,t.createElementVNode)(`strong`,null,`Hydrated Cards Cache`,-1))]),(0,t.createElementVNode)(`div`,lt,[(0,t.createElementVNode)(`span`,ut,`Cached: `+(0,t.toDisplayString)(e.debugInfo.hydratedCache.count),1),(0,t.createElementVNode)(`span`,dt,`Failed Cache: `+(0,t.toDisplayString)(e.debugInfo.hydratedCache.failedCacheSize),1)]),e.debugInfo.hydratedCache.items.length>0?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ft,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.debugInfo.hydratedCache.items.slice(0,8),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:`debug-item d-inline-block mr-3`},[(0,t.createElementVNode)(`span`,pt,(0,t.toDisplayString)(e.courseID)+`::`+(0,t.toDisplayString)(e.cardID),1)]))),128)),e.debugInfo.hydratedCache.items.length>8?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,mt,` ... +`+(0,t.toDisplayString)(e.debugInfo.hydratedCache.items.length-8)+` more `,1)):(0,t.createCommentVNode)(``,!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,ht,` (empty) `))])]),_:1})]),_:1})]),_:1})]),_:1})):(0,t.createCommentVNode)(``,!0)}__name(_sfc_render$19,`_sfc_render`);var gt=g(Ae,[[`render`,_sfc_render$19],[`__scopeId`,`data-v-1a6ac7a1`]]),_t={};(function main(e,t,n,r){var i=!!(e.Worker&&e.Blob&&e.Promise&&e.OffscreenCanvas&&e.OffscreenCanvasRenderingContext2D&&e.HTMLCanvasElement&&e.HTMLCanvasElement.prototype.transferControlToOffscreen&&e.URL&&e.URL.createObjectURL),a=typeof Path2D==`function`&&typeof DOMMatrix==`function`,o=(function(){if(!e.OffscreenCanvas)return!1;var t=new OffscreenCanvas(1,1),n=t.getContext(`2d`);n.fillRect(0,0,1,1);var r=t.transferToImageBitmap();try{n.createPattern(r,`no-repeat`)}catch{return!1}return!0})();function noop(){}function promise(n){var r=t.exports.Promise,i=r===void 0?e.Promise:r;return typeof i==`function`?new i(n):(n(noop,noop),null)}var s=(function(e,t){return{transform:function(n){if(e)return n;if(t.has(n))return t.get(n);var r=new OffscreenCanvas(n.width,n.height);return r.getContext(`2d`).drawImage(n,0,0),t.set(n,r),r},clear:function(){t.clear()}}})(o,new Map),c=function(){var e=16,frame,cancel,t={},n=0;return typeof requestAnimationFrame==`function`&&typeof cancelAnimationFrame==`function`?(frame=function(r){var i=Math.random();return t[i]=requestAnimationFrame(function onFrame(a){n===a||n+e-1<a?(n=a,delete t[i],r()):t[i]=requestAnimationFrame(onFrame)}),i},cancel=function(e){t[e]&&cancelAnimationFrame(t[e])}):(frame=function(t){return setTimeout(t,e)},cancel=function(e){return clearTimeout(e)}),{frame,cancel}}(),l=(function(){var e,t,r={};function decorate(e){function execute(t,n){e.postMessage({options:t||{},callback:n})}e.init=function initWorker(t){var n=t.transferControlToOffscreen();e.postMessage({canvas:n},[n])},e.fire=function fireWorker(n,i,a){if(t)return execute(n,null),t;var o=Math.random().toString(36).slice(2);return t=promise(function(i){function workerDone(n){n.data.callback===o&&(delete r[o],e.removeEventListener(`message`,workerDone),t=null,s.clear(),a(),i())}e.addEventListener(`message`,workerDone),execute(n,o),r[o]=workerDone.bind(null,{data:{callback:o}})}),t},e.reset=function resetWorker(){for(var t in e.postMessage({reset:!0}),r)r[t](),delete r[t]}}return function(){if(e)return e;if(!n&&i){var t=[`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(`
9
- `);try{e=new Worker(URL.createObjectURL(new Blob([t])))}catch(e){return typeof console.warn==`function`&&console.warn(`🎊 Could not load worker`,e),null}decorate(e)}return e}})(),u={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(e,t){return t?t(e):e}function isOk(e){return e!=null}function prop(e,t,n){return convert(e&&isOk(e[t])?e[t]:u[t],n)}function onlyPositiveInt(e){return e<0?0:Math.floor(e)}function randomInt(e,t){return Math.floor(Math.random()*(t-e))+e}function toDecimal(e){return parseInt(e,16)}function colorsToRgb(e){return e.map(hexToRgb)}function hexToRgb(e){var t=String(e).replace(/[^0-9a-f]/gi,``);return t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),{r:toDecimal(t.substring(0,2)),g:toDecimal(t.substring(2,4)),b:toDecimal(t.substring(4,6))}}function getOrigin(e){var t=prop(e,`origin`,Object);return t.x=prop(t,`x`,Number),t.y=prop(t,`y`,Number),t}function setCanvasWindowSize(e){e.width=document.documentElement.clientWidth,e.height=document.documentElement.clientHeight}function setCanvasRectSize(e){var t=e.getBoundingClientRect();e.width=t.width,e.height=t.height}function getCanvas(e){var t=document.createElement(`canvas`);return t.style.position=`fixed`,t.style.top=`0px`,t.style.left=`0px`,t.style.pointerEvents=`none`,t.style.zIndex=e,t}function ellipse(e,t,n,r,i,a,o,s,c){e.save(),e.translate(t,n),e.rotate(a),e.scale(r,i),e.arc(0,0,1,o,s,c),e.restore()}function randomPhysics(e){var t=e.angle*(Math.PI/180),n=e.spread*(Math.PI/180);return{x:e.x,y:e.y,wobble:Math.random()*10,wobbleSpeed:Math.min(.11,Math.random()*.1+.05),velocity:e.startVelocity*.5+Math.random()*e.startVelocity,angle2D:-t+(.5*n-Math.random()*n),tiltAngle:(Math.random()*.5+.25)*Math.PI,color:e.color,shape:e.shape,tick:0,totalTicks:e.ticks,decay:e.decay,drift:e.drift,random:Math.random()+2,tiltSin:0,tiltCos:0,wobbleX:0,wobbleY:0,gravity:e.gravity*3,ovalScalar:.6,scalar:e.scalar,flat:e.flat}}function updateFetti(e,t){t.x+=Math.cos(t.angle2D)*t.velocity+t.drift,t.y+=Math.sin(t.angle2D)*t.velocity+t.gravity,t.velocity*=t.decay,t.flat?(t.wobble=0,t.wobbleX=t.x+10*t.scalar,t.wobbleY=t.y+10*t.scalar,t.tiltSin=0,t.tiltCos=0,t.random=1):(t.wobble+=t.wobbleSpeed,t.wobbleX=t.x+10*t.scalar*Math.cos(t.wobble),t.wobbleY=t.y+10*t.scalar*Math.sin(t.wobble),t.tiltAngle+=.1,t.tiltSin=Math.sin(t.tiltAngle),t.tiltCos=Math.cos(t.tiltAngle),t.random=Math.random()+2);var n=t.tick++/t.totalTicks,r=t.x+t.random*t.tiltCos,i=t.y+t.random*t.tiltSin,o=t.wobbleX+t.random*t.tiltCos,c=t.wobbleY+t.random*t.tiltSin;if(e.fillStyle=`rgba(`+t.color.r+`, `+t.color.g+`, `+t.color.b+`, `+(1-n)+`)`,e.beginPath(),a&&t.shape.type===`path`&&typeof t.shape.path==`string`&&Array.isArray(t.shape.matrix))e.fill(transformPath2D(t.shape.path,t.shape.matrix,t.x,t.y,Math.abs(o-r)*.1,Math.abs(c-i)*.1,Math.PI/10*t.wobble));else if(t.shape.type===`bitmap`){var l=Math.PI/10*t.wobble,u=Math.abs(o-r)*.1,d=Math.abs(c-i)*.1,f=t.shape.bitmap.width*t.scalar,p=t.shape.bitmap.height*t.scalar,m=new DOMMatrix([Math.cos(l)*u,Math.sin(l)*u,-Math.sin(l)*d,Math.cos(l)*d,t.x,t.y]);m.multiplySelf(new DOMMatrix(t.shape.matrix));var h=e.createPattern(s.transform(t.shape.bitmap),`no-repeat`);h.setTransform(m),e.globalAlpha=1-n,e.fillStyle=h,e.fillRect(t.x-f/2,t.y-p/2,f,p),e.globalAlpha=1}else if(t.shape===`circle`)e.ellipse?e.ellipse(t.x,t.y,Math.abs(o-r)*t.ovalScalar,Math.abs(c-i)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI):ellipse(e,t.x,t.y,Math.abs(o-r)*t.ovalScalar,Math.abs(c-i)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI);else if(t.shape===`star`)for(var g=Math.PI/2*3,_=4*t.scalar,v=8*t.scalar,y=t.x,b=t.y,x=5,S=Math.PI/x;x--;)y=t.x+Math.cos(g)*v,b=t.y+Math.sin(g)*v,e.lineTo(y,b),g+=S,y=t.x+Math.cos(g)*_,b=t.y+Math.sin(g)*_,e.lineTo(y,b),g+=S;else e.moveTo(Math.floor(t.x),Math.floor(t.y)),e.lineTo(Math.floor(t.wobbleX),Math.floor(i)),e.lineTo(Math.floor(o),Math.floor(c)),e.lineTo(Math.floor(r),Math.floor(t.wobbleY));return e.closePath(),e.fill(),t.tick<t.totalTicks}function animate(e,t,i,a,o){var l=t.slice(),u=e.getContext(`2d`),d,f,p=promise(function(t){function onDone(){d=f=null,u.clearRect(0,0,a.width,a.height),s.clear(),o(),t()}function update(){n&&!(a.width===r.width&&a.height===r.height)&&(a.width=e.width=r.width,a.height=e.height=r.height),!a.width&&!a.height&&(i(e),a.width=e.width,a.height=e.height),u.clearRect(0,0,a.width,a.height),l=l.filter(function(e){return updateFetti(u,e)}),l.length?d=c.frame(update):onDone()}d=c.frame(update),f=onDone});return{addFettis:function(e){return l=l.concat(e),p},canvas:e,promise:p,reset:function(){d&&c.cancel(d),f&&f()}}}function confettiCannon(t,n){var r=!t,a=!!prop(n||{},`resize`),o=!1,s=prop(n,`disableForReducedMotion`,Boolean),c=i&&prop(n||{},`useWorker`)?l():null,u=r?setCanvasWindowSize:setCanvasRectSize,d=t&&c?!!t.__confetti_initialized:!1,f=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion)`).matches,p;function fireLocal(e,n,r){for(var i=prop(e,`particleCount`,onlyPositiveInt),a=prop(e,`angle`,Number),o=prop(e,`spread`,Number),s=prop(e,`startVelocity`,Number),c=prop(e,`decay`,Number),l=prop(e,`gravity`,Number),d=prop(e,`drift`,Number),f=prop(e,`colors`,colorsToRgb),m=prop(e,`ticks`,Number),h=prop(e,`shapes`),g=prop(e,`scalar`),_=!!prop(e,`flat`),v=getOrigin(e),y=i,b=[],x=t.width*v.x,S=t.height*v.y;y--;)b.push(randomPhysics({x,y:S,angle:a,spread:o,startVelocity:s,color:f[y%f.length],shape:h[randomInt(0,h.length)],ticks:m,decay:c,gravity:l,drift:d,scalar:g,flat:_}));return p?p.addFettis(b):(p=animate(t,b,u,n,r),p.promise)}function fire(n){var i=s||prop(n,`disableForReducedMotion`,Boolean),l=prop(n,`zIndex`,Number);if(i&&f)return promise(function(e){e()});r&&p?t=p.canvas:r&&!t&&(t=getCanvas(l),document.body.appendChild(t)),a&&!d&&u(t);var m={width:t.width,height:t.height};c&&!d&&c.init(t),d=!0,c&&(t.__confetti_initialized=!0);function onResize(){if(c){var e={getBoundingClientRect:function(){if(!r)return t.getBoundingClientRect()}};u(e),c.postMessage({resize:{width:e.width,height:e.height}});return}m.width=m.height=null}function done(){p=null,a&&(o=!1,e.removeEventListener(`resize`,onResize)),r&&t&&(document.body.contains(t)&&document.body.removeChild(t),t=null,d=!1)}return a&&!o&&(o=!0,e.addEventListener(`resize`,onResize,!1)),c?c.fire(n,m,done):fireLocal(n,m,done)}return fire.reset=function(){c&&c.reset(),p&&p.reset()},fire}var d;function getDefaultFire(){return d||(d=confettiCannon(null,{useWorker:!0,resize:!0})),d}function transformPath2D(e,t,n,r,i,a,o){var s=new Path2D(e),c=new Path2D;c.addPath(s,new DOMMatrix(t));var l=new Path2D;return l.addPath(c,new DOMMatrix([Math.cos(o)*i,Math.sin(o)*i,-Math.sin(o)*a,Math.cos(o)*a,n,r])),l}function shapeFromPath(e){if(!a)throw Error(`path confetti are not supported in this browser`);var t,n;typeof e==`string`?t=e:(t=e.path,n=e.matrix);var r=new Path2D(t),i=document.createElement(`canvas`).getContext(`2d`);if(!n){for(var o=1e3,s=o,c=o,l=0,u=0,d,f,p=0;p<o;p+=2)for(var m=0;m<o;m+=2)i.isPointInPath(r,p,m,`nonzero`)&&(s=Math.min(s,p),c=Math.min(c,m),l=Math.max(l,p),u=Math.max(u,m));d=l-s,f=u-c;var h=10,g=Math.min(h/d,h/f);n=[g,0,0,g,-Math.round(d/2+s)*g,-Math.round(f/2+c)*g]}return{type:`path`,path:t,matrix:n}}function shapeFromText(e){var t,n=1,r=`#000000`,i=`"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "EmojiOne Color", "Android Emoji", "Twemoji Mozilla", "system emoji", sans-serif`;typeof e==`string`?t=e:(t=e.text,n=`scalar`in e?e.scalar:n,i=`fontFamily`in e?e.fontFamily:i,r=`color`in e?e.color:r);var a=10*n,o=``+a+`px `+i,s=new OffscreenCanvas(a,a),c=s.getContext(`2d`);c.font=o;var l=c.measureText(t),u=Math.ceil(l.actualBoundingBoxRight+l.actualBoundingBoxLeft),d=Math.ceil(l.actualBoundingBoxAscent+l.actualBoundingBoxDescent),f=2,p=l.actualBoundingBoxLeft+f,m=l.actualBoundingBoxAscent+f;u+=f+f,d+=f+f,s=new OffscreenCanvas(u,d),c=s.getContext(`2d`),c.font=o,c.fillStyle=r,c.fillText(t,p,m);var h=1/n;return{type:`bitmap`,bitmap:s.transferToImageBitmap(),matrix:[h,0,0,h,-u*h/2,-d*h/2]}}t.exports=function(){return getDefaultFire().apply(this,arguments)},t.exports.reset=function(){getDefaultFire().reset()},t.exports.create=confettiCannon,t.exports.shapeFromPath=shapeFromPath,t.exports.shapeFromText=shapeFromText})((function(){return typeof window<`u`?window:typeof self<`u`?self:this||{}})(),_t,!1);var vt=_t.exports;_t.exports.create;var yt=(0,t.defineComponent)({name:`StudySession`,ref:{},components:{CardViewer:P,StudySessionTimer:Oe,SkMouseTrap:j,HeatMap:x,SessionControllerDebug:gt},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`)},methods:{async handleReadyToAdvance(){let e=this.deferredNextCardAction;if(!e){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: ${e}`),this.deferredNextCardAction=null,this.loadCard(await this.sessionController.nextCard(e))},handleReplanRequest(e){if(this.sessionController){let t=e?.label,n=t?` [${t}]`:``;console.log(`[StudySession] Replan requested by card view${n}, deferring until after response processing`),this.replanPending=!0,this.replanOptions=e??null}},user_elo(e){let t=this.userCourseRegDoc.courses.find(t=>t.courseID===e);return t?(0,r.toCourseElo)(t.elo):(0,r.toCourseElo)(void 0)},handleClassroomMessage(){return e=>(N({text:this.user?.getUsername()||`[Unknown user]`,status:r.Status.ok}),console.log(`[StudySession] There was a change in the classroom DB:`),console.log(`[StudySession] change: ${e}`),console.log(`[StudySession] Stringified change: ${JSON.stringify(e)}`),{})},incrementSessionClock(){let e=60*this.sessionTimeLimit-this.timeRemaining;this.sessionController.addTime(Math.min(e,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 e=[];try{console.log(`[StudySession] starting study session w/ sources: ${JSON.stringify(this.contentSources)}`),console.log(`[StudySession] Beginning preparation process`),this.sessionContentSources=(0,t.markRaw)((await Promise.all(this.contentSources.map(async e=>{try{return await(0,i.getStudySource)(e,this.user)}catch(t){return console.error(`Failed to load study source: ${e.type}/${e.id}`,t),null}}))).filter(e=>e!==null)),this.timeRemaining=this.sessionTimeLimit*60,e=await Promise.all(this.contentSources.filter(e=>e.type===`classroom`).map(async e=>await this.dataLayer.getClassroomDB(e.id,`student`))),e.forEach(e=>{});let n=this.sessionConfig?.defaultBatchLimit===void 0?void 0:{defaultBatchLimit:this.sessionConfig.defaultBatchLimit};if(this.sessionController=(0,t.markRaw)(new i.SessionController(this.sessionContentSources,60*this.sessionTimeLimit,this.dataLayer,this.getViewComponent,void 0,n)),this.sessionController.sessionRecord=this.sessionRecord,this.sessionConfig?.initHints){for(let e of this.sessionContentSources)e.setEphemeralHints?.(this.sessionConfig.initHints);console.log(`[StudySession] Applied init hints to content sources`)}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(e){console.error(`[StudySession] Error during session preparation:`,e),this.$emit(`session-error`,{message:`Failed to prepare study session`,error:e})}try{this.contentSources.filter(e=>e.type===`course`).forEach(async e=>this.courseNames[e.id]=(await this.dataLayer.getCoursesDB().getCourseConfig(e.id)).name),console.log(`[StudySession] Session created:
9
+ `);try{e=new Worker(URL.createObjectURL(new Blob([t])))}catch(e){return typeof console.warn==`function`&&console.warn(`🎊 Could not load worker`,e),null}decorate(e)}return e}})(),u={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(e,t){return t?t(e):e}function isOk(e){return e!=null}function prop(e,t,n){return convert(e&&isOk(e[t])?e[t]:u[t],n)}function onlyPositiveInt(e){return e<0?0:Math.floor(e)}function randomInt(e,t){return Math.floor(Math.random()*(t-e))+e}function toDecimal(e){return parseInt(e,16)}function colorsToRgb(e){return e.map(hexToRgb)}function hexToRgb(e){var t=String(e).replace(/[^0-9a-f]/gi,``);return t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),{r:toDecimal(t.substring(0,2)),g:toDecimal(t.substring(2,4)),b:toDecimal(t.substring(4,6))}}function getOrigin(e){var t=prop(e,`origin`,Object);return t.x=prop(t,`x`,Number),t.y=prop(t,`y`,Number),t}function setCanvasWindowSize(e){e.width=document.documentElement.clientWidth,e.height=document.documentElement.clientHeight}function setCanvasRectSize(e){var t=e.getBoundingClientRect();e.width=t.width,e.height=t.height}function getCanvas(e){var t=document.createElement(`canvas`);return t.style.position=`fixed`,t.style.top=`0px`,t.style.left=`0px`,t.style.pointerEvents=`none`,t.style.zIndex=e,t}function ellipse(e,t,n,r,i,a,o,s,c){e.save(),e.translate(t,n),e.rotate(a),e.scale(r,i),e.arc(0,0,1,o,s,c),e.restore()}function randomPhysics(e){var t=e.angle*(Math.PI/180),n=e.spread*(Math.PI/180);return{x:e.x,y:e.y,wobble:Math.random()*10,wobbleSpeed:Math.min(.11,Math.random()*.1+.05),velocity:e.startVelocity*.5+Math.random()*e.startVelocity,angle2D:-t+(.5*n-Math.random()*n),tiltAngle:(Math.random()*.5+.25)*Math.PI,color:e.color,shape:e.shape,tick:0,totalTicks:e.ticks,decay:e.decay,drift:e.drift,random:Math.random()+2,tiltSin:0,tiltCos:0,wobbleX:0,wobbleY:0,gravity:e.gravity*3,ovalScalar:.6,scalar:e.scalar,flat:e.flat}}function updateFetti(e,t){t.x+=Math.cos(t.angle2D)*t.velocity+t.drift,t.y+=Math.sin(t.angle2D)*t.velocity+t.gravity,t.velocity*=t.decay,t.flat?(t.wobble=0,t.wobbleX=t.x+10*t.scalar,t.wobbleY=t.y+10*t.scalar,t.tiltSin=0,t.tiltCos=0,t.random=1):(t.wobble+=t.wobbleSpeed,t.wobbleX=t.x+10*t.scalar*Math.cos(t.wobble),t.wobbleY=t.y+10*t.scalar*Math.sin(t.wobble),t.tiltAngle+=.1,t.tiltSin=Math.sin(t.tiltAngle),t.tiltCos=Math.cos(t.tiltAngle),t.random=Math.random()+2);var n=t.tick++/t.totalTicks,r=t.x+t.random*t.tiltCos,i=t.y+t.random*t.tiltSin,o=t.wobbleX+t.random*t.tiltCos,c=t.wobbleY+t.random*t.tiltSin;if(e.fillStyle=`rgba(`+t.color.r+`, `+t.color.g+`, `+t.color.b+`, `+(1-n)+`)`,e.beginPath(),a&&t.shape.type===`path`&&typeof t.shape.path==`string`&&Array.isArray(t.shape.matrix))e.fill(transformPath2D(t.shape.path,t.shape.matrix,t.x,t.y,Math.abs(o-r)*.1,Math.abs(c-i)*.1,Math.PI/10*t.wobble));else if(t.shape.type===`bitmap`){var l=Math.PI/10*t.wobble,u=Math.abs(o-r)*.1,d=Math.abs(c-i)*.1,f=t.shape.bitmap.width*t.scalar,p=t.shape.bitmap.height*t.scalar,m=new DOMMatrix([Math.cos(l)*u,Math.sin(l)*u,-Math.sin(l)*d,Math.cos(l)*d,t.x,t.y]);m.multiplySelf(new DOMMatrix(t.shape.matrix));var h=e.createPattern(s.transform(t.shape.bitmap),`no-repeat`);h.setTransform(m),e.globalAlpha=1-n,e.fillStyle=h,e.fillRect(t.x-f/2,t.y-p/2,f,p),e.globalAlpha=1}else if(t.shape===`circle`)e.ellipse?e.ellipse(t.x,t.y,Math.abs(o-r)*t.ovalScalar,Math.abs(c-i)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI):ellipse(e,t.x,t.y,Math.abs(o-r)*t.ovalScalar,Math.abs(c-i)*t.ovalScalar,Math.PI/10*t.wobble,0,2*Math.PI);else if(t.shape===`star`)for(var g=Math.PI/2*3,_=4*t.scalar,v=8*t.scalar,y=t.x,b=t.y,x=5,S=Math.PI/x;x--;)y=t.x+Math.cos(g)*v,b=t.y+Math.sin(g)*v,e.lineTo(y,b),g+=S,y=t.x+Math.cos(g)*_,b=t.y+Math.sin(g)*_,e.lineTo(y,b),g+=S;else e.moveTo(Math.floor(t.x),Math.floor(t.y)),e.lineTo(Math.floor(t.wobbleX),Math.floor(i)),e.lineTo(Math.floor(o),Math.floor(c)),e.lineTo(Math.floor(r),Math.floor(t.wobbleY));return e.closePath(),e.fill(),t.tick<t.totalTicks}function animate(e,t,i,a,o){var l=t.slice(),u=e.getContext(`2d`),d,f,p=promise(function(t){function onDone(){d=f=null,u.clearRect(0,0,a.width,a.height),s.clear(),o(),t()}function update(){n&&!(a.width===r.width&&a.height===r.height)&&(a.width=e.width=r.width,a.height=e.height=r.height),!a.width&&!a.height&&(i(e),a.width=e.width,a.height=e.height),u.clearRect(0,0,a.width,a.height),l=l.filter(function(e){return updateFetti(u,e)}),l.length?d=c.frame(update):onDone()}d=c.frame(update),f=onDone});return{addFettis:function(e){return l=l.concat(e),p},canvas:e,promise:p,reset:function(){d&&c.cancel(d),f&&f()}}}function confettiCannon(t,n){var r=!t,a=!!prop(n||{},`resize`),o=!1,s=prop(n,`disableForReducedMotion`,Boolean),c=i&&prop(n||{},`useWorker`)?l():null,u=r?setCanvasWindowSize:setCanvasRectSize,d=t&&c?!!t.__confetti_initialized:!1,f=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion)`).matches,p;function fireLocal(e,n,r){for(var i=prop(e,`particleCount`,onlyPositiveInt),a=prop(e,`angle`,Number),o=prop(e,`spread`,Number),s=prop(e,`startVelocity`,Number),c=prop(e,`decay`,Number),l=prop(e,`gravity`,Number),d=prop(e,`drift`,Number),f=prop(e,`colors`,colorsToRgb),m=prop(e,`ticks`,Number),h=prop(e,`shapes`),g=prop(e,`scalar`),_=!!prop(e,`flat`),v=getOrigin(e),y=i,b=[],x=t.width*v.x,S=t.height*v.y;y--;)b.push(randomPhysics({x,y:S,angle:a,spread:o,startVelocity:s,color:f[y%f.length],shape:h[randomInt(0,h.length)],ticks:m,decay:c,gravity:l,drift:d,scalar:g,flat:_}));return p?p.addFettis(b):(p=animate(t,b,u,n,r),p.promise)}function fire(n){var i=s||prop(n,`disableForReducedMotion`,Boolean),l=prop(n,`zIndex`,Number);if(i&&f)return promise(function(e){e()});r&&p?t=p.canvas:r&&!t&&(t=getCanvas(l),document.body.appendChild(t)),a&&!d&&u(t);var m={width:t.width,height:t.height};c&&!d&&c.init(t),d=!0,c&&(t.__confetti_initialized=!0);function onResize(){if(c){var e={getBoundingClientRect:function(){if(!r)return t.getBoundingClientRect()}};u(e),c.postMessage({resize:{width:e.width,height:e.height}});return}m.width=m.height=null}function done(){p=null,a&&(o=!1,e.removeEventListener(`resize`,onResize)),r&&t&&(document.body.contains(t)&&document.body.removeChild(t),t=null,d=!1)}return a&&!o&&(o=!0,e.addEventListener(`resize`,onResize,!1)),c?c.fire(n,m,done):fireLocal(n,m,done)}return fire.reset=function(){c&&c.reset(),p&&p.reset()},fire}var d;function getDefaultFire(){return d||(d=confettiCannon(null,{useWorker:!0,resize:!0})),d}function transformPath2D(e,t,n,r,i,a,o){var s=new Path2D(e),c=new Path2D;c.addPath(s,new DOMMatrix(t));var l=new Path2D;return l.addPath(c,new DOMMatrix([Math.cos(o)*i,Math.sin(o)*i,-Math.sin(o)*a,Math.cos(o)*a,n,r])),l}function shapeFromPath(e){if(!a)throw Error(`path confetti are not supported in this browser`);var t,n;typeof e==`string`?t=e:(t=e.path,n=e.matrix);var r=new Path2D(t),i=document.createElement(`canvas`).getContext(`2d`);if(!n){for(var o=1e3,s=o,c=o,l=0,u=0,d,f,p=0;p<o;p+=2)for(var m=0;m<o;m+=2)i.isPointInPath(r,p,m,`nonzero`)&&(s=Math.min(s,p),c=Math.min(c,m),l=Math.max(l,p),u=Math.max(u,m));d=l-s,f=u-c;var h=10,g=Math.min(h/d,h/f);n=[g,0,0,g,-Math.round(d/2+s)*g,-Math.round(f/2+c)*g]}return{type:`path`,path:t,matrix:n}}function shapeFromText(e){var t,n=1,r=`#000000`,i=`"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "EmojiOne Color", "Android Emoji", "Twemoji Mozilla", "system emoji", sans-serif`;typeof e==`string`?t=e:(t=e.text,n=`scalar`in e?e.scalar:n,i=`fontFamily`in e?e.fontFamily:i,r=`color`in e?e.color:r);var a=10*n,o=``+a+`px `+i,s=new OffscreenCanvas(a,a),c=s.getContext(`2d`);c.font=o;var l=c.measureText(t),u=Math.ceil(l.actualBoundingBoxRight+l.actualBoundingBoxLeft),d=Math.ceil(l.actualBoundingBoxAscent+l.actualBoundingBoxDescent),f=2,p=l.actualBoundingBoxLeft+f,m=l.actualBoundingBoxAscent+f;u+=f+f,d+=f+f,s=new OffscreenCanvas(u,d),c=s.getContext(`2d`),c.font=o,c.fillStyle=r,c.fillText(t,p,m);var h=1/n;return{type:`bitmap`,bitmap:s.transferToImageBitmap(),matrix:[h,0,0,h,-u*h/2,-d*h/2]}}t.exports=function(){return getDefaultFire().apply(this,arguments)},t.exports.reset=function(){getDefaultFire().reset()},t.exports.create=confettiCannon,t.exports.shapeFromPath=shapeFromPath,t.exports.shapeFromText=shapeFromText})((function(){return typeof window<`u`?window:typeof self<`u`?self:this||{}})(),_t,!1);var vt=_t.exports;_t.exports.create;var yt=(0,t.defineComponent)({name:`StudySession`,ref:{},components:{CardViewer:P,StudySessionTimer:Oe,SkMouseTrap:j,HeatMap:x,SessionControllerDebug:gt},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(e,t,n){return console.error(`[StudySession] Card render error (${n}), skipping card "${this.cardID}":`,e),this.sessionController&&this.sessionController.nextCard().then(e=>this.loadCard(e)),!1},methods:{async handleReadyToAdvance(){let e=this.deferredNextCardAction;if(!e){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: ${e}`),this.deferredNextCardAction=null,this.loadCard(await this.sessionController.nextCard(e))},handleReplanRequest(e){if(this.sessionController){let t=e?.label,n=t?` [${t}]`:``;console.log(`[StudySession] Replan requested by card view${n}, deferring until after response processing`),this.replanPending=!0,this.replanOptions=e??null}},user_elo(e){let t=this.userCourseRegDoc.courses.find(t=>t.courseID===e);return t?(0,r.toCourseElo)(t.elo):(0,r.toCourseElo)(void 0)},handleClassroomMessage(){return e=>(N({text:this.user?.getUsername()||`[Unknown user]`,status:r.Status.ok}),console.log(`[StudySession] There was a change in the classroom DB:`),console.log(`[StudySession] change: ${e}`),console.log(`[StudySession] Stringified change: ${JSON.stringify(e)}`),{})},incrementSessionClock(){let e=60*this.sessionTimeLimit-this.timeRemaining;this.sessionController.addTime(Math.min(e,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 e=[];try{console.log(`[StudySession] starting study session w/ sources: ${JSON.stringify(this.contentSources)}`),console.log(`[StudySession] Beginning preparation process`),this.sessionContentSources=(0,t.markRaw)((await Promise.all(this.contentSources.map(async e=>{try{return await(0,i.getStudySource)(e,this.user)}catch(t){return console.error(`Failed to load study source: ${e.type}/${e.id}`,t),null}}))).filter(e=>e!==null)),this.timeRemaining=this.sessionTimeLimit*60,e=await Promise.all(this.contentSources.filter(e=>e.type===`classroom`).map(async e=>await this.dataLayer.getClassroomDB(e.id,`student`))),e.forEach(e=>{});let n={};if(this.sessionConfig?.defaultBatchLimit!==void 0&&(n.defaultBatchLimit=this.sessionConfig.defaultBatchLimit),this.sessionConfig?.initialReviewCap!==void 0&&(n.initialReviewCap=this.sessionConfig.initialReviewCap),this.sessionController=(0,t.markRaw)(new i.SessionController(this.sessionContentSources,60*this.sessionTimeLimit,this.dataLayer,this.getViewComponent,void 0,n)),this.sessionController.sessionRecord=this.sessionRecord,this.sessionConfig?.initHints){for(let e of this.sessionContentSources)e.setEphemeralHints?.(this.sessionConfig.initHints);console.log(`[StudySession] Applied init hints to content sources`)}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(e){console.error(`[StudySession] Error during session preparation:`,e),this.$emit(`session-error`,{message:`Failed to prepare study session`,error:e})}try{this.contentSources.filter(e=>e.type===`course`).forEach(async e=>this.courseNames[e.id]=(await this.dataLayer.getCoursesDB().getCourseConfig(e.id)).name),console.log(`[StudySession] Session created:
10
10
  ${this.sessionController?.toString()||`Session controller not initialized`}
11
11
  User courses: ${this.contentSources.filter(e=>e.type===`course`).map(e=>e.id).toString()}
12
12
  User classrooms: ${e.map(e=>e._id).toString()||`No classrooms`}
13
- `)}catch(e){console.error(`[StudySession] Error during final session setup:`,e)}if(this.sessionController)try{this.$emit(`session-started`),this.loadCard(await this.sessionController.nextCard())}catch(e){console.error(`[StudySession] Error loading next card:`,e),this.$emit(`session-error`,{message:`Failed to load study card`,error:e})}else console.error(`[StudySession] Cannot load card: session controller not initialized`),this.$emit(`session-error`,{message:`Study session initialization failed`})},countCardViews(e,t){return this.sessionRecord.filter(n=>n.card.course_id===e&&n.card.card_id===t).length},async processResponse(e){this.$emit(`card-response`,e),this.timerIsActive=!0,e.cardID=this.cardID,e.courseID=this.courseID,this.currentCard.records.push(e),console.log(`[StudySession] StudySession.processResponse is running...`);let t=this.logCardRecord(e).catch(e=>{throw console.error(`[StudySession] putCardRecord failed:`,e),e}),n=1,r=1;if(isQuestionView(this.$refs.cardViewer?.$refs.activeView)){let e=this.$refs.cardViewer.$refs.activeView;n=e.maxAttemptsPerView,r=e.maxSessionViews}let i=this.countCardViews(this.courseID,this.cardID),a=await this.sessionController.submitResponse(e,t,this.userCourseRegDoc,this.currentCard,this.courseID,this.cardID,n,r,i);try{this.handleUIFeedback(a)}catch(e){console.error(`[StudySession] Error handling UI feedback: ${e}.\n\nResult: ${JSON.stringify(a)}`)}if(this.replanPending){let e=this.replanOptions,t=e?.label,n=t?` [${t}]`:``;console.log(`[StudySession] Firing deferred replan (post-submitResponse)${n}`),this.replanPending=!1,this.replanOptions=null,this.sessionController.requestReplan(e??void 0),this.$emit(`replan-requested`)}a.deferred?(console.log(`[StudySession] Deferred advance — stashing action: ${a.nextCardAction}`),this.deferredNextCardAction=a.nextCardAction):a.shouldLoadNextCard&&this.loadCard(await this.sessionController.nextCard(a.nextCardAction)),a.shouldClearFeedbackShadow&&this.clearFeedbackShadow()},handleUIFeedback(e){if(e.isCorrect){if(!this.frameless)try{this.$refs.shadowWrapper&&e.performanceScore!==void 0&&(this.$refs.shadowWrapper.setAttribute(`style`,`--r: ${255*(1-e.performanceScore)}; --g:255`),this.$refs.shadowWrapper.classList.add(`correct`))}catch(e){console.warn(`[StudySession] Error setting shadowWrapper style: ${e}`)}this.sessionConfig.likesConfetti&&vt({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(e){console.warn(`[StudySession] Error setting shadowWrapper style: ${e}`)}},clearFeedbackShadow(){this.frameless||setTimeout(()=>{try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.remove(`correct`,`incorrect`)}catch(e){console.warn(`[StudySession] Error clearing shadowWrapper style: ${e}`)}},1250)},async logCardRecord(e){console.log(`[StudySession] About to call user.putCardRecord...`);let t=await this.user.putCardRecord(e);return console.log(`[StudySession] user.putCardRecord completed`),t},async loadCard(e){if(this.loading){console.warn(`Attempted to load card while loading another...`);return}if(console.log(`[StudySession] loading: ${JSON.stringify(e)}`),e===null){this.sessionFinished=!0,this.$emit(`session-finished`,this.sessionRecord);return}this.cardType=e.item.status,this.loading=!0,this.cardCount++,this.data=e.data,this.view=(0,t.markRaw)(e.view),this.cardID=e.item.cardID,this.courseID=e.item.courseID,this.card_elo=e.item.elo||1e3,this.sessionRecord.push({card:{course_id:e.item.courseID,card_id:e.item.cardID,card_elo:this.card_elo,tags:e.tags??[]},item:e.item,records:[]}),this.$emit(`card-loaded`,{courseID:e.item.courseID,cardID:e.item.cardID,cardCount:this.cardCount}),this.loading=!1}}});_();var bt={key:0,class:`StudySession`},xt={key:2},St={key:3},Ct={class:`text-h4`},wt={key:0},Tt={key:4,ref:`shadowWrapper`,class:`card-transition-container`},Et={key:0};function _sfc_render$18(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-spacer`),c=(0,t.resolveComponent)(`v-progress-circular`),l=(0,t.resolveComponent)(`v-row`),u=(0,t.resolveComponent)(`session-controller-debug`),d=(0,t.resolveComponent)(`heat-map`),f=(0,t.resolveComponent)(`card-viewer`),p=(0,t.resolveComponent)(`StudySessionTimer`),m=(0,t.resolveComponent)(`v-col`),h=(0,t.resolveComponent)(`SkMouseTrap`);return e.sessionPrepared?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,bt,[e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createBlock)(l,{key:0,align:`center`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s),e.loading?((0,t.openBlock)(),(0,t.createBlock)(c,{key:0,color:`primary`,indeterminate:``,size:`32`,width:`4`})):(0,t.createCommentVNode)(``,!0)]),_:1})),e.debugMode?((0,t.openBlock)(),(0,t.createBlock)(u,{key:1,"session-controller":e.sessionController},null,8,[`session-controller`])):(0,t.createCommentVNode)(``,!0),e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createElementBlock)(`br`,xt)),e.sessionFinished?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,St,[(0,t.renderSlot)(e.$slots,`session-finished`,{sessionRecord:e.sessionRecord,report:e.sessionController?.report},()=>[(0,t.createElementVNode)(`div`,Ct,[n[1]||(n[1]=(0,t.createElementVNode)(`p`,null,`Study session finished! Great job!`,-1)),e.sessionController?((0,t.openBlock)(),(0,t.createElementBlock)(`p`,wt,(0,t.toDisplayString)(e.sessionController.report),1)):(0,t.createCommentVNode)(``,!0),(0,t.createVNode)(d,{"activity-records-getter":()=>e.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Tt,[(0,t.createVNode)(t.Transition,{name:e.transitionName},{default:(0,t.withCtx)(()=>[e.view?((0,t.openBlock)(),(0,t.createBlock)(f,{ref:`cardViewer`,key:e.cardID,class:(0,t.normalizeClass)(e.loading?`muted`:``),view:e.view,data:e.data,card_id:e.cardID,course_id:e.courseID,"session-order":e.cardCount,user_elo:e.user_elo(e.courseID),card_elo:e.card_elo,frameless:e.frameless,onEmitResponse:n[0]||(n[0]=t=>e.processResponse(t)),onRequestReplan:e.handleReplanRequest,onReadyToAdvance:e.handleReadyToAdvance},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`,`user_elo`,`card_elo`,`frameless`,`onRequestReplan`,`onReadyToAdvance`])):(0,t.createCommentVNode)(``,!0)]),_:1},8,[`name`])],512)),e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:5},[n[2]||(n[2]=(0,t.createElementVNode)(`br`,null,null,-1)),e.sessionController?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Et,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.sessionController.failedCount,e=>((0,t.openBlock)(),(0,t.createElementBlock)(`span`,{key:e,class:`text-h5`},`•`))),128))])):(0,t.createCommentVNode)(``,!0)],64)),e.hideFooter?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createBlock)(l,{key:6,align:`center`,class:`footer-controls pa-5`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(m,{cols:`auto`,class:`d-flex flex-grow-0 mr-auto`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(p,{"time-remaining":e.timeRemaining,"session-time-limit":e.sessionTimeLimit,onAddTime:e.incrementSessionClock},null,8,[`time-remaining`,`session-time-limit`,`onAddTime`])]),_:1}),(0,t.createVNode)(s),(0,t.createVNode)(m,{cols:`auto`,class:`footer-right`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(h)]),_:1})]),_:1}))])):(0,t.createCommentVNode)(``,!0)}__name(_sfc_render$18,`_sfc_render`);var Dt=g(yt,[[`render`,_sfc_render$18],[`__scopeId`,`data-v-fc2f14b9`]]),Ot,setPinia,getPinia,kt,F=__esmMin((()=>{Ot=null,setPinia=e=>{Ot=e},getPinia=()=>Ot,kt={install(e,t){let n=t?.pinia;n&&setPinia(n)}}})),useCardPreviewModeStore,At=__esmMin((()=>{F(),useCardPreviewModeStore=()=>{let e=getPinia();return e&&(0,a.setActivePinia)(e),(0,a.defineStore)(`previewMode`,{state:()=>({previewMode:!1}),actions:{setPreviewMode(e){this.previewMode=e}},getters:{isPreviewMode(){return this.previewMode}}})()}})),I,L=__esmMin((()=>{At(),Ee(),I=(0,t.defineComponent)({name:`UserInput`,data(){return{answer:``,previewModeStore:null}},mounted(){this.previewModeStore=useCardPreviewModeStore()},computed:{autofocus(){return!this.previewModeStore?.previewMode},autoFocus(){return this.autofocus}},methods:{submitAnswer(e){return this.submit(e)},submit(e){return this.getQuestionViewAncestor().submitAnswer(e,this.$options.name??`UserInput`)},getQuestionViewAncestor(){let e=this.$parent,t=0;for(;e&&!isQuestionView(e);){let n=e.$parent;if(!n){let e=`
13
+ `)}catch(e){console.error(`[StudySession] Error during final session setup:`,e)}if(this.sessionController)try{this.$emit(`session-started`),this.loadCard(await this.sessionController.nextCard())}catch(e){console.error(`[StudySession] Error loading next card:`,e),this.$emit(`session-error`,{message:`Failed to load study card`,error:e})}else console.error(`[StudySession] Cannot load card: session controller not initialized`),this.$emit(`session-error`,{message:`Study session initialization failed`})},countCardViews(e,t){return this.sessionRecord.filter(n=>n.card.course_id===e&&n.card.card_id===t).length},async processResponse(e){this.$emit(`card-response`,e),this.timerIsActive=!0,e.cardID=this.cardID,e.courseID=this.courseID,this.currentCard.records.push(e),console.log(`[StudySession] StudySession.processResponse is running...`);let t=this.logCardRecord(e).catch(e=>{throw console.error(`[StudySession] putCardRecord failed:`,e),e}),n=1,r=1;if(isQuestionView(this.$refs.cardViewer?.$refs.activeView)){let e=this.$refs.cardViewer.$refs.activeView;n=e.maxAttemptsPerView,r=e.maxSessionViews}let i=this.countCardViews(this.courseID,this.cardID),a=await this.sessionController.submitResponse(e,t,this.userCourseRegDoc,this.currentCard,this.courseID,this.cardID,n,r,i);try{this.handleUIFeedback(a)}catch(e){console.error(`[StudySession] Error handling UI feedback: ${e}.\n\nResult: ${JSON.stringify(a)}`)}if(this.replanPending){let e=this.replanOptions,t=e?.label,n=t?` [${t}]`:``;console.log(`[StudySession] Firing deferred replan (post-submitResponse)${n}`),this.replanPending=!1,this.replanOptions=null,this.sessionController.requestReplan(e??void 0),this.$emit(`replan-requested`)}a.deferred?(console.log(`[StudySession] Deferred advance — stashing action: ${a.nextCardAction}`),this.deferredNextCardAction=a.nextCardAction):a.shouldLoadNextCard&&this.loadCard(await this.sessionController.nextCard(a.nextCardAction)),a.shouldClearFeedbackShadow&&this.clearFeedbackShadow()},handleUIFeedback(e){if(e.isCorrect){if(!this.frameless)try{this.$refs.shadowWrapper&&e.performanceScore!==void 0&&(this.$refs.shadowWrapper.setAttribute(`style`,`--r: ${255*(1-e.performanceScore)}; --g:255`),this.$refs.shadowWrapper.classList.add(`correct`))}catch(e){console.warn(`[StudySession] Error setting shadowWrapper style: ${e}`)}this.sessionConfig.likesConfetti&&vt({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(e){console.warn(`[StudySession] Error setting shadowWrapper style: ${e}`)}},clearFeedbackShadow(){this.frameless||setTimeout(()=>{try{this.$refs.shadowWrapper&&this.$refs.shadowWrapper.classList.remove(`correct`,`incorrect`)}catch(e){console.warn(`[StudySession] Error clearing shadowWrapper style: ${e}`)}},1250)},async logCardRecord(e){console.log(`[StudySession] About to call user.putCardRecord...`);let t=await this.user.putCardRecord(e);return console.log(`[StudySession] user.putCardRecord completed`),t},async loadCard(e){if(this.loading){console.warn(`Attempted to load card while loading another...`);return}if(console.log(`[StudySession] loading: ${JSON.stringify(e)}`),e===null){this.sessionFinished=!0,this.$emit(`session-finished`,this.sessionRecord);return}this.cardType=e.item.status,this.loading=!0,this.cardCount++,this.data=e.data,this.view=(0,t.markRaw)(e.view),this.cardID=e.item.cardID,this.courseID=e.item.courseID,this.card_elo=e.item.elo||1e3,this.sessionRecord.push({card:{course_id:e.item.courseID,card_id:e.item.cardID,card_elo:this.card_elo,tags:e.tags??[]},item:e.item,records:[]}),this.$emit(`card-loaded`,{courseID:e.item.courseID,cardID:e.item.cardID,cardCount:this.cardCount}),this.loading=!1}}});_();var bt={key:0,class:`StudySession`},xt={key:2},St={key:3},Ct={class:`text-h4`},wt={key:0},Tt={key:4,ref:`shadowWrapper`,class:`card-transition-container`},Et={key:0};function _sfc_render$18(e,n,r,i,a,o){let s=(0,t.resolveComponent)(`v-spacer`),c=(0,t.resolveComponent)(`v-progress-circular`),l=(0,t.resolveComponent)(`v-row`),u=(0,t.resolveComponent)(`session-controller-debug`),d=(0,t.resolveComponent)(`heat-map`),f=(0,t.resolveComponent)(`card-viewer`),p=(0,t.resolveComponent)(`StudySessionTimer`),m=(0,t.resolveComponent)(`v-col`),h=(0,t.resolveComponent)(`SkMouseTrap`);return e.sessionPrepared?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,bt,[e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createBlock)(l,{key:0,align:`center`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s),e.loading?((0,t.openBlock)(),(0,t.createBlock)(c,{key:0,color:`primary`,indeterminate:``,size:`32`,width:`4`})):(0,t.createCommentVNode)(``,!0)]),_:1})),e.debugMode?((0,t.openBlock)(),(0,t.createBlock)(u,{key:1,"session-controller":e.sessionController},null,8,[`session-controller`])):(0,t.createCommentVNode)(``,!0),e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createElementBlock)(`br`,xt)),e.sessionFinished?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,St,[(0,t.renderSlot)(e.$slots,`session-finished`,{sessionRecord:e.sessionRecord,report:e.sessionController?.report},()=>[(0,t.createElementVNode)(`div`,Ct,[n[1]||(n[1]=(0,t.createElementVNode)(`p`,null,`Study session finished! Great job!`,-1)),e.sessionController?((0,t.openBlock)(),(0,t.createElementBlock)(`p`,wt,(0,t.toDisplayString)(e.sessionController.report),1)):(0,t.createCommentVNode)(``,!0),(0,t.createVNode)(d,{"activity-records-getter":()=>e.user.getActivityRecords()},null,8,[`activity-records-getter`])])],!0)])):((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Tt,[(0,t.createVNode)(t.Transition,{name:e.transitionName},{default:(0,t.withCtx)(()=>[e.view?((0,t.openBlock)(),(0,t.createBlock)(f,{ref:`cardViewer`,key:e.cardID,class:(0,t.normalizeClass)(e.loading?`muted`:``),view:e.view,data:e.data,card_id:e.cardID,course_id:e.courseID,"session-order":e.cardCount,user_elo:e.user_elo(e.courseID),card_elo:e.card_elo,frameless:e.frameless,onEmitResponse:n[0]||(n[0]=t=>e.processResponse(t)),onRequestReplan:e.handleReplanRequest,onReadyToAdvance:e.handleReadyToAdvance},null,8,[`class`,`view`,`data`,`card_id`,`course_id`,`session-order`,`user_elo`,`card_elo`,`frameless`,`onRequestReplan`,`onReadyToAdvance`])):(0,t.createCommentVNode)(``,!0)]),_:1},8,[`name`])],512)),e.frameless?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:5},[n[2]||(n[2]=(0,t.createElementVNode)(`br`,null,null,-1)),e.sessionController?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,Et,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.sessionController.failedCount,e=>((0,t.openBlock)(),(0,t.createElementBlock)(`span`,{key:e,class:`text-h5`},`•`))),128))])):(0,t.createCommentVNode)(``,!0)],64)),e.hideFooter?(0,t.createCommentVNode)(``,!0):((0,t.openBlock)(),(0,t.createBlock)(l,{key:6,align:`center`,class:`footer-controls pa-5`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(m,{cols:`auto`,class:`d-flex flex-grow-0 mr-auto`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(p,{"time-remaining":e.timeRemaining,"session-time-limit":e.sessionTimeLimit,onAddTime:e.incrementSessionClock},null,8,[`time-remaining`,`session-time-limit`,`onAddTime`])]),_:1}),(0,t.createVNode)(s),(0,t.createVNode)(m,{cols:`auto`,class:`footer-right`},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(h)]),_:1})]),_:1}))])):(0,t.createCommentVNode)(``,!0)}__name(_sfc_render$18,`_sfc_render`);var Dt=g(yt,[[`render`,_sfc_render$18],[`__scopeId`,`data-v-bc445530`]]),Ot,setPinia,getPinia,kt,F=__esmMin((()=>{Ot=null,setPinia=e=>{Ot=e},getPinia=()=>Ot,kt={install(e,t){let n=t?.pinia;n&&setPinia(n)}}})),useCardPreviewModeStore,At=__esmMin((()=>{F(),useCardPreviewModeStore=()=>{let e=getPinia();return e&&(0,a.setActivePinia)(e),(0,a.defineStore)(`previewMode`,{state:()=>({previewMode:!1}),actions:{setPreviewMode(e){this.previewMode=e}},getters:{isPreviewMode(){return this.previewMode}}})()}})),I,L=__esmMin((()=>{At(),Ee(),I=(0,t.defineComponent)({name:`UserInput`,data(){return{answer:``,previewModeStore:null}},mounted(){this.previewModeStore=useCardPreviewModeStore()},computed:{autofocus(){return!this.previewModeStore?.previewMode},autoFocus(){return this.autofocus}},methods:{submitAnswer(e){return this.submit(e)},submit(e){return this.getQuestionViewAncestor().submitAnswer(e,this.$options.name??`UserInput`)},getQuestionViewAncestor(){let e=this.$parent,t=0;for(;e&&!isQuestionView(e);){let n=e.$parent;if(!n){let e=`
14
14
  UserInput.submit() has failed.
15
15
  The input element has no QuestionView ancestor element.`;throw(0,r.log)(e),Error(e)}if(e=n,t++,t>100){let e=`
16
16
  UserInput.submit() has failed.