@hydralms/components 0.1.0 → 0.1.2

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.
Files changed (159) hide show
  1. package/dist/components.css +1 -1
  2. package/dist/index.cjs +1 -1
  3. package/dist/index.js +442 -110
  4. package/dist/modules/CoursePlayer/CoursePlayer.d.ts +2 -0
  5. package/dist/modules/CoursePlayer/types.d.ts +59 -0
  6. package/dist/modules/FlashcardLab/FlashcardLab.d.ts +2 -0
  7. package/dist/modules/FlashcardLab/types.d.ts +55 -0
  8. package/dist/modules/QuizModule/QuizModule.d.ts +2 -0
  9. package/dist/modules/QuizModule/types.d.ts +54 -0
  10. package/dist/modules/index.d.ts +6 -0
  11. package/dist/provider/HydraProvider.d.ts +1 -1
  12. package/dist/sections.cjs +1 -1
  13. package/dist/sections.js +261 -291
  14. package/dist/table-BrS5cDQu.js +2510 -0
  15. package/dist/table-D6AkBBEo.cjs +1 -0
  16. package/dist/ui/alert-dialog.d.ts +14 -8
  17. package/dist/ui/button.d.ts +1 -1
  18. package/dist/ui/tabs.d.ts +15 -5
  19. package/dist/ui/tooltip.d.ts +12 -5
  20. package/dist/video/index.d.ts +6 -1
  21. package/dist/video/types.d.ts +167 -0
  22. package/dist/video/video-bookmark.d.ts +2 -0
  23. package/dist/video/video-chapter-list.d.ts +2 -0
  24. package/dist/video/video-playlist-item.d.ts +2 -0
  25. package/dist/video/video-thumbnail-card.d.ts +2 -0
  26. package/dist/video/video-transcript.d.ts +2 -0
  27. package/package.json +135 -24
  28. package/src/__tests__/setup.ts +1 -0
  29. package/src/assessment-toolbar/assessment-toolbar.tsx +96 -0
  30. package/src/assessment-toolbar/index.ts +10 -0
  31. package/src/assessment-toolbar/question-navigator.tsx +86 -0
  32. package/src/assessment-toolbar/timer-display.tsx +73 -0
  33. package/src/assessment-toolbar/types.ts +92 -0
  34. package/src/assets/hydra-icon.png +0 -0
  35. package/src/assets/hydra-icon.svg +18 -0
  36. package/src/assets/hydra-lms-icon.png +0 -0
  37. package/src/assets/hydra-lms-icon.svg +9 -0
  38. package/src/common/confirm-dialog.tsx +60 -0
  39. package/src/common/due-date-display.tsx +64 -0
  40. package/src/common/empty-state.tsx +24 -0
  41. package/src/common/index.ts +12 -0
  42. package/src/common/search-input.tsx +68 -0
  43. package/src/common/status-badge.test.tsx +43 -0
  44. package/src/common/status-badge.tsx +81 -0
  45. package/src/common/types.ts +129 -0
  46. package/src/content/content-block.tsx +116 -0
  47. package/src/content/file-upload-zone.tsx +109 -0
  48. package/src/content/index.ts +7 -0
  49. package/src/content/types.ts +76 -0
  50. package/src/curriculum/curriculum-item.tsx +81 -0
  51. package/src/curriculum/curriculum-tree.tsx +69 -0
  52. package/src/curriculum/index.ts +11 -0
  53. package/src/curriculum/learning-object-icon.tsx +44 -0
  54. package/src/curriculum/types.ts +83 -0
  55. package/src/feedback/feedback-banner.tsx +46 -0
  56. package/src/feedback/index.ts +8 -0
  57. package/src/feedback/likert-scale.tsx +58 -0
  58. package/src/feedback/star-rating.tsx +65 -0
  59. package/src/feedback/types.ts +86 -0
  60. package/src/flashcards/flashcard-deck.tsx +130 -0
  61. package/src/flashcards/flashcard.tsx +108 -0
  62. package/src/flashcards/index.ts +3 -0
  63. package/src/flashcards/types.ts +60 -0
  64. package/src/index.ts +38 -0
  65. package/src/lib/utils.ts +6 -0
  66. package/src/modules/CoursePlayer/CoursePlayer.tsx +281 -0
  67. package/src/modules/CoursePlayer/types.ts +48 -0
  68. package/src/modules/FlashcardLab/FlashcardLab.tsx +275 -0
  69. package/src/modules/FlashcardLab/types.ts +58 -0
  70. package/src/modules/QuizModule/QuizModule.tsx +241 -0
  71. package/src/modules/QuizModule/types.ts +56 -0
  72. package/src/modules/index.ts +12 -0
  73. package/src/progress/grade-indicator.tsx +65 -0
  74. package/src/progress/index.ts +8 -0
  75. package/src/progress/progress-ring.tsx +56 -0
  76. package/src/progress/stat-card.tsx +42 -0
  77. package/src/progress/types.ts +73 -0
  78. package/src/provider/HydraProvider.tsx +26 -0
  79. package/src/provider/index.ts +2 -0
  80. package/src/questions/choice.tsx +90 -0
  81. package/src/questions/essay.tsx +59 -0
  82. package/src/questions/fill-in-the-blank.tsx +69 -0
  83. package/src/questions/index.ts +14 -0
  84. package/src/questions/multiple-choice.test.tsx +104 -0
  85. package/src/questions/multiple-choice.tsx +97 -0
  86. package/src/questions/question-renderer.tsx +37 -0
  87. package/src/questions/true-false.test.tsx +89 -0
  88. package/src/questions/true-false.tsx +90 -0
  89. package/src/questions/types.ts +53 -0
  90. package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +141 -0
  91. package/src/sections/AnnouncementFeed/types.ts +50 -0
  92. package/src/sections/AssessmentReview/AssessmentReview.tsx +148 -0
  93. package/src/sections/AssessmentReview/types.ts +61 -0
  94. package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +190 -0
  95. package/src/sections/AssignmentSubmission/types.ts +60 -0
  96. package/src/sections/CertificateViewer/CertificateViewer.tsx +117 -0
  97. package/src/sections/CertificateViewer/types.ts +45 -0
  98. package/src/sections/CourseOutline/CourseOutline.tsx +79 -0
  99. package/src/sections/CourseOutline/types.ts +53 -0
  100. package/src/sections/DiscussionThread/DiscussionThread.tsx +186 -0
  101. package/src/sections/DiscussionThread/types.ts +77 -0
  102. package/src/sections/ExamSession/ExamSession.tsx +182 -0
  103. package/src/sections/ExamSession/types.ts +64 -0
  104. package/src/sections/FlashcardStudySession/FlashcardStudySession.tsx +76 -0
  105. package/src/sections/FlashcardStudySession/types.ts +42 -0
  106. package/src/sections/GradebookTable/GradebookTable.tsx +229 -0
  107. package/src/sections/GradebookTable/types.ts +75 -0
  108. package/src/sections/LecturePlayer/LecturePlayer.tsx +60 -0
  109. package/src/sections/LecturePlayer/types.ts +48 -0
  110. package/src/sections/LessonPage/LessonPage.tsx +91 -0
  111. package/src/sections/LessonPage/types.ts +41 -0
  112. package/src/sections/PracticeQuiz/PracticeQuiz.tsx +199 -0
  113. package/src/sections/PracticeQuiz/types.ts +44 -0
  114. package/src/sections/ProgressDashboard/ProgressDashboard.tsx +140 -0
  115. package/src/sections/ProgressDashboard/types.ts +74 -0
  116. package/src/sections/QuizSession/QuizSession.tsx +113 -0
  117. package/src/sections/QuizSession/types.ts +47 -0
  118. package/src/sections/ResourceLibrary/ResourceLibrary.tsx +218 -0
  119. package/src/sections/ResourceLibrary/types.ts +57 -0
  120. package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +170 -0
  121. package/src/sections/ScrollableQuiz/types.ts +40 -0
  122. package/src/sections/SurveyForm/SurveyForm.tsx +180 -0
  123. package/src/sections/SurveyForm/types.ts +69 -0
  124. package/src/sections/index.ts +90 -0
  125. package/src/social/index.ts +3 -0
  126. package/src/social/post-card.tsx +91 -0
  127. package/src/social/types.ts +57 -0
  128. package/src/social/user-avatar.tsx +76 -0
  129. package/src/styles/globals.css +125 -0
  130. package/src/ui/alert-dialog.tsx +343 -0
  131. package/src/ui/alert.tsx +65 -0
  132. package/src/ui/avatar.tsx +52 -0
  133. package/src/ui/badge.tsx +53 -0
  134. package/src/ui/button.tsx +62 -0
  135. package/src/ui/card.tsx +92 -0
  136. package/src/ui/index.ts +44 -0
  137. package/src/ui/input.tsx +21 -0
  138. package/src/ui/progress.tsx +73 -0
  139. package/src/ui/separator.tsx +29 -0
  140. package/src/ui/skeleton.tsx +15 -0
  141. package/src/ui/slot.tsx +48 -0
  142. package/src/ui/table.tsx +108 -0
  143. package/src/ui/tabs.tsx +147 -0
  144. package/src/ui/textarea.tsx +20 -0
  145. package/src/ui/tooltip.tsx +177 -0
  146. package/src/utils/debounce.test.ts +59 -0
  147. package/src/utils/debounce.ts +10 -0
  148. package/src/utils/format-duration.test.ts +55 -0
  149. package/src/utils/format-duration.ts +30 -0
  150. package/src/video/index.ts +17 -0
  151. package/src/video/types.ts +216 -0
  152. package/src/video/video-bookmark.tsx +76 -0
  153. package/src/video/video-chapter-list.tsx +93 -0
  154. package/src/video/video-player.tsx +103 -0
  155. package/src/video/video-playlist-item.tsx +90 -0
  156. package/src/video/video-thumbnail-card.tsx +74 -0
  157. package/src/video/video-transcript.tsx +102 -0
  158. package/dist/table-CW4_BYny.js +0 -9869
  159. package/dist/table-DSBBqb9X.cjs +0 -56
