@vue-skuilder/common-ui 0.2.21 → 0.2.22

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.
@@ -986,6 +986,7 @@ async function resolveLoginIdentifier(e, t) {
986
986
  } catch {}
987
987
  return {
988
988
  ok: !1,
989
+ status: n.status,
989
990
  error: e || `HTTP ${n.status}: ${n.statusText}`
990
991
  };
991
992
  }
@@ -1917,6 +1918,9 @@ var Ut = M({
1917
1918
  async created() {
1918
1919
  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");
1919
1920
  },
1921
+ beforeUnmount() {
1922
+ this.sessionController && !this.sessionFinished && this.sessionController.endSession("abandoned"), this.intervalHandler && clearInterval(this.intervalHandler);
1923
+ },
1920
1924
  errorCaptured(e, t, n) {
1921
1925
  return console.error(`[StudySession] Card render error (${n}), skipping card "${this.cardID}":`, e), this.sessionController && this.sessionController.nextCard().then((e) => this.loadCard(e)), !1;
1922
1926
  },
@@ -1963,7 +1967,9 @@ var Ut = M({
1963
1967
  }
1964
1968
  }))).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) => {});
1965
1969
  let t = {};
1966
- this.sessionConfig?.defaultBatchLimit !== void 0 && (t.defaultBatchLimit = this.sessionConfig.defaultBatchLimit), this.sessionConfig?.outcomeObservers?.length && (t.outcomeObservers = this.sessionConfig.outcomeObservers), this.sessionController = N(new ve(this.sessionContentSources, 60 * this.sessionTimeLimit, this.dataLayer, this.getViewComponent, void 0, t)), this.sessionController.sessionRecord = this.sessionRecord, this.sessionConfig?.initHints && (this.sessionController.setSessionHints(this.sessionConfig.initHints), console.log("[StudySession] Applied init hints as session-durable hints")), await this.sessionController.prepareSession(), this.intervalHandler = setInterval(this.tick, 1e3), this.sessionPrepared = !0, console.log("[StudySession] Session preparation complete, emitting session-prepared event"), this.$emit("session-prepared"), console.log("[StudySession] Event emission completed");
1970
+ this.sessionConfig?.defaultBatchLimit !== void 0 && (t.defaultBatchLimit = this.sessionConfig.defaultBatchLimit), this.sessionConfig?.outcomeObservers?.length && (t.outcomeObservers = this.sessionConfig.outcomeObservers);
1971
+ let n = this.contentSources.find((e) => e.type === "course")?.id;
1972
+ n && (t.courseId = n), this.sessionConfig?.sessionStateSnapshot && (t.stateSnapshotProvider = this.sessionConfig.sessionStateSnapshot), this.sessionController = N(new ve(this.sessionContentSources, 60 * this.sessionTimeLimit, this.dataLayer, this.getViewComponent, void 0, t)), this.sessionController.sessionRecord = this.sessionRecord, this.sessionConfig?.initHints && (this.sessionController.setSessionHints(this.sessionConfig.initHints), console.log("[StudySession] Applied init hints as session-durable hints")), await this.sessionController.prepareSession(), this.intervalHandler = setInterval(this.tick, 1e3), this.sessionPrepared = !0, console.log("[StudySession] Session preparation complete, emitting session-prepared event"), this.$emit("session-prepared"), console.log("[StudySession] Event emission completed");
1967
1973
  } catch (e) {
1968
1974
  console.error("[StudySession] Error during session preparation:", e), this.$emit("session-error", {
1969
1975
  message: "Failed to prepare study session",
@@ -1993,7 +1999,7 @@ var Ut = M({
1993
1999
  return this.sessionRecord.filter((n) => n.card.course_id === e && n.card.card_id === t).length;
1994
2000
  },
1995
2001
  async processResponse(e) {
1996
- 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...");
2002
+ this.$emit("card-response", e), this.timerIsActive = !0, e.cardID = this.cardID, e.courseID = this.courseID, e.sessionId = this.sessionController?.sessionId, this.currentCard.records.push(e), console.log("[StudySession] StudySession.processResponse is running...");
1997
2003
  let t = this.logCardRecord(e).catch((e) => {
1998
2004
  throw console.error("[StudySession] putCardRecord failed:", e), e;
1999
2005
  }), n = 1, r = 1;
@@ -2185,7 +2191,7 @@ function _sfc_render$15(e, t, n, r, i, a) {
2185
2191
  ])) : D("", !0);
2186
2192
  }
2187
2193
  t(_sfc_render$15, "_sfc_render");
2188
- var Zt = /* @__PURE__ */ r(Ut, [["render", _sfc_render$15], ["__scopeId", "data-v-d6d88dad"]]), Qt = M({
2194
+ var Zt = /* @__PURE__ */ r(Ut, [["render", _sfc_render$15], ["__scopeId", "data-v-c765534b"]]), Qt = M({
2189
2195
  name: "MultipleChoiceOption",
2190
2196
  components: { MarkdownRenderer: re(() => import("./MarkdownRenderer-kStoDRNE.mjs").then((e) => e.n)) },
2191
2197
  props: {
@@ -2890,7 +2896,7 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2890
2896
  }, 8, ["modelValue"])], 64);
2891
2897
  };
2892
2898
  }
2893
- }), [["__scopeId", "data-v-9a38a213"]]), fn = { class: "d-flex flex-column align-start" }, pn = { class: "mb-2" }, mn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2899
+ }), [["__scopeId", "data-v-9a38a213"]]), fn = { class: "d-flex flex-column align-start" }, pn = { class: "mb-2" }, mn = "Username or password was incorrect.", hn = "Login is temporarily unavailable. Please try again in a moment.", gn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2894
2900
  __name: "UserLogin",
2895
2901
  props: { redirectTo: { default: "/study" } },
2896
2902
  emits: [
@@ -2899,12 +2905,12 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2899
2905
  "forgotPassword"
2900
2906
  ],