package/dist/sections.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { jsxs as t, jsx as e, Fragment as ee } from "react/jsx-runtime";
2
- import { useState as I, useMemo as $, useRef as ge, useEffect as ie, useCallback as Qe, Fragment as Be } from "react";
3
- import { o as be, C as L, r as Q, V as X, c as F, ai as oe, u as $e, v as je, p as R, L as Ee, B as Ne, X as V, S as ne, D as _e, H as He, A as ve, a as we, x as Ve, P as Ye, Y as Ze, ab as te, an as ye, y as Je, W as Ke, ad as Z, af as J, ae as K, a7 as Se, a9 as ke, aa as W, F as ze, O as ue, ah as We, R as Xe, _ as Ce, E as Ue, a8 as se, I as me, N as he, M as Ge, $ as Oe, a5 as qe, a6 as le, a4 as Ae, a0 as et, a2 as Y, T as tt, Z as ae } from "./table-CW4_BYny.js";
4
- import { CheckCircle as G, Clock as De, Check as fe, ChevronRight as nt, List as rt, Grid as st, Download as Te, Pin as lt, MessageSquare as at, Heart as it, Reply as dt, Save as ct, Send as Ie, ArrowUp as ot, ArrowDown as ut, Flame as mt, BookOpen as Fe, Award as Le, Trophy as ht, Printer as ft } from "lucide-react";
2
+ import { useState as I, useMemo as j, useRef as ge, useEffect as ie, useCallback as Qe, Fragment as Be } from "react";
3
+ import { q as be, C as L, t as Q, X, c as F, ak as oe, w as je, x as $e, r as R, N as _e, B as Ne, Z as V, P as ne, F as Ee, J as He, A as ve, b as we, z as Ve, S as Ye, _ as Je, ad as te, a as ye, D as Ke, Y as Ze, af as J, ah as K, ag as Z, a9 as Se, ab as ke, ac as G, H as ze, R as ue, aj as Ge, U as Xe, a0 as Ce, G as Ue, aa as se, K as me, Q as he, O as We, a1 as Oe, a7 as qe, a8 as le, a6 as Ae, a2 as et, a4 as Y, V as tt, $ as ae } from "./table-BrS5cDQu.js";
4
+ import { CheckCircle as W, Clock as De, Check as fe, ChevronRight as nt, List as rt, Grid as st, Download as Te, Pin as lt, MessageSquare as at, Heart as it, Reply as ct, Save as dt, Send as Ie, ArrowUp as ot, ArrowDown as ut, Flame as mt, BookOpen as Fe, Award as Le, Trophy as ht, Printer as ft } from "lucide-react";
5
5
  function Ct({
6
6
  questions: r,
7
7
  initialAnswers: s = [],
8
8
  onSubmit: a,
9
- onAnswerChange: c,
9
+ onAnswerChange: d,
10
10
  timeElapsedSeconds: p,
11
11
  timeLimitSeconds: l,
12
12
  isSubmitting: h = !1,
@@ -14,7 +14,7 @@ function Ct({
14
14
  className: w,
15
15
  style: y
16
16
  }) {
17
- const [d, b] = I(0), [T, u] = I(s), [U, N] = I(/* @__PURE__ */ new Set()), z = r[d], x = $(
17
+ const [c, b] = I(0), [T, u] = I(s), [U, N] = I(/* @__PURE__ */ new Set()), z = r[c], x = j(
18
18
  () => r.map((S, f) => ({
19
19
  uid: S.uid,
20
20
  sequence: f + 1,
@@ -33,7 +33,7 @@ function Ct({
33
33
  }));
34
34
  u((v) => {
35
35
  const k = [...v.filter((D) => D.uid !== f), ...m];
36
- return c == null || c(k), k;
36
+ return d == null || d(k), k;
37
37
  });
38
38
  }
39
39
  function n(S) {
@@ -53,10 +53,10 @@ function Ct({
53
53
  /* @__PURE__ */ e(
54
54
  be,
55
55
  {
56
- currentQuestionIndex: d,
56
+ currentQuestionIndex: c,
57
57
  totalQuestions: r.length,
58
- hasNext: d < r.length - 1,
59
- hasPrevious: d > 0,
58
+ hasNext: c < r.length - 1,
59
+ hasPrevious: c > 0,
60
60
  onNext: () => b((S) => Math.min(S + 1, r.length - 1)),
61
61
  onPrevious: () => b((S) => Math.max(S - 1, 0)),
62
62
  onSubmit: g,
@@ -87,7 +87,7 @@ function Ut({
87
87
  video: r,
88
88
  notes: s,
89
89
  layout: a = "horizontal",
90
- notesPanelWidth: c = "340px",
90
+ notesPanelWidth: d = "340px",
91
91
  notesPanelHeight: p = "240px",
92
92
  className: l,
93
93
  style: h
@@ -112,11 +112,11 @@ function Ut({
112
112
  i ? "border-l border-border" : "border-t border-border w-full"
113
113
  ),
114
114
  style: {
115
- width: i ? c : void 0,
115
+ width: i ? d : void 0,
116
116
  height: i ? void 0 : p
117
117
  },
118
118
  children: [
119
- /* @__PURE__ */ e($e, { children: /* @__PURE__ */ e(je, { children: "Notes" }) }),
119
+ /* @__PURE__ */ e(je, { children: /* @__PURE__ */ e($e, { children: "Notes" }) }),
120
120
  /* @__PURE__ */ e(Q, { children: typeof s == "string" ? /* @__PURE__ */ e("span", { className: "text-sm text-foreground", children: s }) : s })
121
121
  ]
122
122
  }
@@ -129,44 +129,44 @@ function At({
129
129
  cards: r,
130
130
  title: s,
131
131
  description: a,
132
- shuffled: c = !1,
132
+ shuffled: d = !1,
133
133
  onComplete: p,
134
134
  readOnly: l = !1,
135
135
  className: h,
136
136
  style: i
137
137
  }) {
138
- const [w, y] = I(!1), d = {
138
+ const [w, y] = I(!1), c = {
139
139
  totalCards: r.length,
140
- wasShuffled: c
140
+ wasShuffled: d
141
141
  };
142
142
  function b() {
143
- y(!0), p == null || p(d);
143
+ y(!0), p == null || p(c);
144
144
  }
145
145
  function T() {
146
146
  y(!1);
147
147
  }
148
- return w ? /* @__PURE__ */ e("div", { className: F(h), style: i, children: /* @__PURE__ */ e(L, { children: /* @__PURE__ */ t(Q, { className: "pt-6 text-center flex flex-col items-center gap-2", children: [
149
- /* @__PURE__ */ e(G, { size: 48, className: "text-success" }),
148
+ return w ? /* @__PURE__ */ e("div", { className: F("flex flex-col items-center", h), style: i, children: /* @__PURE__ */ e(L, { children: /* @__PURE__ */ t(Q, { className: "pt-6 text-center flex flex-col items-center gap-2", children: [
149
+ /* @__PURE__ */ e(W, { size: 48, className: "text-success" }),
150
150
  /* @__PURE__ */ e("span", { className: "text-xl font-bold text-foreground", children: "Deck complete!" }),
151
151
  s && /* @__PURE__ */ t("span", { className: "text-muted-foreground", children: [
152
152
  "You finished ",
153
153
  /* @__PURE__ */ e("strong", { children: s })
154
154
  ] }),
155
155
  /* @__PURE__ */ t("span", { className: "text-sm text-muted-foreground", children: [
156
- d.totalCards,
156
+ c.totalCards,
157
157
  " card",
158
- d.totalCards !== 1 ? "s" : "",
158
+ c.totalCards !== 1 ? "s" : "",
159
159
  " studied",
160
- d.wasShuffled ? " (shuffled)" : ""
160
+ c.wasShuffled ? " (shuffled)" : ""
161
161
  ] }),
162
- /* @__PURE__ */ e(R, { className: "mt-1", onClick: T, children: "Study Again" })
163
- ] }) }) }) : /* @__PURE__ */ e("div", { className: F(h), style: i, children: /* @__PURE__ */ e(
164
- Ee,
162
+ /* @__PURE__ */ e(R, { className: "mt-2", onClick: T, children: "Study Again" })
163
+ ] }) }) }) : /* @__PURE__ */ e("div", { className: F("flex flex-col items-center", h), style: i, children: /* @__PURE__ */ e(
164
+ _e,
165
165
  {
166
166
  cards: r,
167
167
  deckName: s,
168
168
  deckDescription: a,
169
- shuffled: c,
169
+ shuffled: d,
170
170
  showProgress: !0,
171
171
  onComplete: b,
172
172
  readOnly: l
@@ -198,29 +198,29 @@ function pt({
198
198
  ] })
199
199
  ] }) }) });
200
200
  }
201
- function de({
201
+ function ce({
202
202
  questions: r,
203
203
  sessionAnswers: s,
204
204
  showCorrectAnswers: a
205
205
  }) {
206
- return /* @__PURE__ */ e("div", { className: "flex flex-col gap-3", children: r.map((c, p) => /* @__PURE__ */ t(L, { className: "overflow-hidden", children: [
206
+ return /* @__PURE__ */ e("div", { className: "flex flex-col gap-3", children: r.map((d, p) => /* @__PURE__ */ t(L, { className: "overflow-hidden", children: [
207
207
  /* @__PURE__ */ e("div", { className: "px-2 py-1 bg-muted", children: /* @__PURE__ */ t("span", { className: "text-xs text-muted-foreground font-semibold", children: [
208
208
  "Question ",
209
209
  p + 1
210
210
  ] }) }),
211
211
  /* @__PURE__ */ e(V, {}),
212
- /* @__PURE__ */ e(Q, { className: "pt-4 pb-6", children: /* @__PURE__ */ e(
212
+ /* @__PURE__ */ e(Q, { className: "pt-4 pb-4", children: /* @__PURE__ */ e(
213
213
  X,
214
214
  {
215
- question: c,
216
- sessionAnswers: s.filter((l) => l.uid === c.uid),
215
+ question: d,
216
+ sessionAnswers: s.filter((l) => l.uid === d.uid),
217
217
  readOnly: !0,
218
218
  showCorrectAnswers: a
219
219
  }
220
220
  ) })
221
- ] }, c.uid)) });
221
+ ] }, d.uid)) });
222
222
  }
223
- function xt(r, s, a, c) {
223
+ function xt(r, s, a, d) {
224
224
  const p = new Map(r.map((i) => [i.uid, i])), l = new Set(a.flatMap((i) => i.questionUids)), h = r.filter((i) => !l.has(i.uid));
225
225
  return /* @__PURE__ */ t("div", { className: "flex flex-col gap-4", children: [
226
226
  a.map((i) => {
@@ -229,21 +229,21 @@ function xt(r, s, a, c) {
229
229
  /* @__PURE__ */ e("span", { className: "uppercase text-xs tracking-wide text-muted-foreground font-semibold", children: i.label }),
230
230
  /* @__PURE__ */ e(V, { className: "mb-2" }),
231
231
  /* @__PURE__ */ e(
232
- de,
232
+ ce,
233
233
  {
234
234
  questions: w,
235
235
  sessionAnswers: s,
236
- showCorrectAnswers: c
236
+ showCorrectAnswers: d
237
237
  }
238
238
  )
239
239
  ] }, i.label);
240
240
  }),
241
241
  h.length > 0 && /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(
242
- de,
242
+ ce,
243
243
  {
244
244
  questions: h,
245
245
  sessionAnswers: s,
246
- showCorrectAnswers: c
246
+ showCorrectAnswers: d
247
247
  }
248
248
  ) })
249
249
  ] });
@@ -252,15 +252,15 @@ function Dt({
252
252
  questions: r,
253
253
  sessionAnswers: s,
254
254
  score: a,
255
- questionGroups: c,
255
+ questionGroups: d,
256
256
  showCorrectAnswers: p = !0,
257
257
  className: l,
258
258
  style: h
259
259
  }) {
260
260
  return /* @__PURE__ */ t("div", { className: F(l), style: h, children: [
261
261
  a && /* @__PURE__ */ e(pt, { score: a }),
262
- c && c.length > 0 ? xt(r, s, c, p) : /* @__PURE__ */ e(
263
- de,
262
+ d && d.length > 0 ? xt(r, s, d, p) : /* @__PURE__ */ e(
263
+ ce,
264
264
  {
265
265
  questions: r,
266
266
  sessionAnswers: s,
@@ -279,16 +279,16 @@ function Tt({
279
279
  items: r,
280
280
  progress: s,
281
281
  courseTitle: a,
282
- activeItemUid: c,
282
+ activeItemUid: d,
283
283
  onItemClick: p,
284
284
  showOverallProgress: l = !0,
285
285
  showDuration: h = !0,
286
286
  showIcons: i = !0,
287
287
  readOnly: w = !1,
288
288
  className: y,
289
- style: d
289
+ style: c
290
290
  }) {
291
- const { completedCount: b, totalCount: T, percentage: u } = $(() => {
291
+ const { completedCount: b, totalCount: T, percentage: u } = j(() => {
292
292
  const U = Me(r), N = U.length, z = s ? U.filter(
293
293
  (x) => s.some((C) => C.resourceUid === x && C.isCompleted)
294
294
  ).length : 0;
@@ -298,7 +298,7 @@ function Tt({
298
298
  percentage: N > 0 ? Math.round(z / N * 100) : 0
299
299
  };
300
300
  }, [r, s]);
301
- return /* @__PURE__ */ t("div", { className: F(y), style: d, children: [
301
+ return /* @__PURE__ */ t("div", { className: F(y), style: c, children: [
302
302
  (a || l) && /* @__PURE__ */ t("div", { className: "px-2 pt-2 pb-1", children: [
303
303
  a && /* @__PURE__ */ e("p", { className: F("font-semibold text-sm text-foreground", l && "mb-1"), children: a }),
304
304
  l && /* @__PURE__ */ t("div", { children: [
@@ -312,11 +312,11 @@ function Tt({
312
312
  ] })
313
313
  ] }),
314
314
  /* @__PURE__ */ e(
315
- _e,
315
+ Ee,
316
316
  {
317
317
  items: r,
318
318
  progress: s,
319
- activeItemUid: c,
319
+ activeItemUid: d,
320
320
  onItemClick: p,
321
321
  readOnly: w,
322
322
  showDuration: h,
@@ -330,17 +330,17 @@ function It({
330
330
  questions: r,
331
331
  initialAnswers: s = [],
332
332
  onSubmit: a,
333
- onAnswerChange: c,
333
+ onAnswerChange: d,
334
334
  showNavigator: p = !0,
335
335
  showQuestionNumbers: l = !0,
336
336
  questionGroups: h,
337
337
  isSubmitting: i = !1,
338
338
  readOnly: w = !1,
339
339
  className: y,
340
- style: d
340
+ style: c
341
341
  }) {
342
342
  var S;
343
- const [b, T] = I(s), [u, U] = I(((S = r[0]) == null ? void 0 : S.uid) ?? null), N = ge(/* @__PURE__ */ new Map()), z = $(() => {
343
+ const [b, T] = I(s), [u, U] = I(((S = r[0]) == null ? void 0 : S.uid) ?? null), N = ge(/* @__PURE__ */ new Map()), z = j(() => {
344
344
  const f = new Set(b.map((m) => m.uid));
345
345
  return r.filter((m) => f.has(m.uid)).length;
346
346
  }, [r, b]);
@@ -365,14 +365,14 @@ function It({
365
365
  }));
366
366
  T((A) => {
367
367
  const D = [...A.filter((P) => P.uid !== f), ...v];
368
- return c == null || c(D), D;
368
+ return d == null || d(D), D;
369
369
  });
370
370
  }
371
371
  function n(f) {
372
372
  var m;
373
373
  (m = N.current.get(f)) == null || m.scrollIntoView({ behavior: "smooth", block: "center" });
374
374
  }
375
- const o = $(() => {
375
+ const o = j(() => {
376
376
  if (!h) return [{ label: null, questions: r }];
377
377
  const f = h.map(
378
378
  (A) => ({
@@ -383,7 +383,7 @@ function It({
383
383
  return v.length > 0 && f.push({ label: null, questions: v }), f;
384
384
  }, [r, h]);
385
385
  let g = 0;
386
- return /* @__PURE__ */ t("div", { className: F("flex gap-3", y), style: d, children: [
386
+ return /* @__PURE__ */ t("div", { className: F("flex gap-3", y), style: c, children: [
387
387
  /* @__PURE__ */ t("div", { className: "flex-1 min-w-0", children: [
388
388
  o.map((f, m) => /* @__PURE__ */ t("div", { children: [
389
389
  f.label && /* @__PURE__ */ e("p", { className: F("text-lg font-semibold mb-2 text-foreground", m > 0 && "mt-4"), children: f.label }),
@@ -434,7 +434,7 @@ function It({
434
434
  ] }),
435
435
  p && /* @__PURE__ */ t(L, { className: "hidden md:block w-50 shrink-0 sticky top-4 self-start p-3", children: [
436
436
  /* @__PURE__ */ e("p", { className: "font-semibold text-sm mb-1 text-foreground", children: "Questions" }),
437
- /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-0.5", children: r.map((f, m) => {
437
+ /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-1", children: r.map((f, m) => {
438
438
  const v = b.some((k) => k.uid === f.uid), A = u === f.uid;
439
439
  return /* @__PURE__ */ e(
440
440
  "button",
@@ -456,8 +456,8 @@ function It({
456
456
  function gt(r) {
457
457
  const s = [...r];
458
458
  for (let a = s.length - 1; a > 0; a--) {
459
- const c = Math.floor(Math.random() * (a + 1));
460
- [s[a], s[c]] = [s[c], s[a]];
459
+ const d = Math.floor(Math.random() * (a + 1));
460
+ [s[a], s[d]] = [s[d], s[a]];
461
461
  }
462
462
  return s;
463
463
  }
@@ -465,17 +465,17 @@ function Ft({
465
465
  questions: r,
466
466
  instantFeedback: s = !0,
467
467
  allowRetry: a = !0,
468
- onComplete: c,
468
+ onComplete: d,
469
469
  shuffled: p = !1,
470
470
  readOnly: l = !1,
471
471
  className: h,
472
472
  style: i
473
473
  }) {
474
- const w = $(
474
+ const w = j(
475
475
  () => p ? gt(r) : r,
476
476
  // eslint-disable-next-line react-hooks/exhaustive-deps
477
477
  [r, p]
478
- ), [y, d] = I(0), [b, T] = I(/* @__PURE__ */ new Set()), [u, U] = I(/* @__PURE__ */ new Map()), [N, z] = I(/* @__PURE__ */ new Set()), [x, C] = I(null), [n, o] = I(!1), g = w[y], S = g ? b.has(g.uid) : !1;
478
+ ), [y, c] = I(0), [b, T] = I(/* @__PURE__ */ new Set()), [u, U] = I(/* @__PURE__ */ new Map()), [N, z] = I(/* @__PURE__ */ new Set()), [x, C] = I(null), [n, o] = I(!1), g = w[y], S = g ? b.has(g.uid) : !1;
479
479
  function f() {
480
480
  var O;
481
481
  if (!g || !x) return;
@@ -494,28 +494,28 @@ function Ft({
494
494
  }
495
495
  function v() {
496
496
  if (y < w.length - 1)
497
- d((k) => k + 1), C(null);
497
+ c((k) => k + 1), C(null);
498
498
  else {
499
499
  const k = {
500
500
  totalQuestions: w.length,
501
501
  correctOnFirstAttempt: N.size,
502
502
  totalAttempts: Array.from(u.values()).reduce((D, P) => D + P, 0)
503
503
  };
504
- o(!0), c == null || c(k);
504
+ o(!0), d == null || d(k);
505
505
  }
506
506
  }
507
- const A = $(() => {
507
+ const A = j(() => {
508
508
  var P;
509
509
  if (!g || !x) return !1;
510
510
  const k = new Set(
511
- ((P = g.answers) == null ? void 0 : P.filter((j) => j.isCorrect).map((j) => j.uid)) ?? []
512
- ), D = new Set(x.map((j) => j.uid));
513
- return k.size === D.size && [...k].every((j) => D.has(j));
511
+ ((P = g.answers) == null ? void 0 : P.filter(($) => $.isCorrect).map(($) => $.uid)) ?? []
512
+ ), D = new Set(x.map(($) => $.uid));
513
+ return k.size === D.size && [...k].every(($) => D.has($));
514
514
  }, [g, x]);
515
515
  if (n) {
516
516
  const k = w.length > 0 ? Math.round(N.size / w.length * 100) : 0;
517
517
  return /* @__PURE__ */ e(L, { className: h, style: i, children: /* @__PURE__ */ t(Q, { className: "pt-6 text-center", children: [
518
- /* @__PURE__ */ e(G, { size: 48, className: "text-success mx-auto mb-4" }),
518
+ /* @__PURE__ */ e(W, { size: 48, className: "text-success mx-auto mb-4" }),
519
519
  /* @__PURE__ */ e("p", { className: "text-xl font-bold mb-1 text-foreground", children: "Practice Complete!" }),
520
520
  /* @__PURE__ */ t("p", { className: "text-muted-foreground mb-2", children: [
521
521
  N.size,
@@ -530,7 +530,7 @@ function Ft({
530
530
  {
531
531
  variant: "outline",
532
532
  onClick: () => {
533
- d(0), T(/* @__PURE__ */ new Set()), U(/* @__PURE__ */ new Map()), z(/* @__PURE__ */ new Set()), C(null), o(!1);
533
+ c(0), T(/* @__PURE__ */ new Set()), U(/* @__PURE__ */ new Map()), z(/* @__PURE__ */ new Set()), C(null), o(!1);
534
534
  },
535
535
  children: "Practice Again"
536
536
  }
@@ -582,7 +582,7 @@ function Ft({
582
582
  onRetry: a && !A ? m : void 0
583
583
  }
584
584
  ),
585
- /* @__PURE__ */ t("div", { className: "flex justify-end gap-1 mt-2", children: [
585
+ /* @__PURE__ */ t("div", { className: "flex justify-end gap-2 mt-2", children: [
586
586
  !S && s && /* @__PURE__ */ e(
587
587
  R,
588
588
  {
@@ -607,14 +607,14 @@ function Lt({
607
607
  questions: r,
608
608
  initialAnswers: s = [],
609
609
  onSubmit: a,
610
- onAnswerChange: c,
610
+ onAnswerChange: d,
611
611
  timeLimitSeconds: p,
612
612
  timeElapsedSeconds: l,
613
613
  autoSubmitOnTimeout: h = !0,
614
614
  timeWarningThreshold: i = 300,
615
615
  allowBackNavigation: w = !0,
616
616
  confirmBeforeSubmit: y = !0,
617
- examTitle: d,
617
+ examTitle: c,
618
618
  instructions: b,
619
619
  isSubmitting: T = !1,
620
620
  readOnly: u = !1,
@@ -627,52 +627,52 @@ function Lt({
627
627
  }, [D, i]), ie(() => {
628
628
  h && D <= 0 && !A.current && (A.current = !0, re(!0));
629
629
  }, [D, h]);
630
- const P = $(
631
- () => r.map((M, _) => ({
630
+ const P = j(
631
+ () => r.map((M, E) => ({
632
632
  uid: M.uid,
633
- sequence: _ + 1,
633
+ sequence: E + 1,
634
634
  isFlagged: o.has(M.uid),
635
- isAnswered: C.some((E) => E.uid === M.uid),
635
+ isAnswered: C.some((_) => _.uid === M.uid),
636
636
  isSkipped: !1
637
637
  })),
638
638
  [r, C, o]
639
639
  );
640
- function j(M) {
640
+ function $(M) {
641
641
  if (!k) return;
642
- const _ = k.uid, E = M.map((H) => ({
643
- uid: _,
642
+ const E = k.uid, _ = M.map((H) => ({
643
+ uid: E,
644
644
  answerUid: H.uid,
645
645
  content: H.content
646
646
  }));
647
647
  n((H) => {
648
- const ce = [...H.filter((Pe) => Pe.uid !== _), ...E];
649
- return c == null || c(ce), ce;
648
+ const de = [...H.filter((Pe) => Pe.uid !== E), ..._];
649
+ return d == null || d(de), de;
650
650
  });
651
651
  }
652
652
  function O(M) {
653
- const _ = r.findIndex((E) => E.uid === M);
654
- _ !== -1 && x(_);
653
+ const E = r.findIndex((_) => _.uid === M);
654
+ E !== -1 && x(E);
655
655
  }
656
656
  function B(M) {
657
- g((_) => {
658
- const E = new Set(_);
659
- return E.has(M) ? E.delete(M) : E.add(M), E;
657
+ g((E) => {
658
+ const _ = new Set(E);
659
+ return _.has(M) ? _.delete(M) : _.add(M), _;
660
660
  });
661
661
  }
662
662
  function Re() {
663
663
  y ? f(!0) : re(!1);
664
664
  }
665
665
  function re(M) {
666
- const _ = new Set(C.map((H) => H.uid)), E = {
666
+ const E = new Set(C.map((H) => H.uid)), _ = {
667
667
  timeElapsedSeconds: l,
668
668
  wasAutoSubmitted: M,
669
- answeredCount: r.filter((H) => _.has(H.uid)).length,
669
+ answeredCount: r.filter((H) => E.has(H.uid)).length,
670
670
  totalQuestions: r.length
671
671
  };
672
- a(C, E);
672
+ a(C, _);
673
673
  }
674
674
  return /* @__PURE__ */ t("div", { className: F(U), style: N, children: [
675
- d && /* @__PURE__ */ e("p", { className: "text-xl font-bold mb-2 text-foreground", children: d }),
675
+ c && /* @__PURE__ */ e("p", { className: "text-xl font-bold mb-2 text-foreground", children: c }),
676
676
  m && D > 0 && D <= i && /* @__PURE__ */ e(ve, { variant: "warning", className: "mb-2", children: /* @__PURE__ */ t(we, { children: [
677
677
  Math.ceil(D / 60),
678
678
  " minute",
@@ -699,13 +699,13 @@ function Lt({
699
699
  readOnly: u
700
700
  }
701
701
  ),
702
- b && z === 0 && /* @__PURE__ */ e(L, { className: "mb-2", children: /* @__PURE__ */ e(Q, { className: "pt-6", children: b }) }),
702
+ b && z === 0 && /* @__PURE__ */ e(L, { className: "mt-3", children: /* @__PURE__ */ e(Q, { className: "pt-6", children: b }) }),
703
703
  k && /* @__PURE__ */ e(L, { className: "mt-3", children: /* @__PURE__ */ e(Q, { className: "pt-6", children: /* @__PURE__ */ e(
704
704
  X,
705
705
  {
706
706
  question: k,
707
707
  sessionAnswers: C.filter((M) => M.uid === k.uid),
708
- onAnswer: j,
708
+ onAnswer: $,
709
709
  readOnly: u
710
710
  }
711
711
  ) }) }),
@@ -731,18 +731,18 @@ function Mt({
731
731
  title: r,
732
732
  description: s,
733
733
  questions: a,
734
- initialAnswers: c = [],
734
+ initialAnswers: d = [],
735
735
  onSubmit: p,
736
736
  onAnswerChange: l,
737
737
  showProgress: h = !0,
738
738
  requireAll: i = !1,
739
739
  submitLabel: w = "Submit Survey",
740
740
  isSubmitting: y = !1,
741
- readOnly: d = !1,
741
+ readOnly: c = !1,
742
742
  className: b,
743
743
  style: T
744
744
  }) {
745
- const [u, U] = I(c), N = $(() => {
745
+ const [u, U] = I(d), N = j(() => {
746
746
  const n = new Set(u.map((o) => o.questionUid));
747
747
  return a.filter((o) => n.has(o.uid)).length;
748
748
  }, [a, u]), z = !i || N === a.length;
@@ -756,7 +756,7 @@ function Mt({
756
756
  return u.find((o) => o.questionUid === n);
757
757
  }
758
758
  return /* @__PURE__ */ t("div", { className: b, style: T, children: [
759
- /* @__PURE__ */ e("p", { className: "text-xl font-bold text-foreground mb-1", children: r }),
759
+ /* @__PURE__ */ e("p", { className: "text-xl font-bold text-foreground mb-2", children: r }),
760
760
  s && /* @__PURE__ */ e("div", { className: "mb-2 text-muted-foreground text-sm", children: typeof s == "string" ? /* @__PURE__ */ e("span", { children: s }) : s }),
761
761
  h && /* @__PURE__ */ t("div", { className: "mb-3", children: [
762
762
  /* @__PURE__ */ e(ne, { value: N / a.length * 100 }),
@@ -785,15 +785,15 @@ function Mt({
785
785
  points: n.scalePoints,
786
786
  lowLabel: (S = n.scaleLabels) == null ? void 0 : S.low,
787
787
  highLabel: (f = n.scaleLabels) == null ? void 0 : f.high,
788
- readOnly: d
788
+ readOnly: c
789
789
  }
790
790
  ),
791
791
  n.type === "rating" && /* @__PURE__ */ e(
792
- Ze,
792
+ Je,
793
793
  {
794
794
  value: g ? Number(g.value) : 0,
795
795
  onChange: (m) => x(n.uid, m),
796
- readOnly: d
796
+ readOnly: c
797
797
  }
798
798
  ),
799
799
  n.type === "open_text" && /* @__PURE__ */ e(
@@ -802,7 +802,7 @@ function Mt({
802
802
  placeholder: "Type your response...",
803
803
  value: (g == null ? void 0 : g.value) ?? "",
804
804
  onChange: (m) => x(n.uid, m.target.value),
805
- disabled: d,
805
+ disabled: c,
806
806
  className: "min-h-24"
807
807
  }
808
808
  ),
@@ -816,7 +816,7 @@ function Mt({
816
816
  value: m.uid,
817
817
  checked: (g == null ? void 0 : g.value) === m.uid,
818
818
  onChange: () => x(n.uid, m.uid),
819
- disabled: d
819
+ disabled: c
820
820
  }
821
821
  ),
822
822
  /* @__PURE__ */ e("span", { children: m.content })
@@ -830,12 +830,12 @@ function Mt({
830
830
  type: "checkbox",
831
831
  className: "accent-primary m-0 shrink-0",
832
832
  checked: v.includes(m.uid),
833
- disabled: d,
833
+ disabled: c,
834
834
  onChange: (A) => {
835
835
  const k = u.filter((P) => P.questionUid === n.uid);
836
836
  let D;
837
837
  A.target.checked ? D = [...k, { questionUid: n.uid, value: m.uid }] : D = k.filter((P) => String(P.value) !== m.uid), U((P) => [
838
- ...P.filter((j) => j.questionUid !== n.uid),
838
+ ...P.filter(($) => $.questionUid !== n.uid),
839
839
  ...D
840
840
  ]), l == null || l([
841
841
  ...u.filter((P) => P.questionUid !== n.uid),
@@ -849,7 +849,7 @@ function Mt({
849
849
  }) })
850
850
  ] }) }, n.uid);
851
851
  }),
852
- /* @__PURE__ */ t("div", { className: "flex justify-between items-center mt-2", children: [
852
+ /* @__PURE__ */ t("div", { className: "flex justify-between items-center mt-3", children: [
853
853
  /* @__PURE__ */ t("span", { className: "text-sm text-muted-foreground", children: [
854
854
  N,
855
855
  " of ",
@@ -860,7 +860,7 @@ function Mt({
860
860
  R,
861
861
  {
862
862
  onClick: () => p(u),
863
- disabled: !z || y || d,
863
+ disabled: !z || y || c,
864
864
  children: y ? "Submitting..." : w
865
865
  }
866
866
  )
@@ -871,23 +871,23 @@ function Rt({
871
871
  title: r,
872
872
  blocks: s,
873
873
  isCompleted: a = !1,
874
- onMarkComplete: c,
874
+ onMarkComplete: d,
875
875
  onNextLesson: p,
876
876
  nextLessonTitle: l,
877
877
  estimatedDuration: h,
878
878
  showDuration: i = !0,
879
879
  readOnly: w = !1,
880
880
  className: y,
881
- style: d
881
+ style: c
882
882
  }) {
883
883
  const [b, T] = I(a), [, u] = I(/* @__PURE__ */ new Map());
884
884
  function U(z, x) {
885
885
  u((C) => new Map(C).set(z, x));
886
886
  }
887
887
  function N() {
888
- T(!0), c == null || c();
888
+ T(!0), d == null || d();
889
889
  }
890
- return /* @__PURE__ */ t("div", { className: F(y), style: d, children: [
890
+ return /* @__PURE__ */ t("div", { className: F(y), style: c, children: [
891
891
  /* @__PURE__ */ t("div", { className: "mb-3", children: [
892
892
  /* @__PURE__ */ e("p", { className: "text-2xl font-bold mb-0.5 text-foreground", children: r }),
893
893
  i && h != null && /* @__PURE__ */ t("div", { className: "flex items-center gap-0.5 text-muted-foreground", children: [
@@ -897,7 +897,7 @@ function Rt({
897
897
  ] }),
898
898
  /* @__PURE__ */ e(V, { className: "mb-3" }),
899
899
  /* @__PURE__ */ e("div", { className: "flex flex-col gap-3", children: s.map((z, x) => /* @__PURE__ */ e(
900
- Je,
900
+ Ke,
901
901
  {
902
902
  block: z,
903
903
  onQuestionAnswer: U,
@@ -951,16 +951,16 @@ function Pt({
951
951
  resources: r,
952
952
  categories: s,
953
953
  onResourceClick: a,
954
- onDownload: c,
954
+ onDownload: d,
955
955
  viewMode: p = "list",
956
956
  allowViewToggle: l = !0,
957
957
  showSearch: h = !0,
958
958
  emptyMessage: i = "No resources found",
959
959
  readOnly: w = !1,
960
960
  className: y,
961
- style: d
961
+ style: c
962
962
  }) {
963
- const [b, T] = I(""), [u, U] = I(null), [N, z] = I(p), x = $(() => {
963
+ const [b, T] = I(""), [u, U] = I(null), [N, z] = I(p), x = j(() => {
964
964
  let n = r;
965
965
  if (u && (n = n.filter((o) => o.categoryUid === u)), b.trim()) {
966
966
  const o = b.toLowerCase();
@@ -993,35 +993,30 @@ function Pt({
993
993
  n.fileSize != null && pe(n.fileSize)
994
994
  ].filter(Boolean).join(" · ") })
995
995
  ] }),
996
- c && /* @__PURE__ */ t(Z, { children: [
997
- /* @__PURE__ */ e(
998
- J,
996
+ d && /* @__PURE__ */ t(J, { children: [
997
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ e(
998
+ R,
999
999
  {
1000
- render: /* @__PURE__ */ e(
1001
- R,
1002
- {
1003
- variant: "ghost",
1004
- size: "icon-xs",
1005
- "aria-label": "Download",
1006
- onClick: (g) => {
1007
- g.stopPropagation(), c(n);
1008
- },
1009
- children: /* @__PURE__ */ e(Te, { size: 16 })
1010
- }
1011
- )
1000
+ variant: "ghost",
1001
+ size: "icon-xs",
1002
+ "aria-label": "Download",
1003
+ onClick: (g) => {
1004
+ g.stopPropagation(), d(n);
1005
+ },
1006
+ children: /* @__PURE__ */ e(Te, { size: 16 })
1012
1007
  }
1013
- ),
1014
- /* @__PURE__ */ e(K, { children: "Download" })
1008
+ ) }),
1009
+ /* @__PURE__ */ e(Z, { children: "Download" })
1015
1010
  ] })
1016
1011
  ]
1017
1012
  },
1018
1013
  n.uid
1019
1014
  );
1020
1015
  }
1021
- return /* @__PURE__ */ t("div", { className: y, style: d, children: [
1016
+ return /* @__PURE__ */ t("div", { className: y, style: c, children: [
1022
1017
  /* @__PURE__ */ t("div", { className: "flex gap-2 items-center mb-2", children: [
1023
1018
  h && /* @__PURE__ */ e("div", { className: "flex-1 max-w-80", children: /* @__PURE__ */ e(
1024
- Ke,
1019
+ Ze,
1025
1020
  {
1026
1021
  value: b,
1027
1022
  onChange: T,
@@ -1030,43 +1025,33 @@ function Pt({
1030
1025
  }
1031
1026
  ) }),
1032
1027
  l && /* @__PURE__ */ t("div", { className: "flex gap-0.5", children: [
1033
- /* @__PURE__ */ t(Z, { children: [
1034
- /* @__PURE__ */ e(
1035
- J,
1028
+ /* @__PURE__ */ t(J, { children: [
1029
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ e(
1030
+ R,
1036
1031
  {
1037
- render: /* @__PURE__ */ e(
1038
- R,
1039
- {
1040
- variant: "ghost",
1041
- size: "icon-xs",
1042
- "aria-label": "List view",
1043
- className: F(N === "list" && "text-primary"),
1044
- onClick: () => z("list"),
1045
- children: /* @__PURE__ */ e(rt, { size: 18 })
1046
- }
1047
- )
1032
+ variant: "ghost",
1033
+ size: "icon-xs",
1034
+ "aria-label": "List view",
1035
+ className: F(N === "list" && "text-primary"),
1036
+ onClick: () => z("list"),
1037
+ children: /* @__PURE__ */ e(rt, { size: 18 })
1048
1038
  }
1049
- ),
1050
- /* @__PURE__ */ e(K, { children: "List view" })
1039
+ ) }),
1040
+ /* @__PURE__ */ e(Z, { children: "List view" })
1051
1041
  ] }),
1052
- /* @__PURE__ */ t(Z, { children: [
1053
- /* @__PURE__ */ e(
1054
- J,
1042
+ /* @__PURE__ */ t(J, { children: [
1043
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ e(
1044
+ R,
1055
1045
  {
1056
- render: /* @__PURE__ */ e(
1057
- R,
1058
- {
1059
- variant: "ghost",
1060
- size: "icon-xs",
1061
- "aria-label": "Grid view",
1062
- className: F(N === "grid" && "text-primary"),
1063
- onClick: () => z("grid"),
1064
- children: /* @__PURE__ */ e(st, { size: 18 })
1065
- }
1066
- )
1046
+ variant: "ghost",
1047
+ size: "icon-xs",
1048
+ "aria-label": "Grid view",
1049
+ className: F(N === "grid" && "text-primary"),
1050
+ onClick: () => z("grid"),
1051
+ children: /* @__PURE__ */ e(st, { size: 18 })
1067
1052
  }
1068
- ),
1069
- /* @__PURE__ */ e(K, { children: "Grid view" })
1053
+ ) }),
1054
+ /* @__PURE__ */ e(Z, { children: "Grid view" })
1070
1055
  ] })
1071
1056
  ] })
1072
1057
  ] }),
@@ -1077,8 +1062,8 @@ function Pt({
1077
1062
  onValueChange: (n) => U(n === "all" ? null : n),
1078
1063
  className: "mb-2",
1079
1064
  children: /* @__PURE__ */ t(ke, { children: [
1080
- /* @__PURE__ */ e(W, { value: "all", children: "All" }),
1081
- s.map((n) => /* @__PURE__ */ e(W, { value: n.uid, children: n.label }, n.uid))
1065
+ /* @__PURE__ */ e(G, { value: "all", children: "All" }),
1066
+ s.map((n) => /* @__PURE__ */ e(G, { value: n.uid, children: n.label }, n.uid))
1082
1067
  ] })
1083
1068
  }
1084
1069
  ),
@@ -1104,7 +1089,7 @@ function Pt({
1104
1089
  ] });
1105
1090
  }
1106
1091
  function bt(r) {
1107
- const s = new Date(r), c = (/* @__PURE__ */ new Date()).getTime() - s.getTime(), p = Math.floor(c / 6e4);
1092
+ const s = new Date(r), d = (/* @__PURE__ */ new Date()).getTime() - s.getTime(), p = Math.floor(d / 6e4);
1108
1093
  if (p < 1) return "Just now";
1109
1094
  if (p < 60) return `${p}m ago`;
1110
1095
  const l = Math.floor(p / 60);
@@ -1116,19 +1101,19 @@ function Qt({
1116
1101
  announcements: r,
1117
1102
  onMarkRead: s,
1118
1103
  onSelect: a,
1119
- showAvatars: c = !0,
1104
+ showAvatars: d = !0,
1120
1105
  previewLines: p = 3,
1121
1106
  emptyMessage: l = "No announcements yet",
1122
1107
  readOnly: h = !1,
1123
1108
  className: i,
1124
1109
  style: w
1125
1110
  }) {
1126
- const [y, d] = I(/* @__PURE__ */ new Set()), b = $(() => {
1111
+ const [y, c] = I(/* @__PURE__ */ new Set()), b = j(() => {
1127
1112
  const u = r.filter((N) => N.isPinned), U = r.filter((N) => !N.isPinned);
1128
1113
  return [...u, ...U];
1129
1114
  }, [r]);
1130
1115
  function T(u) {
1131
- d((N) => {
1116
+ c((N) => {
1132
1117
  const z = new Set(N);
1133
1118
  return z.has(u) ? z.delete(u) : z.add(u), z;
1134
1119
  });
@@ -1147,8 +1132,8 @@ function Qt({
1147
1132
  ),
1148
1133
  onClick: () => a && !h ? a(u) : T(u.uid),
1149
1134
  children: /* @__PURE__ */ e(Q, { className: "pt-4 pb-4", children: /* @__PURE__ */ t("div", { className: "flex gap-1.5 items-start", children: [
1150
- c && /* @__PURE__ */ e(
1151
- We,
1135
+ d && /* @__PURE__ */ e(
1136
+ Ge,
1152
1137
  {
1153
1138
  displayName: u.author.displayName,
1154
1139
  avatarUrl: u.author.avatarUrl,
@@ -1207,18 +1192,18 @@ function Bt({
1207
1192
  title: r,
1208
1193
  rootPost: s,
1209
1194
  replies: a,
1210
- currentUser: c,
1195
+ currentUser: d,
1211
1196
  onReply: p,
1212
1197
  onToggleLike: l,
1213
1198
  onMarkAnswer: h,
1214
1199
  maxDepth: i = 3,
1215
1200
  allowReplies: w = !0,
1216
1201
  sortOrder: y = "oldest",
1217
- readOnly: d = !1,
1202
+ readOnly: c = !1,
1218
1203
  className: b,
1219
1204
  style: T
1220
1205
  }) {
1221
- const [u, U] = I(null), [N, z] = I(""), x = $(() => {
1206
+ const [u, U] = I(null), [N, z] = I(""), x = j(() => {
1222
1207
  const o = /* @__PURE__ */ new Map();
1223
1208
  for (const g of a) {
1224
1209
  const S = g.parentUid ?? s.uid, f = o.get(S) ?? [];
@@ -1233,70 +1218,55 @@ function Bt({
1233
1218
  }
1234
1219
  function n(o, g) {
1235
1220
  const S = x.get(o.uid) ?? [], f = Math.min(g, i), m = /* @__PURE__ */ t("div", { className: "flex items-center gap-1", children: [
1236
- l && !d && /* @__PURE__ */ t(Z, { children: [
1237
- /* @__PURE__ */ e(
1238
- J,
1221
+ l && !c && /* @__PURE__ */ t(J, { children: [
1222
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ t(
1223
+ R,
1239
1224
  {
1240
- render: /* @__PURE__ */ t(
1241
- R,
1242
- {
1243
- variant: "ghost",
1244
- size: "sm",
1245
- "aria-label": o.isLikedByCurrentUser ? "Unlike" : "Like",
1246
- className: F(o.isLikedByCurrentUser && "text-destructive"),
1247
- onClick: () => l(o.uid),
1248
- children: [
1249
- /* @__PURE__ */ e(it, { size: 14, fill: o.isLikedByCurrentUser ? "currentColor" : "none" }),
1250
- o.likeCount > 0 ? o.likeCount : "Like"
1251
- ]
1252
- }
1253
- )
1225
+ variant: "ghost",
1226
+ size: "sm",
1227
+ "aria-label": o.isLikedByCurrentUser ? "Unlike" : "Like",
1228
+ className: F(o.isLikedByCurrentUser && "text-destructive"),
1229
+ onClick: () => l(o.uid),
1230
+ children: [
1231
+ /* @__PURE__ */ e(it, { size: 14, fill: o.isLikedByCurrentUser ? "currentColor" : "none" }),
1232
+ o.likeCount > 0 ? o.likeCount : "Like"
1233
+ ]
1254
1234
  }
1255
- ),
1256
- /* @__PURE__ */ e(K, { children: o.isLikedByCurrentUser ? "Unlike" : "Like" })
1235
+ ) }),
1236
+ /* @__PURE__ */ e(Z, { children: o.isLikedByCurrentUser ? "Unlike" : "Like" })
1257
1237
  ] }),
1258
- w && !d && /* @__PURE__ */ t(Z, { children: [
1259
- /* @__PURE__ */ e(
1260
- J,
1238
+ w && !c && /* @__PURE__ */ t(J, { children: [
1239
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ t(
1240
+ R,
1261
1241
  {
1262
- render: /* @__PURE__ */ t(
1263
- R,
1264
- {
1265
- variant: "ghost",
1266
- size: "sm",
1267
- "aria-label": "Reply",
1268
- onClick: () => U(o.uid),
1269
- children: [
1270
- /* @__PURE__ */ e(dt, { size: 14 }),
1271
- "Reply"
1272
- ]
1273
- }
1274
- )
1242
+ variant: "ghost",
1243
+ size: "sm",
1244
+ "aria-label": "Reply",
1245
+ onClick: () => U(o.uid),
1246
+ children: [
1247
+ /* @__PURE__ */ e(ct, { size: 14 }),
1248
+ "Reply"
1249
+ ]
1275
1250
  }
1276
- ),
1277
- /* @__PURE__ */ e(K, { children: "Reply" })
1251
+ ) }),
1252
+ /* @__PURE__ */ e(Z, { children: "Reply" })
1278
1253
  ] }),
1279
- h && !d && c.role !== "student" && !o.isAnswer && /* @__PURE__ */ t(Z, { children: [
1280
- /* @__PURE__ */ e(
1281
- J,
1254
+ h && !c && d.role !== "student" && !o.isAnswer && /* @__PURE__ */ t(J, { children: [
1255
+ /* @__PURE__ */ e(K, { children: /* @__PURE__ */ t(
1256
+ R,
1282
1257
  {
1283
- render: /* @__PURE__ */ t(
1284
- R,
1285
- {
1286
- variant: "ghost",
1287
- size: "sm",
1288
- "aria-label": "Mark as answer",
1289
- className: "text-success",
1290
- onClick: () => h(o.uid),
1291
- children: [
1292
- /* @__PURE__ */ e(G, { size: 14 }),
1293
- "Mark Answer"
1294
- ]
1295
- }
1296
- )
1258
+ variant: "ghost",
1259
+ size: "sm",
1260
+ "aria-label": "Mark as answer",
1261
+ className: "text-success",
1262
+ onClick: () => h(o.uid),
1263
+ children: [
1264
+ /* @__PURE__ */ e(W, { size: 14 }),
1265
+ "Mark Answer"
1266
+ ]
1297
1267
  }
1298
- ),
1299
- /* @__PURE__ */ e(K, { children: "Mark as answer" })
1268
+ ) }),
1269
+ /* @__PURE__ */ e(Z, { children: "Mark as answer" })
1300
1270
  ] })
1301
1271
  ] });
1302
1272
  return /* @__PURE__ */ t("div", { children: [
@@ -1310,25 +1280,25 @@ function Bt({
1310
1280
  actions: m,
1311
1281
  highlight: o.isAnswer ? "answer" : "none",
1312
1282
  indentLevel: f,
1313
- className: "mb-1"
1283
+ className: "mb-2"
1314
1284
  }
1315
1285
  ),
1316
1286
  u === o.uid && /* @__PURE__ */ e(
1317
1287
  L,
1318
1288
  {
1319
- className: "mb-1",
1289
+ className: "mb-2",
1320
1290
  style: { marginLeft: `${(f + 1) * 16}px` },
1321
1291
  children: /* @__PURE__ */ t(Q, { className: "pt-4 pb-4", children: [
1322
1292
  /* @__PURE__ */ e(
1323
1293
  te,
1324
1294
  {
1325
- className: "min-h-15 mb-1",
1295
+ className: "min-h-15 mb-2",
1326
1296
  placeholder: "Write a reply...",
1327
1297
  value: N,
1328
1298
  onChange: (v) => z(v.target.value)
1329
1299
  }
1330
1300
  ),
1331
- /* @__PURE__ */ t("div", { className: "flex items-center gap-1", children: [
1301
+ /* @__PURE__ */ t("div", { className: "flex items-center gap-2", children: [
1332
1302
  /* @__PURE__ */ e(
1333
1303
  R,
1334
1304
  {
@@ -1370,18 +1340,18 @@ function Bt({
1370
1340
  n(s, 0)
1371
1341
  ] });
1372
1342
  }
1373
- function $t({
1343
+ function jt({
1374
1344
  title: r,
1375
1345
  instructions: s,
1376
1346
  dueDate: a,
1377
- maxScore: c,
1347
+ maxScore: d,
1378
1348
  status: p,
1379
1349
  submissionTypes: l,
1380
1350
  existingSubmission: h,
1381
1351
  fileConstraints: i,
1382
1352
  onSubmit: w,
1383
1353
  onSaveDraft: y,
1384
- grade: d,
1354
+ grade: c,
1385
1355
  isSubmitting: b = !1,
1386
1356
  readOnly: T = !1,
1387
1357
  className: u,
@@ -1401,8 +1371,8 @@ function $t({
1401
1371
  /* @__PURE__ */ t("div", { className: "flex items-center gap-2", children: [
1402
1372
  /* @__PURE__ */ e(Ce, { status: p }),
1403
1373
  a && /* @__PURE__ */ e(Ue, { dueDate: a, size: "small" }),
1404
- c != null && /* @__PURE__ */ t("span", { className: "text-sm text-muted-foreground", children: [
1405
- c,
1374
+ d != null && /* @__PURE__ */ t("span", { className: "text-sm text-muted-foreground", children: [
1375
+ d,
1406
1376
  " points"
1407
1377
  ] })
1408
1378
  ] })
@@ -1411,20 +1381,20 @@ function $t({
1411
1381
  /* @__PURE__ */ e("div", { className: "font-semibold text-sm text-foreground mb-1", children: "Instructions" }),
1412
1382
  /* @__PURE__ */ e("div", { className: "text-muted-foreground text-sm", children: typeof s == "string" ? /* @__PURE__ */ e("span", { children: s }) : s })
1413
1383
  ] }) }),
1414
- d && /* @__PURE__ */ e(ve, { variant: "success", className: "mb-3", children: /* @__PURE__ */ t(we, { children: [
1384
+ c && /* @__PURE__ */ e(ve, { variant: "success", className: "mb-3", children: /* @__PURE__ */ t(we, { children: [
1415
1385
  /* @__PURE__ */ t("div", { className: "font-semibold text-sm mb-1", children: [
1416
1386
  "Grade: ",
1417
- d.score,
1418
- c != null ? ` / ${c}` : ""
1387
+ c.score,
1388
+ d != null ? ` / ${d}` : ""
1419
1389
  ] }),
1420
- d.feedback && /* @__PURE__ */ e("div", { children: d.feedback })
1390
+ c.feedback && /* @__PURE__ */ e("div", { children: c.feedback })
1421
1391
  ] }) }),
1422
1392
  f && /* @__PURE__ */ t(ee, { children: [
1423
1393
  l.length > 1 ? /* @__PURE__ */ t(Se, { value: g, onValueChange: (v) => S(v), children: [
1424
1394
  /* @__PURE__ */ t(ke, { children: [
1425
- l.includes("text") && /* @__PURE__ */ e(W, { value: "text", children: "Text" }),
1426
- l.includes("file") && /* @__PURE__ */ e(W, { value: "file", children: "File Upload" }),
1427
- l.includes("url") && /* @__PURE__ */ e(W, { value: "url", children: "URL" })
1395
+ l.includes("text") && /* @__PURE__ */ e(G, { value: "text", children: "Text" }),
1396
+ l.includes("file") && /* @__PURE__ */ e(G, { value: "file", children: "File Upload" }),
1397
+ l.includes("url") && /* @__PURE__ */ e(G, { value: "url", children: "URL" })
1428
1398
  ] }),
1429
1399
  l.includes("text") && /* @__PURE__ */ e(se, { value: "text", children: /* @__PURE__ */ e(
1430
1400
  te,
@@ -1486,7 +1456,7 @@ function $t({
1486
1456
  )
1487
1457
  ] }),
1488
1458
  /* @__PURE__ */ e(V, { className: "my-2" }),
1489
- /* @__PURE__ */ t("div", { className: "flex gap-1 justify-end", children: [
1459
+ /* @__PURE__ */ t("div", { className: "flex gap-2 justify-end", children: [
1490
1460
  y && /* @__PURE__ */ t(
1491
1461
  R,
1492
1462
  {
@@ -1494,7 +1464,7 @@ function $t({
1494
1464
  onClick: () => y(m()),
1495
1465
  disabled: b,
1496
1466
  children: [
1497
- /* @__PURE__ */ e(ct, { size: 16 }),
1467
+ /* @__PURE__ */ e(dt, { size: 16 }),
1498
1468
  "Save Draft"
1499
1469
  ]
1500
1470
  }
@@ -1518,7 +1488,7 @@ function q({
1518
1488
  label: r,
1519
1489
  field: s,
1520
1490
  sortField: a,
1521
- sortDir: c,
1491
+ sortDir: d,
1522
1492
  onSort: p,
1523
1493
  textAlign: l
1524
1494
  }) {
@@ -1533,27 +1503,27 @@ function q({
1533
1503
  onClick: () => p(s),
1534
1504
  children: /* @__PURE__ */ t("div", { className: F("flex items-center gap-1", l === "right" && "justify-end"), children: [
1535
1505
  /* @__PURE__ */ e("span", { className: F(h ? "text-foreground" : "text-muted-foreground"), children: r }),
1536
- h && (c === "asc" ? /* @__PURE__ */ e(ot, { size: 14 }) : /* @__PURE__ */ e(ut, { size: 14 }))
1506
+ h && (d === "asc" ? /* @__PURE__ */ e(ot, { size: 14 }) : /* @__PURE__ */ e(ut, { size: 14 }))
1537
1507
  ] })
1538
1508
  }
1539
1509
  );
1540
1510
  }
1541
- function jt({
1511
+ function $t({
1542
1512
  items: r,
1543
1513
  categories: s,
1544
1514
  overallGrade: a,
1545
- showWeights: c = !0,
1515
+ showWeights: d = !0,
1546
1516
  showCategoryTotals: p = !0,
1547
1517
  onItemClick: l,
1548
1518
  readOnly: h = !1,
1549
1519
  className: i,
1550
1520
  style: w
1551
1521
  }) {
1552
- const [y, d] = I("dueDate"), [b, T] = I("asc");
1522
+ const [y, c] = I("dueDate"), [b, T] = I("asc");
1553
1523
  function u(x) {
1554
- y === x ? T((C) => C === "asc" ? "desc" : "asc") : (d(x), T("asc"));
1524
+ y === x ? T((C) => C === "asc" ? "desc" : "asc") : (c(x), T("asc"));
1555
1525
  }
1556
- const U = $(() => {
1526
+ const U = j(() => {
1557
1527
  const x = [...r];
1558
1528
  return x.sort((C, n) => {
1559
1529
  let o = 0;
@@ -1573,18 +1543,18 @@ function jt({
1573
1543
  }
1574
1544
  return b === "asc" ? o : -o;
1575
1545
  }), x;
1576
- }, [r, y, b]), N = $(() => {
1546
+ }, [r, y, b]), N = j(() => {
1577
1547
  if (!s || s.length === 0) return [{ category: null, items: U }];
1578
1548
  const x = s.map((n) => ({
1579
1549
  category: n,
1580
1550
  items: U.filter((o) => o.categoryUid === n.uid)
1581
1551
  })), C = U.filter((n) => !n.categoryUid);
1582
1552
  return C.length > 0 && x.push({ category: null, items: C }), x;
1583
- }, [U, s]), z = c ? 5 : 4;
1553
+ }, [U, s]), z = d ? 5 : 4;
1584
1554
  return /* @__PURE__ */ t("div", { className: i, style: w, children: [
1585
1555
  a && /* @__PURE__ */ e(L, { className: "mb-3", children: /* @__PURE__ */ e(Q, { className: "pt-6", children: /* @__PURE__ */ t("div", { className: "flex items-center gap-3", children: [
1586
1556
  /* @__PURE__ */ e(
1587
- Ge,
1557
+ We,
1588
1558
  {
1589
1559
  percentage: a.percentage,
1590
1560
  letterGrade: a.letterGrade,
@@ -1645,7 +1615,7 @@ function jt({
1645
1615
  textAlign: "right"
1646
1616
  }
1647
1617
  ),
1648
- c && /* @__PURE__ */ e(Ae, { className: "text-right text-muted-foreground", children: "Weight" })
1618
+ d && /* @__PURE__ */ e(Ae, { className: "text-right text-muted-foreground", children: "Weight" })
1649
1619
  ] }) }),
1650
1620
  /* @__PURE__ */ e(et, { children: N.map((x, C) => /* @__PURE__ */ t(Be, { children: [
1651
1621
  x.category && p && /* @__PURE__ */ e(le, { className: "bg-muted hover:bg-muted", children: /* @__PURE__ */ e(Y, { colSpan: z, children: /* @__PURE__ */ t("span", { className: "font-semibold text-sm text-foreground", children: [
@@ -1673,7 +1643,7 @@ function jt({
1673
1643
  " / ",
1674
1644
  n.maxScore
1675
1645
  ] }) : n.status === "excused" ? /* @__PURE__ */ e("span", { className: "text-sm text-muted-foreground", children: "Excused" }) : /* @__PURE__ */ e("span", { className: "text-sm text-muted-foreground", children: "—" }) }),
1676
- c && /* @__PURE__ */ e(Y, { className: "text-right", children: n.weight != null ? `${n.weight}%` : "—" })
1646
+ d && /* @__PURE__ */ e(Y, { className: "text-right", children: n.weight != null ? `${n.weight}%` : "—" })
1677
1647
  ]
1678
1648
  },
1679
1649
  n.uid
@@ -1684,15 +1654,15 @@ function jt({
1684
1654
  }
1685
1655
  const Nt = {
1686
1656
  lesson_completed: Fe,
1687
- quiz_passed: G,
1657
+ quiz_passed: W,
1688
1658
  assignment_submitted: Ie,
1689
1659
  badge_earned: Le
1690
1660
  };
1691
- function Et({
1661
+ function _t({
1692
1662
  overallProgress: r,
1693
1663
  totalTimeSpent: s,
1694
1664
  modules: a,
1695
- recentActivity: c,
1665
+ recentActivity: d,
1696
1666
  streak: p,
1697
1667
  achievements: l,
1698
1668
  recentActivityLimit: h = 5,
@@ -1725,14 +1695,14 @@ function Et({
1725
1695
  {
1726
1696
  icon: /* @__PURE__ */ e(Fe, { size: 24 }),
1727
1697
  label: "Modules",
1728
- value: `${a.filter((d) => d.completedItems === d.totalItems).length} / ${a.length}`,
1698
+ value: `${a.filter((c) => c.completedItems === c.totalItems).length} / ${a.length}`,
1729
1699
  subtitle: "completed"
1730
1700
  }
1731
1701
  )
1732
1702
  ] }),
1733
1703
  /* @__PURE__ */ e("p", { className: "text-lg font-semibold mb-2 text-foreground", children: "Module Progress" }),
1734
- /* @__PURE__ */ e("div", { className: "flex flex-col gap-1.5 mb-3", children: a.map((d) => {
1735
- const b = d.totalItems > 0 ? d.completedItems / d.totalItems * 100 : 0;
1704
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-2 mb-3", children: a.map((c) => {
1705
+ const b = c.totalItems > 0 ? c.completedItems / c.totalItems * 100 : 0;
1736
1706
  return /* @__PURE__ */ t(
1737
1707
  L,
1738
1708
  {
@@ -1740,47 +1710,47 @@ function Et({
1740
1710
  "p-2 transition-colors",
1741
1711
  i && "cursor-pointer hover:border-primary"
1742
1712
  ),
1743
- onClick: () => i == null ? void 0 : i(d.uid),
1713
+ onClick: () => i == null ? void 0 : i(c.uid),
1744
1714
  children: [
1745
1715
  /* @__PURE__ */ t("div", { className: "flex justify-between items-center mb-0.5", children: [
1746
- /* @__PURE__ */ e("span", { className: "font-semibold text-sm text-foreground", children: d.name }),
1716
+ /* @__PURE__ */ e("span", { className: "font-semibold text-sm text-foreground", children: c.name }),
1747
1717
  /* @__PURE__ */ t("span", { className: "text-xs text-muted-foreground", children: [
1748
- d.completedItems,
1718
+ c.completedItems,
1749
1719
  " / ",
1750
- d.totalItems
1720
+ c.totalItems
1751
1721
  ] })
1752
1722
  ] }),
1753
1723
  /* @__PURE__ */ e(ne, { value: b, size: "sm" })
1754
1724
  ]
1755
1725
  },
1756
- d.uid
1726
+ c.uid
1757
1727
  );
1758
1728
  }) }),
1759
- c && c.length > 0 && /* @__PURE__ */ t(ee, { children: [
1729
+ d && d.length > 0 && /* @__PURE__ */ t(ee, { children: [
1760
1730
  /* @__PURE__ */ e("p", { className: "text-lg font-semibold mb-2 text-foreground", children: "Recent Activity" }),
1761
- /* @__PURE__ */ e("div", { className: "flex flex-col gap-1 mb-3", children: c.slice(0, h).map((d) => {
1762
- const b = Nt[d.type] ?? G;
1731
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-1.5 mb-3", children: d.slice(0, h).map((c) => {
1732
+ const b = Nt[c.type] ?? W;
1763
1733
  return /* @__PURE__ */ t("div", { className: "flex gap-1.5 items-center", children: [
1764
1734
  /* @__PURE__ */ e(b, { size: 16 }),
1765
- /* @__PURE__ */ e("span", { className: "flex-1 text-sm text-foreground", children: d.description }),
1766
- /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: new Date(d.timestamp).toLocaleDateString() })
1767
- ] }, d.uid);
1735
+ /* @__PURE__ */ e("span", { className: "flex-1 text-sm text-foreground", children: c.description }),
1736
+ /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: new Date(c.timestamp).toLocaleDateString() })
1737
+ ] }, c.uid);
1768
1738
  }) })
1769
1739
  ] }),
1770
1740
  l && l.length > 0 && /* @__PURE__ */ t(ee, { children: [
1771
1741
  /* @__PURE__ */ e("p", { className: "text-lg font-semibold mb-2 text-foreground", children: "Achievements" }),
1772
- /* @__PURE__ */ e("div", { className: "grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] gap-2", children: l.map((d) => /* @__PURE__ */ t(L, { className: "p-2 text-center", children: [
1773
- d.iconUrl ? /* @__PURE__ */ e(
1742
+ /* @__PURE__ */ e("div", { className: "grid grid-cols-[repeat(auto-fill,minmax(140px,1fr))] gap-2", children: l.map((c) => /* @__PURE__ */ t(L, { className: "p-2 text-center", children: [
1743
+ c.iconUrl ? /* @__PURE__ */ e(
1774
1744
  "img",
1775
1745
  {
1776
- src: d.iconUrl,
1777
- alt: d.name,
1746
+ src: c.iconUrl,
1747
+ alt: c.name,
1778
1748
  className: "w-12 h-12 mb-1 mx-auto"
1779
1749
  }
1780
1750
  ) : /* @__PURE__ */ e(ht, { size: 32, className: "mx-auto mb-2 text-warning" }),
1781
- /* @__PURE__ */ e("p", { className: "font-semibold text-sm text-foreground", children: d.name }),
1782
- /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: d.description })
1783
- ] }, d.uid)) })
1751
+ /* @__PURE__ */ e("p", { className: "font-semibold text-sm text-foreground", children: c.name }),
1752
+ /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground", children: c.description })
1753
+ ] }, c.uid)) })
1784
1754
  ] })
1785
1755
  ] });
1786
1756
  }
@@ -1789,18 +1759,18 @@ const vt = {
1789
1759
  modern: "border border-primary bg-linear-to-br from-[#fff5f5] to-[#fee2e2]",
1790
1760
  minimal: "border border-border"
1791
1761
  };
1792
- function _t({
1762
+ function Et({
1793
1763
  recipientName: r,
1794
1764
  courseTitle: s,
1795
1765
  completionDate: a,
1796
- organizationName: c,
1766
+ organizationName: d,
1797
1767
  organizationLogo: p,
1798
1768
  signatory: l,
1799
1769
  certificateId: h,
1800
1770
  variant: i = "classic",
1801
1771
  showActions: w = !0,
1802
1772
  onPrint: y,
1803
- onDownload: d,
1773
+ onDownload: c,
1804
1774
  className: b,
1805
1775
  style: T
1806
1776
  }) {
@@ -1831,7 +1801,7 @@ function _t({
1831
1801
  "img",
1832
1802
  {
1833
1803
  src: p,
1834
- alt: c,
1804
+ alt: d,
1835
1805
  className: "h-15 mb-2 mx-auto block"
1836
1806
  }
1837
1807
  ) : /* @__PURE__ */ e(
@@ -1849,7 +1819,7 @@ function _t({
1849
1819
  /* @__PURE__ */ e("p", { className: "text-xl font-bold mb-2 text-primary", children: s }),
1850
1820
  /* @__PURE__ */ t("p", { className: "text-sm text-foreground mb-3", children: [
1851
1821
  "Issued by ",
1852
- c,
1822
+ d,
1853
1823
  " on ",
1854
1824
  u
1855
1825
  ] }),
@@ -1870,7 +1840,7 @@ function _t({
1870
1840
  /* @__PURE__ */ e(ft, { size: 16 }),
1871
1841
  " Print"
1872
1842
  ] }),
1873
- d && /* @__PURE__ */ t(R, { variant: "outline", onClick: d, children: [
1843
+ c && /* @__PURE__ */ t(R, { variant: "outline", onClick: c, children: [
1874
1844
  /* @__PURE__ */ e(Te, { size: 16 }),
1875
1845
  " Download"
1876
1846
  ] })
@@ -1880,17 +1850,17 @@ function _t({
1880
1850
  export {
1881
1851
  Qt as AnnouncementFeed,
1882
1852
  Dt as AssessmentReview,
1883
- $t as AssignmentSubmission,
1884
- _t as CertificateViewer,
1853
+ jt as AssignmentSubmission,
1854
+ Et as CertificateViewer,
1885
1855
  Tt as CourseOutline,
1886
1856
  Bt as DiscussionThread,
1887
1857
  Lt as ExamSession,
1888
1858
  At as FlashcardStudySession,
1889
- jt as GradebookTable,
1859
+ $t as GradebookTable,
1890
1860
  Ut as LecturePlayer,
1891
1861
  Rt as LessonPage,
1892
1862
  Ft as PracticeQuiz,
1893
- Et as ProgressDashboard,
1863
+ _t as ProgressDashboard,
1894
1864
  Ct as QuizSession,
1895
1865
  Pt as ResourceLibrary,
1896
1866
  It as ScrollableQuiz,