2901
2907
  setup(e, { emit: t }) {
2902
- let n = e, r = t, i = we(), a = Ce(), o = useAuthStore(), s = useConfigStore(), c = R(""), l = R(""), u = R(!1), d = R(!1), f = R(!1), p = R(7e3), m = R(void 0), h = T(() => a.name === "login"), g = T(() => ({
2908
+ let n = e, r = t, i = we(), a = Ce(), o = useAuthStore(), s = useConfigStore(), c = R(""), l = R(""), u = R(!1), d = R(!1), f = R(!1), p = R(7e3), m = R("Username or password was incorrect."), h = R(void 0), g = T(() => a.name === "login"), _ = T(() => ({
2903
2909
  color: f.value ? "error" : "success",
2904
2910
  text: f.value ? "Try again" : "Log In"
2905
- })), initBadLogin = () => {
2906
- f.value = !0, Z({
2907
- text: "Username or password was incorrect.",
2911
+ })), initBadLogin = (e = mn) => {
2912
+ m.value = e, f.value = !0, Z({
2913
+ text: e,
2908
2914
  status: J.error,
2909
2915
  timeout: p.value
2910
2916
  }), setTimeout(() => {
@@ -2913,17 +2919,17 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2913
2919
  }, login = async () => {
2914
2920
  d.value = !0, Y("Starting login attempt"), Y(`Login attempt for identifier: ${c.value}`);
2915
2921
  try {
2916
- Y("Attempting to get User instance"), m.value = await getCurrentUser(), Y("Got User instance, attempting login");
2922
+ Y("Attempting to get User instance"), h.value = await getCurrentUser(), Y("Got User instance, attempting login");
2917
2923
  let e = c.value;
2918
2924
  if (c.value.includes("@")) {
2919
2925
  let t = await resolveLoginIdentifier(c.value, l.value);
2920
2926
  if (!t.ok || !t.username) {
2921
- Y("Email identifier did not resolve (bad credentials)"), initBadLogin(), d.value = !1;
2927
+ t.status === 401 ? (Y("Email identifier did not resolve: invalid credentials"), initBadLogin()) : (Y(`Email login unavailable (resolver error: ${t.error ?? "network"})`), initBadLogin(hn)), d.value = !1;
2922
2928
  return;
2923
2929
  }
2924
2930
  e = t.username;
2925
2931
  }
2926
- await m.value.login(e, l.value), Y("Login successful"), Y("Initializing user config"), s.init(), Y("User config initialized"), Y("Setting authentication state"), o.loginAndRegistration.loggedIn = !0, Y(`Authentication state set, redirecting to: ${n.redirectTo}`), r("loginSuccess", n.redirectTo), i.push(n.redirectTo), Y("Login and redirect complete");
2932
+ await h.value.login(e, l.value), Y("Login successful"), Y("Initializing user config"), s.init(), Y("User config initialized"), Y("Setting authentication state"), o.loginAndRegistration.loggedIn = !0, Y(`Authentication state set, redirecting to: ${n.redirectTo}`), r("loginSuccess", n.redirectTo), i.push(n.redirectTo), Y("Login and redirect complete");
2927
2933
  } catch (e) {
2928
2934
  Y("Login attempt failed"), Y(`Login error details: ${JSON.stringify(e)}`), console.log(`login error: ${JSON.stringify(e)}`), Y("Initiating bad login feedback"), initBadLogin();
2929
2935
  }
@@ -2931,19 +2937,19 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2931
2937
  }, toggle = () => {
2932
2938
  Y("Toggling registration / login forms."), r("toggle");
2933
2939
  }, handleForgotPassword = () => {
2934
- Y("Forgot password clicked"), h.value ? i.push("/request-reset") : r("forgotPassword");
2940
+ Y("Forgot password clicked"), g.value ? i.push("/request-reset") : r("forgotPassword");
2935
2941
  };
2936
2942
  return (e, t) => {
2937
- let n = V("v-card-title"), r = V("v-text-field"), i = V("v-btn"), a = V("v-snackbar"), o = V("v-icon"), s = V("router-link"), m = V("v-form"), _ = V("v-card-text"), v = V("v-card");
2938
- return L(), E(v, null, {
2939
- default: W(() => [h.value ? D("", !0) : (L(), E(n, {
2943
+ let n = V("v-card-title"), r = V("v-text-field"), i = V("v-btn"), a = V("v-snackbar"), o = V("v-icon"), s = V("router-link"), h = V("v-form"), v = V("v-card-text"), y = V("v-card");
2944
+ return L(), E(y, null, {
2945
+ default: W(() => [g.value ? D("", !0) : (L(), E(n, {
2940
2946
  key: 0,
2941
2947
  class: "text-h5 bg-grey-lighten-2"
2942
2948
  }, {
2943
2949
  default: W(() => t[5] || (t[5] = [A("Log In")])),
2944
2950
  _: 1
2945
- })), j(_, null, {
2946
- default: W(() => [j(m, {
2951
+ })), j(v, null, {
2952
+ default: W(() => [j(h, {
2947
2953
  onsubmit: "return false;",
2948
2954
  onSubmit: K(login, ["prevent"])
2949
2955
  }, {
@@ -2980,7 +2986,7 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2980
2986
  location: "bottom right",
2981
2987
  timeout: p.value
2982
2988
  }, {
2983
- default: W(() => [t[7] || (t[7] = A(" Username or password was incorrect. ")), j(i, {
2989
+ default: W(() => [A(H(m.value) + " ", 1), j(i, {
2984
2990
  color: "pink",
2985
2991
  variant: "text",
2986
2992
  onClick: t[3] || (t[3] = (e) => f.value = !1)
@@ -2994,19 +3000,19 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
2994
3000
  class: "mr-2",
2995
3001
  type: "submit",
2996
3002
  loading: d.value,
2997
- color: g.value.color
3003
+ color: _.value.color
2998
3004
  }, {
2999
3005
  default: W(() => [j(o, { start: "" }, {
3000
- default: W(() => t[8] || (t[8] = [A("mdi-lock-open")])),
3006
+ default: W(() => t[7] || (t[7] = [A("mdi-lock-open")])),
3001
3007
  _: 1
3002
- }), t[9] || (t[9] = A(" Log In "))]),
3008
+ }), t[8] || (t[8] = A(" Log In "))]),
3003
3009
  _: 1
3004
- }, 8, ["loading", "color"]), h.value ? (L(), E(s, {
3010
+ }, 8, ["loading", "color"]), g.value ? (L(), E(s, {
3005
3011
  key: 0,
3006
3012
  to: "signup"
3007
3013
  }, {
3008
3014
  default: W(() => [j(i, { variant: "text" }, {
3009
- default: W(() => t[10] || (t[10] = [A("Create New Account")])),
3015
+ default: W(() => t[9] || (t[9] = [A("Create New Account")])),
3010
3016
  _: 1
3011
3017
  })]),
3012
3018
  _: 1
@@ -3015,7 +3021,7 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
3015
3021
  variant: "text",
3016
3022
  onClick: toggle
3017
3023
  }, {
3018
- default: W(() => t[11] || (t[11] = [A("Create New Account")])),
3024
+ default: W(() => t[10] || (t[10] = [A("Create New Account")])),
3019
3025
  _: 1
3020
3026
  }))]), B(e.$slots, "forgot-password", {}, () => [k("a", {
3021
3027
  href: "#",
@@ -3031,7 +3037,7 @@ var dn = /* @__PURE__ */ r(/* @__PURE__ */ M({
3031
3037
  });
3032
3038
  };
3033
3039
  }
3034
- }), [["__scopeId", "data-v-f374a5e9"]]);
3040
+ }), [["__scopeId", "data-v-764d1a76"]]);
3035
3041
  //#endregion
3036
3042
  //#region src/utils/passwordValidation.ts
3037
3043
  function validatePassword(e) {
@@ -3042,7 +3048,7 @@ function isPasswordValid(e) {
3042
3048
  }
3043
3049
  //#endregion
3044
3050
  //#region src/components/auth/UserRegistration.vue?vue&type=script&lang.ts
3045
- var hn = M({
3051
+ var _n = M({
3046
3052
  name: "UserRegistration",
3047
3053
  props: { onSignupSuccess: {
3048
3054
  type: Function,
@@ -3300,7 +3306,7 @@ function _sfc_render$9(e, t, n, r, i, a) {
3300
3306
  });
3301
3307
  }
3302
3308
  t(_sfc_render$9, "_sfc_render");
3303
- var gn = /* @__PURE__ */ r(hn, [["render", _sfc_render$9]]), _n = M({
3309
+ var vn = /* @__PURE__ */ r(_n, [["render", _sfc_render$9]]), yn = M({
3304
3310
  name: "RequestPasswordReset",
3305
3311
  emits: ["cancel", "success"],
3306
3312
  data() {
@@ -3336,7 +3342,7 @@ var gn = /* @__PURE__ */ r(hn, [["render", _sfc_render$9]]), _n = M({
3336
3342
  }
3337
3343
  }
3338
3344
  }
3339
- }), vn = {
3345
+ }), bn = {
3340
3346
  key: 1,
3341
3347
  class: "text-center"
3342
3348
  };
@@ -3349,7 +3355,7 @@ function _sfc_render$8(e, t, n, r, i, a) {
3349
3355
  _: 1
3350
3356
  }),
3351
3357
  j(d, { class: "pa-6" }, {
3352
- default: W(() => [e.requestSent ? (L(), O("div", vn, [
3358
+ default: W(() => [e.requestSent ? (L(), O("div", bn, [
3353
3359
  j(c, {
3354
3360
  color: "success",
3355
3361
  size: "64",
@@ -3423,7 +3429,7 @@ function _sfc_render$8(e, t, n, r, i, a) {
3423
3429
  });
3424
3430
  }
3425
3431
  t(_sfc_render$8, "_sfc_render");
3426
- var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn = { key: "login-buttons" }, Sn = { key: "user-chip" }, Cn = /* @__PURE__ */ r(/* @__PURE__ */ M({
3432
+ var xn = /* @__PURE__ */ r(yn, [["render", _sfc_render$8]]), Sn = { key: 0 }, Cn = { key: "login-buttons" }, wn = { key: "user-chip" }, Tn = /* @__PURE__ */ r(/* @__PURE__ */ M({
3427
3433
  __name: "UserLoginAndRegistrationContainer",
3428
3434
  props: {
3429
3435
  showLoginButton: { type: Boolean },
@@ -3473,11 +3479,11 @@ var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn
3473
3479
  };
3474
3480
  return (e, t) => {
3475
3481
  let n = V("v-btn"), r = V("v-dialog");
3476
- return c.value && s.value ? (L(), O("div", bn, [j(w, {
3482
+ return c.value && s.value ? (L(), O("div", Sn, [j(w, {
3477
3483
  name: "component-fade",
3478
3484
  mode: "out-in"
3479
3485
  }, {
3480
- default: W(() => [l.value ? (L(), O("div", xn, [
3486
+ default: W(() => [l.value ? (L(), O("div", Cn, [
3481
3487
  u.value.showLoginRegistration ? (L(), E(r, {
3482
3488
  key: 0,
3483
3489
  modelValue: d.value,
@@ -3492,7 +3498,7 @@ var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn
3492
3498
  default: W(() => t[3] || (t[3] = [A("Sign Up")])),
3493
3499
  _: 2
3494
3500
  }, 1040)]),
3495
- default: W(() => [j(gn, {
3501
+ default: W(() => [j(vn, {
3496
3502
  onToggle: toggle,
3497
3503
  onSignupSuccess: handleSignupSuccess,
3498
3504
  "on-signup-success": handleSignupSuccess
@@ -3511,7 +3517,7 @@ var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn
3511
3517
  default: W(() => t[4] || (t[4] = [A("Log In")])),
3512
3518
  _: 2
3513
3519
  }, 1040)]),
3514
- default: W(() => [j(mn, {
3520
+ default: W(() => [j(gn, {
3515
3521
  onToggle: toggle,
3516
3522
  onForgotPassword: openResetDialog
3517
3523
  })]),
@@ -3522,18 +3528,18 @@ var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn
3522
3528
  "onUpdate:modelValue": t[2] || (t[2] = (e) => p.value = e),
3523
3529
  width: "500px"
3524
3530
  }, {
3525
- default: W(() => [j(yn, {
3531
+ default: W(() => [j(xn, {
3526
3532
  onCancel: closeResetDialog,
3527
3533
  onSuccess: closeResetDialog
3528
3534
  })]),
3529
3535
  _: 1
3530
3536
  }, 8, ["modelValue"])
3531
- ])) : (L(), O("div", Sn, [j(dn)]))]),
3537
+ ])) : (L(), O("div", wn, [j(dn)]))]),
3532
3538
  _: 1
3533
3539
  })])) : D("", !0);
3534
3540
  };
3535
3541
  }
3536
- }), [["__scopeId", "data-v-5a55bdf0"]]), wn = M({
3542
+ }), [["__scopeId", "data-v-5a55bdf0"]]), En = M({
3537
3543
  name: "VerifyEmail",
3538
3544
  emits: ["verified", "error"],
3539
3545
  props: { token: {
@@ -3581,16 +3587,16 @@ var yn = /* @__PURE__ */ r(_n, [["render", _sfc_render$8]]), bn = { key: 0 }, xn
3581
3587
  return typeof window > "u" ? null : new URLSearchParams(window.location.search).get("token");
3582
3588
  }
3583
3589
  }
3584
- }), Tn = {
3590
+ }), Dn = {
3585
3591
  key: 0,
3586
3592
  class: "text-center"
3587
- }, En = {
3593
+ }, On = {
3588
3594
  key: 1,
3589
3595
  class: "text-center"
3590
- }, Dn = { key: 0 }, On = {
3596
+ }, kn = { key: 0 }, An = {
3591
3597
  key: 2,
3592
3598
  class: "text-center"
3593
- }, kn = {
3599
+ }, jn = {
3594
3600
  key: 3,
3595
3601
  class: "text-center"
3596
3602
  };
@@ -3616,12 +3622,12 @@ function _sfc_render$7(e, t, n, r, i, a) {
3616
3622
  _: 1
3617
3623
  }),
3618
3624
  j(l, { class: "pa-6" }, {
3619
- default: W(() => [e.isVerifying ? (L(), O("div", Tn, [j(s, {
3625
+ default: W(() => [e.isVerifying ? (L(), O("div", Dn, [j(s, {
3620
3626
  indeterminate: "",
3621
3627
  color: "primary",
3622
3628
  size: "64",
3623
3629
  class: "mb-4"
3624
- }), t[3] || (t[3] = k("p", null, "Verifying your email...", -1))])) : e.verificationStatus === "success" ? (L(), O("div", En, [
3630
+ }), t[3] || (t[3] = k("p", null, "Verifying your email...", -1))])) : e.verificationStatus === "success" ? (L(), O("div", On, [
3625
3631
  j(c, {
3626
3632
  color: "success",
3627
3633
  size: "64",
@@ -3632,8 +3638,8 @@ function _sfc_render$7(e, t, n, r, i, a) {
3632
3638
  }),
3633
3639
  t[5] || (t[5] = k("h3", { class: "mb-2" }, "Email Verified!", -1)),
3634
3640
  t[6] || (t[6] = k("p", null, "Your account has been successfully verified.", -1)),
3635
- e.username ? (L(), O("p", Dn, "Welcome, " + H(e.username) + "!", 1)) : D("", !0)
3636
- ])) : e.verificationStatus === "error" ? (L(), O("div", On, [
3641
+ e.username ? (L(), O("p", kn, "Welcome, " + H(e.username) + "!", 1)) : D("", !0)
3642
+ ])) : e.verificationStatus === "error" ? (L(), O("div", An, [
3637
3643
  j(c, {
3638
3644
  color: "error",
3639
3645
  size: "64",
@@ -3644,7 +3650,7 @@ function _sfc_render$7(e, t, n, r, i, a) {
3644
3650
  }),
3645
3651
  t[8] || (t[8] = k("h3", { class: "mb-2" }, "Verification Failed", -1)),
3646
3652
  k("p", null, H(e.errorMessage), 1)
3647
- ])) : (L(), O("div", kn, [
3653
+ ])) : (L(), O("div", jn, [
3648
3654
  j(c, {
3649
3655
  color: "warning",
3650
3656
  size: "64",
@@ -3690,7 +3696,7 @@ function _sfc_render$7(e, t, n, r, i, a) {
3690
3696
  });
3691
3697
  }
3692
3698
  t(_sfc_render$7, "_sfc_render");
3693
- var An = /* @__PURE__ */ r(wn, [["render", _sfc_render$7]]), jn = M({
3699
+ var Mn = /* @__PURE__ */ r(En, [["render", _sfc_render$7]]), Nn = M({
3694
3700
  name: "ResetPassword",
3695
3701
  emits: ["complete", "error"],
3696
3702
  props: { token: {
@@ -3748,7 +3754,7 @@ var An = /* @__PURE__ */ r(wn, [["render", _sfc_render$7]]), jn = M({
3748
3754
  return typeof window > "u" ? null : new URLSearchParams(window.location.search).get("token");
3749
3755
  }
3750
3756
  }
3751
- }), Mn = {
3757
+ }), Pn = {
3752
3758
  key: 1,
3753
3759
  class: "text-center"
3754
3760
  };
@@ -3774,7 +3780,7 @@ function _sfc_render$6(e, t, n, r, i, a) {
3774
3780
  _: 1
3775
3781
  }),
3776
3782
  j(d, { class: "pa-6" }, {
3777
- default: W(() => [e.isComplete ? (L(), O("div", Mn, [
3783
+ default: W(() => [e.isComplete ? (L(), O("div", Pn, [
3778
3784
  j(c, {
3779
3785
  color: "success",
3780
3786
  size: "64",
@@ -3868,7 +3874,7 @@ function _sfc_render$6(e, t, n, r, i, a) {
3868
3874
  });
3869
3875
  }
3870
3876
  t(_sfc_render$6, "_sfc_render");
3871
- var Nn = /* @__PURE__ */ r(jn, [["render", _sfc_render$6]]), Pn = M({
3877
+ var Fn = /* @__PURE__ */ r(Nn, [["render", _sfc_render$6]]), In = M({
3872
3878
  name: "SkTagsInput",
3873
3879
  components: { VueTagsInput: Te },
3874
3880
  props: {
@@ -3975,13 +3981,13 @@ var Nn = /* @__PURE__ */ r(jn, [["render", _sfc_render$6]]), Pn = M({
3975
3981
  this.loading = !1;
3976
3982
  }
3977
3983
  }
3978
- }), Fn = { "data-cy": "tags-input" }, In = { class: "tag-name" }, Ln = {
3984
+ }), Ln = { "data-cy": "tags-input" }, Rn = { class: "tag-name" }, zn = {
3979
3985
  key: 0,
3980
3986
  class: "tag-snippet"
3981
3987
  };
3982
3988
  function _sfc_render$5(e, t, n, r, i, a) {
3983
3989
  let o = V("vue-tags-input"), s = V("v-btn");
3984
- return L(), O("div", Fn, [j(o, {
3990
+ return L(), O("div", Ln, [j(o, {
3985
3991
  modelValue: e.tag,
3986
3992
  "onUpdate:modelValue": t[0] || (t[0] = (t) => e.tag = t),
3987
3993
  tags: e.tags,
@@ -3990,7 +3996,7 @@ function _sfc_render$5(e, t, n, r, i, a) {
3990
3996
  "add-on-key": e.separators,
3991
3997
  onTagsChanged: e.tagsChanged
3992
3998
  }, {
3993
- "autocomplete-item": W((e) => [k("div", { class: F(["autocomplete-item", { "is-active": e.selected }]) }, [k("span", In, H(e.item.text), 1), e.item.data && e.item.data.snippet ? (L(), O("span", Ln, " - " + H(e.item.data.snippet), 1)) : D("", !0)], 2)]),
3999
+ "autocomplete-item": W((e) => [k("div", { class: F(["autocomplete-item", { "is-active": e.selected }]) }, [k("span", Rn, H(e.item.text), 1), e.item.data && e.item.data.snippet ? (L(), O("span", zn, " - " + H(e.item.data.snippet), 1)) : D("", !0)], 2)]),
3994
4000
  _: 1
3995
4001
  }, 8, [
3996
4002
  "modelValue",
@@ -4010,11 +4016,11 @@ function _sfc_render$5(e, t, n, r, i, a) {
4010
4016
  }, 8, ["loading", "onClick"]))]);
4011
4017
  }
4012
4018
  t(_sfc_render$5, "_sfc_render");
4013
- var Rn = /* @__PURE__ */ r(Pn, [["render", _sfc_render$5], ["__scopeId", "data-v-f7373dc0"]]), zn = M({
4019
+ var Bn = /* @__PURE__ */ r(In, [["render", _sfc_render$5], ["__scopeId", "data-v-f7373dc0"]]), Vn = M({
4014
4020
  name: "CourseCardBrowser",
4015
4021
  components: {
4016
4022
  CardLoader: un,
4017
- TagsInput: Rn,
4023
+ TagsInput: Bn,
4018
4024
  PaginatingToolbar: Ue
4019
4025
  },
4020
4026
  props: {
@@ -4169,26 +4175,26 @@ var Rn = /* @__PURE__ */ r(Pn, [["render", _sfc_render$5], ["__scopeId", "data-v
4169
4175
  }
4170
4176
  }
4171
4177
  }
4172
- }), Bn = {
4178
+ }), Hn = {
4173
4179
  key: 0,
4174
4180
  class: "d-flex justify-center align-center pa-6"
4175
- }, Vn = { key: 1 }, Hn = {
4181
+ }, Un = { key: 1 }, Wn = {
4176
4182
  key: 0,
4177
4183
  class: "px-4 py-2 bg-blue-grey-lighten-5"
4178
- }, Un = {
4184
+ }, Gn = {
4179
4185
  key: 0,
4180
4186
  class: "mt-4"
4181
- }, Wn = { class: "mt-4" }, Gn = {
4187
+ }, Kn = { class: "mt-4" }, qn = {
4182
4188
  key: 0,
4183
4189
  class: "ml-4"
4184
4190
  };
4185
4191
  function _sfc_render$4(e, t, n, r, i, a) {
4186
4192
  let o = V("v-progress-circular"), s = V("paginating-toolbar"), c = V("v-list-item-title"), l = V("v-list-item-subtitle"), u = V("v-btn"), d = V("v-icon"), f = V("v-speed-dial"), p = V("v-list-item"), m = V("card-loader"), h = V("v-chip"), g = V("v-chip-group"), _ = V("tags-input"), v = V("v-list"), y = V("v-card");
4187
4193
  return L(), E(y, null, {
4188
- default: W(() => [e.updatePending ? (L(), O("div", Bn, [j(o, {
4194
+ default: W(() => [e.updatePending ? (L(), O("div", Hn, [j(o, {
4189
4195
  indeterminate: "",
4190
4196
  color: "primary"
4191
- })])) : (L(), O("div", Vn, [
4197
+ })])) : (L(), O("div", Un, [
4192
4198
  j(s, {
4193
4199
  title: "Exercises",
4194
4200
  page: e.page,
@@ -4271,13 +4277,13 @@ function _sfc_render$4(e, t, n, r, i, a) {
4271
4277
  _: 2
4272
4278
  }, 1032, ["modelValue", "onUpdate:modelValue"])]),
4273
4279
  _: 2
4274
- }, 1032, ["class"]), n.isOpen ? (L(), O("div", Hn, [
4280
+ }, 1032, ["class"]), n.isOpen ? (L(), O("div", Wn, [
4275
4281
  j(m, {
4276
4282
  qualified_id: n.card,
4277
4283
  "view-lookup": e.viewLookup,
4278
4284
  class: "elevation-1"
4279
4285
  }, null, 8, ["qualified_id", "view-lookup"]),
4280
- e.editMode === "readonly" && e.cardTags[n.card.cardID] ? (L(), O("div", Un, [j(g, null, {
4286
+ e.editMode === "readonly" && e.cardTags[n.card.cardID] ? (L(), O("div", Gn, [j(g, null, {
4281
4287
  default: W(() => [(L(!0), O(C, null, z(e.cardTags[n.card.cardID], (e) => (L(), E(h, {
4282
4288
  key: e.name,
4283
4289
  size: "small",
@@ -4294,14 +4300,14 @@ function _sfc_render$4(e, t, n, r, i, a) {
4294
4300
  "card-i-d": n.card.cardID,
4295
4301
  class: "mt-4"
4296
4302
  }, null, 8, ["course-i-d", "card-i-d"]), [[ue, e.internalEditMode === "tags" && e.editMode === "full"]]),
4297
- de(k("div", Wn, [j(u, {
4303
+ de(k("div", Kn, [j(u, {
4298
4304
  color: "error",
4299
4305
  variant: "outlined",
4300
4306
  onClick: (e) => n.delBtn = !0
4301
4307
  }, {
4302
4308
  default: W(() => t[6] || (t[6] = [A(" Delete this card ")])),
4303
4309
  _: 2
4304
- }, 1032, ["onClick"]), n.delBtn ? (L(), O("span", Gn, [t[8] || (t[8] = k("span", { class: "mr-2" }, "Are you sure?", -1)), j(u, {
4310
+ }, 1032, ["onClick"]), n.delBtn ? (L(), O("span", qn, [t[8] || (t[8] = k("span", { class: "mr-2" }, "Are you sure?", -1)), j(u, {
4305
4311
  color: "error",
4306
4312
  variant: "elevated",
4307
4313
  onClick: (t) => e.deleteCard(n.card.cardID)
@@ -4334,9 +4340,9 @@ function _sfc_render$4(e, t, n, r, i, a) {
4334
4340
  });
4335
4341
  }
4336
4342
  t(_sfc_render$4, "_sfc_render");
4337
- var Kn = /* @__PURE__ */ r(zn, [["render", _sfc_render$4], ["__scopeId", "data-v-5ecc9d21"]]), qn = M({
4343
+ var Jn = /* @__PURE__ */ r(Vn, [["render", _sfc_render$4], ["__scopeId", "data-v-5ecc9d21"]]), Yn = M({
4338
4344
  name: "CourseInformation",
4339
- components: { CourseCardBrowser: Kn },
4345
+ components: { CourseCardBrowser: Jn },
4340
4346
  props: {
4341
4347
  courseId: {
4342
4348
  type: String,
@@ -4378,15 +4384,15 @@ var Kn = /* @__PURE__ */ r(zn, [["render", _sfc_render$4], ["__scopeId", "data-v
4378
4384
  Y(`Dropping course ${this.courseId}`), (await this.user.dropCourse(this.courseId)).ok && (this.userIsRegistered = !1);
4379
4385
  }
4380
4386
  }
4381
- }), Jn = { key: 0 }, Yn = { class: "text-h4 mb-2" }, Xn = { class: "text-body-2" }, Zn = { key: 0 }, Qn = { key: 1 };
4387
+ }), Xn = { key: 0 }, Zn = { class: "text-h4 mb-2" }, Qn = { class: "text-body-2" }, $n = { key: 0 }, er = { key: 1 };
4382
4388
  function _sfc_render$3(e, t, n, r, i, a) {
4383
4389
  let o = V("v-btn"), s = V("v-icon"), c = V("v-toolbar-title"), l = V("v-toolbar-items"), u = V("v-toolbar"), d = V("v-chip"), f = V("v-card-text"), p = V("v-card"), m = V("course-card-browser");
4384
- return e.updatePending ? D("", !0) : (L(), O("div", Jn, [
4390
+ return e.updatePending ? D("", !0) : (L(), O("div", Xn, [
4385
4391
  B(e.$slots, "header", {
4386
4392
  courseConfig: e.courseConfig,
4387
4393
  courseId: e.courseId
4388
- }, () => [k("h1", Yn, H(e.courseConfig.name), 1)], !0),
4389
- k("p", Xn, H(e.courseConfig.description), 1),
4394
+ }, () => [k("h1", Zn, H(e.courseConfig.name), 1)], !0),
4395
+ k("p", Qn, H(e.courseConfig.description), 1),
4390
4396
  B(e.$slots, "actions", {
4391
4397
  userIsRegistered: e.userIsRegistered,
4392
4398
  courseId: e.courseId,
@@ -4397,7 +4403,7 @@ function _sfc_render$3(e, t, n, r, i, a) {
4397
4403
  name: "component-fade",
4398
4404
  mode: "out-in"
4399
4405
  }, {
4400
- default: W(() => [e.userIsRegistered ? (L(), O("div", Zn, [
4406
+ default: W(() => [e.userIsRegistered ? (L(), O("div", $n, [
4401
4407
  j(o, {
4402
4408
  color: "success",
4403
4409
  "data-cy": "focused-study-session-btn",
@@ -4440,7 +4446,7 @@ function _sfc_render$3(e, t, n, r, i, a) {
4440
4446
  default: W(() => t[5] || (t[5] = [A(" Drop this course ")])),
4441
4447
  _: 1
4442
4448
  }, 8, ["onClick"])) : D("", !0)
4443
- ])) : (L(), O("div", Qn, [j(o, {
4449
+ ])) : (L(), O("div", er, [j(o, {
4444
4450
  "data-cy": "register-btn",
4445
4451
  color: "primary",
4446
4452
  class: "me-2",
@@ -4500,7 +4506,7 @@ function _sfc_render$3(e, t, n, r, i, a) {
4500
4506
  ]));
4501
4507
  }
4502
4508
  t(_sfc_render$3, "_sfc_render");
4503
- var $n = /* @__PURE__ */ r(qn, [["render", _sfc_render$3], ["__scopeId", "data-v-38e9efe1"]]), er = M({
4509
+ var tr = /* @__PURE__ */ r(Yn, [["render", _sfc_render$3], ["__scopeId", "data-v-38e9efe1"]]), nr = M({
4504
4510
  name: "CardBrowser",
4505
4511
  components: { CardViewer: Q },
4506
4512
  props: {
@@ -4540,7 +4546,7 @@ var $n = /* @__PURE__ */ r(qn, [["render", _sfc_render$3], ["__scopeId", "data-v
4540
4546
  this.viewIndex--, this.viewIndex = (this.viewIndex + this.views.length) % this.views.length;
4541
4547
  }
4542
4548
  }
4543
- }), tr = {
4549
+ }), rr = {
4544
4550
  key: 0,
4545
4551
  class: "text-subtitle-1 pa-2"
4546
4552
  };
@@ -4560,7 +4566,7 @@ function _sfc_render$2(e, t, n, r, i, a) {
4560
4566
  }, null, 8, ["view", "data"]),
4561
4567
  t[2] || (t[2] = k("br", null, null, -1)),
4562
4568
  t[3] || (t[3] = k("br", null, null, -1)),
4563
- e.suppressSpinner ? D("", !0) : (L(), O("div", tr, [
4569
+ e.suppressSpinner ? D("", !0) : (L(), O("div", rr, [
4564
4570
  e.spinner ? (L(), E(c, {
4565
4571
  key: 0,
4566
4572
  icon: "",
@@ -4594,7 +4600,7 @@ function _sfc_render$2(e, t, n, r, i, a) {
4594
4600
  });
4595
4601
  }
4596
4602
  t(_sfc_render$2, "_sfc_render");
4597
- var nr = /* @__PURE__ */ r(er, [["render", _sfc_render$2]]), rr = M({
4603
+ var ir = /* @__PURE__ */ r(nr, [["render", _sfc_render$2]]), ar = M({
4598
4604
  name: "CourseTagFilterWidget",
4599
4605
  props: {
4600
4606
  courseId: {
@@ -4649,13 +4655,13 @@ var nr = /* @__PURE__ */ r(er, [["render", _sfc_render$2]]), rr = M({
4649
4655
  fuzzyFilter
4650
4656
  };
4651
4657
  }
4652
- }), ir = { class: "course-tag-filter-widget" }, ar = {
4658
+ }), or = { class: "course-tag-filter-widget" }, sr = {
4653
4659
  key: 0,
4654
4660
  class: "filter-summary text-caption mt-2"
4655
- }, or = { key: 0 }, sr = { key: 1 }, cr = { key: 2 };
4661
+ }, cr = { key: 0 }, lr = { key: 1 }, ur = { key: 2 };
4656
4662
  function _sfc_render$1(e, t, n, r, i, a) {
4657
4663
  let o = V("v-chip"), s = V("v-list-item"), c = V("v-autocomplete"), l = V("v-icon");
4658
- return L(), O("div", ir, [
4664
+ return L(), O("div", or, [
4659
4665
  j(c, {
4660
4666
  modelValue: e.localFilter.include,
4661
4667
  "onUpdate:modelValue": t[0] || (t[0] = (t) => e.localFilter.include = t),
@@ -4737,7 +4743,7 @@ function _sfc_render$1(e, t, n, r, i, a) {
4737
4743
  "disabled",
4738
4744
  "custom-filter"
4739
4745
  ]),
4740
- e.hasActiveFilter ? (L(), O("div", ar, [
4746
+ e.hasActiveFilter ? (L(), O("div", sr, [
4741
4747
  j(l, {
4742
4748
  size: "small",
4743
4749
  color: "info",
@@ -4746,18 +4752,18 @@ function _sfc_render$1(e, t, n, r, i, a) {
4746
4752
  default: W(() => t[2] || (t[2] = [A("mdi-filter")])),
4747
4753
  _: 1
4748
4754
  }),
4749
- e.localFilter.include.length ? (L(), O("span", or, " Including: " + H(e.localFilter.include.join(", ")), 1)) : D("", !0),
4750
- e.localFilter.include.length && e.localFilter.exclude.length ? (L(), O("span", sr, " · ")) : D("", !0),
4751
- e.localFilter.exclude.length ? (L(), O("span", cr, " Excluding: " + H(e.localFilter.exclude.join(", ")), 1)) : D("", !0)
4755
+ e.localFilter.include.length ? (L(), O("span", cr, " Including: " + H(e.localFilter.include.join(", ")), 1)) : D("", !0),
4756
+ e.localFilter.include.length && e.localFilter.exclude.length ? (L(), O("span", lr, " · ")) : D("", !0),
4757
+ e.localFilter.exclude.length ? (L(), O("span", ur, " Excluding: " + H(e.localFilter.exclude.join(", ")), 1)) : D("", !0)
4752
4758
  ])) : D("", !0)
4753
4759
  ]);
4754
4760
  }
4755
4761
  t(_sfc_render$1, "_sfc_render");
4756
- var lr = /* @__PURE__ */ r(rr, [["render", _sfc_render$1], ["__scopeId", "data-v-e1ba963b"]]), $ = {
4762
+ var dr = /* @__PURE__ */ r(ar, [["render", _sfc_render$1], ["__scopeId", "data-v-e1ba963b"]]), $ = {
4757
4763
  min: 0,
4758
4764
  startingMax: 2,
4759
4765
  absoluteMax: 10
4760
- }, ur = "UserTagPreferenceFilter", dr = M({
4766
+ }, fr = "UserTagPreferenceFilter", pr = M({
4761
4767
  name: "UserTagPreferences",
4762
4768
  props: {
4763
4769
  courseId: {
@@ -4823,7 +4829,7 @@ var lr = /* @__PURE__ */ r(rr, [["render", _sfc_render$1], ["__scopeId", "data-v
4823
4829
  try {
4824
4830
  if (this.user = await getCurrentUser() ?? null, !this.user) throw Error("User not available");
4825
4831
  this.courseDB = X().getCourseDB(this.courseId), this.availableTags = (await this.courseDB.getCourseTagStubs()).rows.map((e) => e.doc).filter(Boolean);
4826
- let e = await this.user.getStrategyState(this.courseId, ur);
4832
+ let e = await this.user.getStrategyState(this.courseId, fr);
4827
4833
  e ? this.preferences.boost = { ...e.boost } : this.preferences.boost = {}, this.savedPreferences.boost = { ...this.preferences.boost }, this.tagMaxRanges = {}, Object.keys(this.preferences.boost).forEach((e) => {
4828
4834
  let t = this.preferences.boost[e], n = this.sliderConfigResolved.startingMax;
4829
4835
  t > n ? this.tagMaxRanges[e] = Math.min(Math.ceil(t), this.sliderConfigResolved.absoluteMax) : this.tagMaxRanges[e] = n;
@@ -4874,7 +4880,7 @@ var lr = /* @__PURE__ */ r(rr, [["render", _sfc_render$1], ["__scopeId", "data-v
4874
4880
  boost: { ...this.preferences.boost },
4875
4881
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
4876
4882
  };
4877
- await this.user.putStrategyState(this.courseId, ur, e), this.savedPreferences.boost = { ...this.preferences.boost }, this.saveSuccess = !0, this.$emit("preferences-saved", e);
4883
+ await this.user.putStrategyState(this.courseId, fr, e), this.savedPreferences.boost = { ...this.preferences.boost }, this.saveSuccess = !0, this.$emit("preferences-saved", e);
4878
4884
  } catch (e) {
4879
4885
  console.error("Failed to save preferences:", e), this.saveError = "Failed to save preferences. Please try again.";
4880
4886
  } finally {
@@ -4882,13 +4888,13 @@ var lr = /* @__PURE__ */ r(rr, [["render", _sfc_render$1], ["__scopeId", "data-v
4882
4888
  }
4883
4889
  }
4884
4890
  }
4885
- }), fr = { key: 1 }, pr = { class: "mb-6" }, mr = { class: "text-subtitle-1 font-weight-bold mb-2" }, hr = { class: "d-flex align-center ga-3 w-100" }, gr = {
4891
+ }), mr = { key: 1 }, hr = { class: "mb-6" }, gr = { class: "text-subtitle-1 font-weight-bold mb-2" }, _r = { class: "d-flex align-center ga-3 w-100" }, vr = {
4886
4892
  class: "text-body-2 flex-shrink-0",
4887
4893
  style: {
4888
4894
  "min-width": "60px",
4889
4895
  "text-align": "right"
4890
4896
  }
4891
- }, _r = {
4897
+ }, yr = {
4892
4898
  key: 2,
4893
4899
  class: "d-flex justify-center py-8"
4894
4900
  };
@@ -4908,12 +4914,12 @@ function _sfc_render(e, t, n, r, i, a) {
4908
4914
  _: 1
4909
4915
  })) : D("", !0),
4910
4916
  j(_, null, {
4911
- default: W(() => [e.courseId ? e.loading ? (L(), O("div", _r, [j(g, {
4917
+ default: W(() => [e.courseId ? e.loading ? (L(), O("div", yr, [j(g, {
4912
4918
  indeterminate: "",
4913
4919
  color: "primary"
4914
- })])) : (L(), O("div", fr, [
4915
- k("div", pr, [
4916
- k("h3", mr, [j(o, {
4920
+ })])) : (L(), O("div", mr, [
4921
+ k("div", hr, [
4922
+ k("h3", gr, [j(o, {
4917
4923
  start: "",
4918
4924
  size: "small"
4919
4925
  }, {
@@ -4953,7 +4959,7 @@ function _sfc_render(e, t, n, r, i, a) {
4953
4959
  key: t,
4954
4960
  class: "px-0"
4955
4961
  }, {
4956
- default: W(() => [k("div", hr, [
4962
+ default: W(() => [k("div", _r, [
4957
4963
  j(f, {
4958
4964
  size: "small",
4959
4965
  variant: "tonal",
@@ -4981,7 +4987,7 @@ function _sfc_render(e, t, n, r, i, a) {
4981
4987
  "max",
4982
4988
  "onUpdate:modelValue"
4983
4989
  ]),
4984
- k("span", gr, H(e.formatMultiplier(e.preferences.boost[t])), 1),
4990
+ k("span", vr, H(e.formatMultiplier(e.preferences.boost[t])), 1),
4985
4991
  j(m, {
4986
4992
  icon: "mdi-plus",
4987
4993
  size: "small",
@@ -5076,8 +5082,8 @@ function _sfc_render(e, t, n, r, i, a) {
5076
5082
  _: 1
5077
5083
  }, 8, ["loading"]);
5078
5084
  }
5079
- var vr = /* @__PURE__ */ r(dr, [["render", _sfc_render], ["__scopeId", "data-v-8fb14605"]]);
5085
+ var br = /* @__PURE__ */ r(pr, [["render", _sfc_render], ["__scopeId", "data-v-8fb14605"]]);
5080
5086
  //#endregion
5081
- export { a as AudioAutoPlayer, nr as CardBrowser, at as CardHistoryViewer, un as CardLoader, Ke as CardSearch, Qe as CardSearchResults, Q as CardViewer, f as CodeBlockRenderer, Kn as CourseCardBrowser, $n as CourseInformation, lr as CourseTagFilterWidget, Displayable, m as FillInInput, Ae as HeatMap, y as MarkdownRenderer, _ as MdTokenRenderer, $t as MultipleChoiceOption, Ue as PaginatingToolbar, Question, nn as RadioMultipleChoice, yn as RequestPasswordReset, Nn as ResetPassword, Bt as SessionControllerDebug, Ne as SkMouseTrap, Fe as SkMouseTrapToolTip, e as SkldrMouseTrap, Be as SnackbarService, Zt as StudySession, st as StudySessionTimer, on as TFSelect, Rn as TagsInput, dn as UserChip, cn as UserInputNumber, d as UserInputString, mn as UserLogin, Cn as UserLoginAndRegistrationContainer, gn as UserRegistration, vr as UserTagPreferences, An as VerifyEmail, Z as alertUser, h as containsComponent, getCurrentUser, getUserStatus, v as isComponent, isDefineComponent, s as isInlineComponent, isPasswordValid, o as isQuestionView, p as parseComponentSyntax, b as parseComponentToken, te as piniaPlugin, requestPasswordReset, resetPassword, resolveLoginIdentifier, sendVerificationEmail, c as splitByDelimiters, l as splitParagraphToken, g as splitTextToken, useAuthStore, i as useCardPreviewModeStore, useConfigStore, useEntitlements, ee as useQuestionView, n as useViewable, validatePassword, verifyEmail };
5087
+ export { a as AudioAutoPlayer, ir as CardBrowser, at as CardHistoryViewer, un as CardLoader, Ke as CardSearch, Qe as CardSearchResults, Q as CardViewer, f as CodeBlockRenderer, Jn as CourseCardBrowser, tr as CourseInformation, dr as CourseTagFilterWidget, Displayable, m as FillInInput, Ae as HeatMap, y as MarkdownRenderer, _ as MdTokenRenderer, $t as MultipleChoiceOption, Ue as PaginatingToolbar, Question, nn as RadioMultipleChoice, xn as RequestPasswordReset, Fn as ResetPassword, Bt as SessionControllerDebug, Ne as SkMouseTrap, Fe as SkMouseTrapToolTip, e as SkldrMouseTrap, Be as SnackbarService, Zt as StudySession, st as StudySessionTimer, on as TFSelect, Bn as TagsInput, dn as UserChip, cn as UserInputNumber, d as UserInputString, gn as UserLogin, Tn as UserLoginAndRegistrationContainer, vn as UserRegistration, br as UserTagPreferences, Mn as VerifyEmail, Z as alertUser, h as containsComponent, getCurrentUser, getUserStatus, v as isComponent, isDefineComponent, s as isInlineComponent, isPasswordValid, o as isQuestionView, p as parseComponentSyntax, b as parseComponentToken, te as piniaPlugin, requestPasswordReset, resetPassword, resolveLoginIdentifier, sendVerificationEmail, c as splitByDelimiters, l as splitParagraphToken, g as splitTextToken, useAuthStore, i as useCardPreviewModeStore, useConfigStore, useEntitlements, ee as useQuestionView, n as useViewable, validatePassword, verifyEmail };
5082
5088
 
5083
5089
  //# sourceMappingURL=common-ui.es.js.map