@hydralms/components 0.1.2 → 0.2.0

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 (199) hide show
  1. package/dist/ForumBoard-CHXU3mjC.js +2207 -0
  2. package/dist/ForumBoard-d1w5-r6n.cjs +1 -0
  3. package/dist/assessment-toolbar/assessment-toolbar.d.ts +1 -1
  4. package/dist/assessment-toolbar/index.d.ts +5 -1
  5. package/dist/assessment-toolbar/question-header-bar.d.ts +2 -0
  6. package/dist/assessment-toolbar/question-materials-drawer.d.ts +2 -0
  7. package/dist/assessment-toolbar/question-navigator.d.ts +1 -1
  8. package/dist/assessment-toolbar/types.d.ts +52 -4
  9. package/dist/assessment-toolbar/use-countdown.d.ts +43 -0
  10. package/dist/common/index.d.ts +2 -1
  11. package/dist/common/stepper.d.ts +6 -0
  12. package/dist/common/types.d.ts +37 -0
  13. package/dist/components.css +1 -1
  14. package/dist/content/attachment-list.d.ts +6 -0
  15. package/dist/content/content-block.d.ts +1 -1
  16. package/dist/content/index.d.ts +2 -1
  17. package/dist/content/types.d.ts +39 -0
  18. package/dist/curriculum/curriculum-item.d.ts +1 -1
  19. package/dist/index.cjs +1 -1
  20. package/dist/index.js +551 -312
  21. package/dist/modules/AssignmentModule/AssignmentModule.d.ts +8 -0
  22. package/dist/modules/AssignmentModule/types.d.ts +65 -0
  23. package/dist/modules/CertificateModule/CertificateModule.d.ts +9 -0
  24. package/dist/modules/CertificateModule/types.d.ts +49 -0
  25. package/dist/modules/DiscussionModule/DiscussionModule.d.ts +8 -0
  26. package/dist/modules/DiscussionModule/types.d.ts +47 -0
  27. package/dist/modules/ExamModule/ExamModule.d.ts +8 -0
  28. package/dist/modules/ExamModule/types.d.ts +64 -0
  29. package/dist/modules/GradeCenterModule/GradeCenterModule.d.ts +9 -0
  30. package/dist/modules/GradeCenterModule/types.d.ts +54 -0
  31. package/dist/modules/QuizModule/QuizModule.d.ts +1 -1
  32. package/dist/modules/QuizModule/types.d.ts +6 -1
  33. package/dist/modules/SurveyModule/SurveyModule.d.ts +7 -0
  34. package/dist/modules/SurveyModule/types.d.ts +49 -0
  35. package/dist/modules/index.d.ts +12 -0
  36. package/dist/modules.cjs +1 -0
  37. package/dist/modules.js +1422 -0
  38. package/dist/progress/achievement-badge.d.ts +6 -0
  39. package/dist/progress/activity-timeline.d.ts +6 -0
  40. package/dist/progress/index.d.ts +4 -1
  41. package/dist/progress/stat-card.d.ts +1 -1
  42. package/dist/progress/streak-badge.d.ts +6 -0
  43. package/dist/progress/types.d.ts +97 -0
  44. package/dist/questions/essay.d.ts +1 -1
  45. package/dist/questions/hotspot.d.ts +21 -0
  46. package/dist/questions/index.d.ts +9 -1
  47. package/dist/questions/inline-choice.d.ts +21 -0
  48. package/dist/questions/matching.d.ts +22 -0
  49. package/dist/questions/numeric.d.ts +11 -0
  50. package/dist/questions/ordering.d.ts +12 -0
  51. package/dist/questions/scenario.d.ts +23 -0
  52. package/dist/questions/scoring.d.ts +22 -0
  53. package/dist/questions/spreadsheet.d.ts +29 -0
  54. package/dist/questions/types.d.ts +106 -1
  55. package/dist/questions/use-drag-reorder.d.ts +17 -0
  56. package/dist/sections/CertificateViewer/types.d.ts +7 -5
  57. package/dist/sections/ExamSession/ExamSession.d.ts +1 -1
  58. package/dist/sections/ExamSession/types.d.ts +6 -1
  59. package/dist/sections/ForumBoard/ForumBoard.d.ts +8 -0
  60. package/dist/sections/ForumBoard/types.d.ts +64 -0
  61. package/dist/sections/QuizSession/QuizSession.d.ts +1 -1
  62. package/dist/sections/QuizSession/types.d.ts +6 -1
  63. package/dist/sections/RequirementsChecklist/RequirementsChecklist.d.ts +8 -0
  64. package/dist/sections/RequirementsChecklist/types.d.ts +37 -0
  65. package/dist/sections/RubricView/RubricView.d.ts +9 -0
  66. package/dist/sections/RubricView/types.d.ts +50 -0
  67. package/dist/sections/index.d.ts +7 -1
  68. package/dist/sections.cjs +1 -1
  69. package/dist/sections.js +250 -1715
  70. package/dist/social/post-card.d.ts +1 -1
  71. package/dist/tabs-DRM2Iq_J.cjs +172 -0
  72. package/dist/tabs-Wf3h_Cx3.js +21580 -0
  73. package/dist/ui/alert.d.ts +1 -1
  74. package/dist/ui/badge.d.ts +1 -1
  75. package/dist/ui/button.d.ts +1 -1
  76. package/dist/ui/drawer.d.ts +84 -0
  77. package/dist/ui/index.d.ts +3 -0
  78. package/dist/ui/progress.d.ts +1 -1
  79. package/dist/ui/rich-text-editor.d.ts +30 -0
  80. package/dist/ui/rich-text-toolbar.d.ts +8 -0
  81. package/dist/utils/array-utils.d.ts +4 -0
  82. package/dist/utils/flatten-leaves.d.ts +6 -0
  83. package/dist/utils/format-file-size.d.ts +1 -0
  84. package/dist/utils/format-timestamp.d.ts +1 -0
  85. package/dist/utils/is-empty-html.d.ts +5 -0
  86. package/dist/utils/shuffle.d.ts +1 -0
  87. package/dist/utils/string-utils.d.ts +12 -0
  88. package/dist/video/video-bookmark.d.ts +1 -1
  89. package/dist/video/video-playlist-item.d.ts +1 -1
  90. package/package.json +141 -3
  91. package/src/assessment-toolbar/assessment-toolbar.tsx +54 -49
  92. package/src/assessment-toolbar/index.ts +6 -0
  93. package/src/assessment-toolbar/question-header-bar.tsx +61 -0
  94. package/src/assessment-toolbar/question-materials-drawer.tsx +55 -0
  95. package/src/assessment-toolbar/question-navigator.tsx +3 -31
  96. package/src/assessment-toolbar/timer-display.tsx +2 -2
  97. package/src/assessment-toolbar/types.ts +54 -4
  98. package/src/assessment-toolbar/use-countdown.ts +153 -0
  99. package/src/common/index.ts +3 -0
  100. package/src/common/search-input.tsx +7 -6
  101. package/src/common/stepper.tsx +100 -0
  102. package/src/common/types.ts +39 -0
  103. package/src/content/attachment-list.tsx +90 -0
  104. package/src/content/content-block.tsx +4 -2
  105. package/src/content/file-upload-zone.tsx +1 -6
  106. package/src/content/index.ts +3 -0
  107. package/src/content/types.ts +41 -0
  108. package/src/curriculum/curriculum-item.tsx +7 -3
  109. package/src/feedback/feedback-banner.tsx +12 -14
  110. package/src/flashcards/flashcard-deck.tsx +1 -9
  111. package/src/flashcards/flashcard.tsx +1 -1
  112. package/src/modules/AssignmentModule/AssignmentModule.tsx +305 -0
  113. package/src/modules/AssignmentModule/types.ts +73 -0
  114. package/src/modules/CertificateModule/CertificateModule.tsx +161 -0
  115. package/src/modules/CertificateModule/types.ts +47 -0
  116. package/src/modules/CoursePlayer/CoursePlayer.tsx +44 -48
  117. package/src/modules/DiscussionModule/DiscussionModule.tsx +110 -0
  118. package/src/modules/DiscussionModule/types.ts +54 -0
  119. package/src/modules/ExamModule/ExamModule.tsx +285 -0
  120. package/src/modules/ExamModule/types.ts +66 -0
  121. package/src/modules/FlashcardLab/FlashcardLab.tsx +29 -16
  122. package/src/modules/GradeCenterModule/GradeCenterModule.tsx +169 -0
  123. package/src/modules/GradeCenterModule/types.ts +63 -0
  124. package/src/modules/QuizModule/QuizModule.tsx +88 -88
  125. package/src/modules/QuizModule/types.ts +6 -1
  126. package/src/modules/SurveyModule/SurveyModule.tsx +180 -0
  127. package/src/modules/SurveyModule/types.ts +51 -0
  128. package/src/modules/index.ts +24 -0
  129. package/src/progress/achievement-badge.tsx +52 -0
  130. package/src/progress/activity-timeline.tsx +84 -0
  131. package/src/progress/index.ts +7 -0
  132. package/src/progress/stat-card.tsx +30 -18
  133. package/src/progress/streak-badge.tsx +35 -0
  134. package/src/progress/types.ts +101 -0
  135. package/src/questions/choice.tsx +7 -9
  136. package/src/questions/essay.tsx +23 -25
  137. package/src/questions/fill-in-the-blank.tsx +13 -16
  138. package/src/questions/hotspot.tsx +154 -0
  139. package/src/questions/index.ts +16 -0
  140. package/src/questions/inline-choice.tsx +151 -0
  141. package/src/questions/matching.tsx +228 -0
  142. package/src/questions/multiple-choice.tsx +7 -9
  143. package/src/questions/numeric.tsx +102 -0
  144. package/src/questions/ordering.tsx +159 -0
  145. package/src/questions/question-renderer.tsx +21 -0
  146. package/src/questions/scenario.tsx +140 -0
  147. package/src/questions/scoring.ts +201 -0
  148. package/src/questions/spreadsheet.tsx +259 -0
  149. package/src/questions/true-false.tsx +7 -9
  150. package/src/questions/types.ts +123 -1
  151. package/src/questions/use-drag-reorder.ts +80 -0
  152. package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +2 -15
  153. package/src/sections/AssessmentReview/AssessmentReview.tsx +13 -2
  154. package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +7 -5
  155. package/src/sections/CertificateViewer/CertificateViewer.tsx +409 -56
  156. package/src/sections/CertificateViewer/types.ts +13 -5
  157. package/src/sections/CourseOutline/CourseOutline.tsx +4 -14
  158. package/src/sections/DiscussionThread/DiscussionThread.tsx +13 -10
  159. package/src/sections/ExamSession/ExamSession.tsx +44 -7
  160. package/src/sections/ExamSession/types.ts +6 -1
  161. package/src/sections/ForumBoard/ForumBoard.tsx +284 -0
  162. package/src/sections/ForumBoard/types.ts +67 -0
  163. package/src/sections/GradebookTable/GradebookTable.tsx +1 -1
  164. package/src/sections/LecturePlayer/LecturePlayer.tsx +1 -1
  165. package/src/sections/LessonPage/LessonPage.tsx +5 -9
  166. package/src/sections/PracticeQuiz/PracticeQuiz.tsx +15 -26
  167. package/src/sections/ProgressDashboard/ProgressDashboard.tsx +65 -65
  168. package/src/sections/QuizSession/QuizSession.tsx +67 -8
  169. package/src/sections/QuizSession/types.ts +6 -1
  170. package/src/sections/RequirementsChecklist/RequirementsChecklist.tsx +107 -0
  171. package/src/sections/RequirementsChecklist/types.ts +38 -0
  172. package/src/sections/ResourceLibrary/ResourceLibrary.tsx +4 -9
  173. package/src/sections/RubricView/RubricView.tsx +138 -0
  174. package/src/sections/RubricView/types.ts +52 -0
  175. package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +23 -9
  176. package/src/sections/SurveyForm/SurveyForm.tsx +8 -5
  177. package/src/sections/index.ts +20 -1
  178. package/src/social/post-card.tsx +8 -19
  179. package/src/social/user-avatar.tsx +1 -0
  180. package/src/styles/globals.css +13 -0
  181. package/src/ui/drawer.tsx +600 -0
  182. package/src/ui/index.ts +19 -0
  183. package/src/ui/rich-text-editor.tsx +109 -0
  184. package/src/ui/rich-text-toolbar.tsx +156 -0
  185. package/src/utils/array-utils.ts +17 -0
  186. package/src/utils/flatten-leaves.ts +17 -0
  187. package/src/utils/format-file-size.ts +5 -0
  188. package/src/utils/format-timestamp.ts +13 -0
  189. package/src/utils/is-empty-html.ts +7 -0
  190. package/src/utils/shuffle.ts +8 -0
  191. package/src/utils/string-utils.ts +30 -0
  192. package/src/video/video-bookmark.tsx +4 -3
  193. package/src/video/video-chapter-list.tsx +9 -4
  194. package/src/video/video-player.tsx +11 -4
  195. package/src/video/video-playlist-item.tsx +8 -3
  196. package/src/video/video-thumbnail-card.tsx +4 -0
  197. package/src/video/video-transcript.tsx +8 -5
  198. package/dist/table-BrS5cDQu.js +0 -2510
  199. package/dist/table-D6AkBBEo.cjs +0 -1
package/dist/index.js CHANGED
@@ -1,123 +1,133 @@
1
- import { c as l, f as g, a as h, P as N } from "./table-BrS5cDQu.js";
2
- import { A as Z, b as J, d as K, e as O, g as W, h as X, i as Y, j as _, k as S, l as ee, m as ae, n as te, o as re, p as se, q as ie, B as le, r as oe, C as ne, s as de, t as ce, u as me, v as ue, w as fe, x as xe, y as pe, z as ge, D as he, E as be, F as ve, G as Ne, H as ye, I as Ce, J as Te, K as ze, L as we, M as De, N as Ae, O as je, Q as ke, R as Ve, S as Ie, T as Re, U as Be, V as Fe, W as Pe, X as He, Y as Le, Z as Me, _ as $e, $ as Ee, a0 as Qe, a1 as Ue, a2 as qe, a3 as Ge, a4 as Ze, a5 as Je, a6 as Ke, a7 as Oe, a8 as We, a9 as Xe, aa as Ye, ab as _e, ac as Se, ad as ea, ae as aa, af as ta, ag as ra, ah as sa, ai as ia, aj as la, ak as oa, al as na, am as da, an as ca, ao as ma } from "./table-BrS5cDQu.js";
3
- import { jsxs as o, jsx as e } from "react/jsx-runtime";
4
- import { Clock as y, Play as p, Video as C, Bookmark as T, Pencil as z, Trash2 as w, CheckCircle2 as D, Circle as A } from "lucide-react";
5
- import { useRef as v, useEffect as j } from "react";
6
- const B = ({
7
- entries: a,
8
- currentTime: r = 0,
9
- onSeek: t,
10
- readOnly: s = !1,
11
- maxHeight: n = "400px",
1
+ import { c as l, f as D, a as z, P, b as H, B as A } from "./tabs-Wf3h_Cx3.js";
2
+ import { A as ye, d as we, e as De, g as ze, h as Ce, i as Te, j as Ae, k as Ie, l as je, m as ke, n as Fe, o as Be, p as Re, q as Ve, r as Pe, s as He, t as Me, u as Ee, C as Le, v as Qe, w as $e, x as Ke, y as qe, z as Ge, D as Ue, E as We, F as Je, G as Xe, H as Ze, I as Ye, J as _e, K as Oe, L as Se, M as et, N as tt, O as rt, Q as at, R as st, S as it, T as nt, U as lt, V as ot, W as dt, X as ct, Y as ut, Z as mt, _ as ft, $ as xt, a0 as pt, a1 as gt, a2 as ht, a3 as bt, a4 as vt, a5 as Nt, a6 as yt, a7 as wt, a8 as Dt, a9 as zt, aa as Ct, ab as Tt, ac as At, ad as It, ae as jt, af as kt, ag as Ft, ah as Bt, ai as Rt, aj as Vt, ak as Pt, al as Ht, am as Mt, an as Et, ao as Lt, ap as Qt, aq as $t, ar as Kt, as as qt, at as Gt, au as Ut, av as Wt, aw as Jt, ax as Xt, ay as Zt, az as Yt, aA as _t, aB as Ot, aC as St, aD as er, aE as tr, aF as rr, aG as ar, aH as sr, aI as ir, aJ as nr, aK as lr, aL as or, aM as dr, aN as cr, aO as ur, aP as mr, aQ as fr, aR as xr, aS as pr } from "./tabs-Wf3h_Cx3.js";
3
+ import { jsxs as f, jsx as e } from "react/jsx-runtime";
4
+ import { Clock as M, Play as N, Video as E, Bookmark as L, Pencil as Q, Trash2 as $, CheckCircle2 as K, Circle as q, Download as G, X as U, Image as W, Film as J, Music as X, FileText as Z, Archive as Y, File as _, Check as O } from "lucide-react";
5
+ import { useRef as h, useMemo as I, useEffect as j, memo as k, useState as S, useCallback as b } from "react";
6
+ const ie = ({
7
+ entries: t,
8
+ currentTime: a = 0,
9
+ onSeek: r,
10
+ readOnly: n = !1,
11
+ maxHeight: o = "400px",
12
12
  className: c,
13
- style: i
13
+ style: s
14
14
  }) => {
15
- const m = v(null), d = v(null), b = a.reduce(
16
- (u, x, f) => x.time <= r ? f : u,
17
- -1
15
+ const i = h(null), u = h(null), x = I(
16
+ () => t.reduce((d, p, m) => p.time <= a ? m : d, -1),
17
+ [t, a]
18
18
  );
19
19
  return j(() => {
20
- d.current && m.current && d.current.scrollIntoView({
20
+ u.current && i.current && u.current.scrollIntoView({
21
21
  behavior: "smooth",
22
22
  block: "nearest"
23
23
  });
24
- }, [b]), a.length === 0 ? /* @__PURE__ */ o(
24
+ }, [x]), t.length === 0 ? /* @__PURE__ */ f(
25
25
  "div",
26
26
  {
27
27
  className: l(
28
28
  "flex flex-col items-center justify-center gap-2 rounded-md border border-border bg-muted p-6",
29
29
  c
30
30
  ),
31
- style: i,
31
+ style: s,
32
32
  children: [
33
- /* @__PURE__ */ e(y, { size: 20, className: "text-muted-foreground" }),
33
+ /* @__PURE__ */ e(M, { size: 20, className: "text-muted-foreground" }),
34
34
  /* @__PURE__ */ e("span", { className: "text-sm text-muted-foreground", children: "No transcript available" })
35
35
  ]
36
36
  }
37
37
  ) : /* @__PURE__ */ e(
38
38
  "div",
39
39
  {
40
- ref: m,
40
+ ref: i,
41
41
  className: l(
42
42
  "overflow-y-auto rounded-md border border-border",
43
43
  c
44
44
  ),
45
- style: { maxHeight: n, ...i },
46
- children: a.map((u, x) => {
47
- const f = x === b;
48
- return /* @__PURE__ */ o(
45
+ style: { maxHeight: o, ...s },
46
+ children: t.map((d, p) => {
47
+ const m = p === x;
48
+ return /* @__PURE__ */ f(
49
49
  "div",
50
50
  {
51
- ref: f ? d : void 0,
51
+ ref: m ? u : void 0,
52
52
  className: l(
53
53
  "flex gap-3 px-3 py-2 text-sm transition-colors",
54
- f && "bg-primary/10",
55
- !s && t && "cursor-pointer hover:bg-muted"
54
+ m && "bg-primary/10",
55
+ !n && r && "cursor-pointer hover:bg-muted"
56
56
  ),
57
- onClick: () => !s && (t == null ? void 0 : t(u.time)),
57
+ onClick: () => !n && (r == null ? void 0 : r(d.time)),
58
+ role: !n && r ? "button" : void 0,
59
+ tabIndex: !n && r ? 0 : void 0,
60
+ onKeyDown: !n && r ? (g) => {
61
+ (g.key === "Enter" || g.key === " ") && (g.preventDefault(), r(d.time));
62
+ } : void 0,
58
63
  children: [
59
64
  /* @__PURE__ */ e(
60
65
  "span",
61
66
  {
62
67
  className: l(
63
68
  "shrink-0 font-mono text-xs tabular-nums pt-0.5",
64
- f ? "text-primary font-medium" : "text-muted-foreground"
69
+ m ? "text-primary font-medium" : "text-muted-foreground"
65
70
  ),
66
- children: g(Math.floor(u.time))
71
+ children: D(Math.floor(d.time))
67
72
  }
68
73
  ),
69
- /* @__PURE__ */ o("div", { className: "min-w-0", children: [
70
- u.speaker && /* @__PURE__ */ o("span", { className: "mr-1 font-semibold text-foreground", children: [
71
- u.speaker,
74
+ /* @__PURE__ */ f("div", { className: "min-w-0", children: [
75
+ d.speaker && /* @__PURE__ */ f("span", { className: "mr-1 font-semibold text-foreground", children: [
76
+ d.speaker,
72
77
  ":"
73
78
  ] }),
74
79
  /* @__PURE__ */ e(
75
80
  "span",
76
81
  {
77
- className: f ? "text-foreground" : "text-muted-foreground",
78
- children: u.text
82
+ className: m ? "text-foreground" : "text-muted-foreground",
83
+ children: d.text
79
84
  }
80
85
  )
81
86
  ] })
82
87
  ]
83
88
  },
84
- x
89
+ `${d.time}-${d.text.slice(0, 20)}`
85
90
  );
86
91
  })
87
92
  }
88
93
  );
89
- }, F = ({
90
- chapters: a,
91
- currentTime: r = 0,
92
- onSeek: t,
93
- className: s,
94
- style: n
94
+ }, ne = ({
95
+ chapters: t,
96
+ currentTime: a = 0,
97
+ onSeek: r,
98
+ className: n,
99
+ style: o
95
100
  }) => {
96
- const c = a.reduce(
97
- (i, m, d) => m.time <= r ? d : i,
98
- -1
101
+ const c = I(
102
+ () => t.reduce((s, i, u) => i.time <= a ? u : s, -1),
103
+ [t, a]
99
104
  );
100
105
  return /* @__PURE__ */ e(
101
106
  "div",
102
107
  {
103
108
  className: l(
104
109
  "divide-y divide-border rounded-md border border-border",
105
- s
110
+ n
106
111
  ),
107
- style: n,
108
- children: a.map((i, m) => {
109
- const d = m === c;
110
- return /* @__PURE__ */ o(
112
+ style: o,
113
+ children: t.map((s, i) => {
114
+ const u = i === c;
115
+ return /* @__PURE__ */ f(
111
116
  "div",
112
117
  {
113
118
  className: l(
114
119
  "flex items-center gap-3 p-3 transition-colors",
115
- d && "bg-primary/10",
116
- t && "cursor-pointer hover:bg-muted"
120
+ u && "bg-primary/10",
121
+ r && "cursor-pointer hover:bg-muted"
117
122
  ),
118
- onClick: () => t == null ? void 0 : t(i.time),
123
+ onClick: () => r == null ? void 0 : r(s.time),
124
+ role: r ? "button" : void 0,
125
+ tabIndex: r ? 0 : void 0,
126
+ onKeyDown: r ? (x) => {
127
+ (x.key === "Enter" || x.key === " ") && (x.preventDefault(), r(s.time));
128
+ } : void 0,
119
129
  children: [
120
- i.thumbnail ? /* @__PURE__ */ o(
130
+ s.thumbnail ? /* @__PURE__ */ f(
121
131
  "div",
122
132
  {
123
133
  className: "relative shrink-0 w-16 overflow-hidden rounded",
@@ -126,12 +136,13 @@ const B = ({
126
136
  /* @__PURE__ */ e(
127
137
  "img",
128
138
  {
129
- src: i.thumbnail,
130
- alt: i.title,
139
+ src: s.thumbnail,
140
+ alt: s.title,
141
+ loading: "lazy",
131
142
  className: "size-full object-cover"
132
143
  }
133
144
  ),
134
- d && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40", children: /* @__PURE__ */ e(p, { size: 14, className: "ml-px text-white" }) })
145
+ u && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40", children: /* @__PURE__ */ e(N, { size: 14, className: "ml-px text-white" }) })
135
146
  ]
136
147
  }
137
148
  ) : /* @__PURE__ */ e(
@@ -139,213 +150,408 @@ const B = ({
139
150
  {
140
151
  className: l(
141
152
  "flex shrink-0 items-center justify-center size-8 rounded-full",
142
- d ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"
153
+ u ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground"
143
154
  ),
144
- children: /* @__PURE__ */ e("span", { className: "text-xs font-semibold", children: m + 1 })
155
+ children: /* @__PURE__ */ e("span", { className: "text-xs font-semibold", children: i + 1 })
145
156
  }
146
157
  ),
147
- /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: [
158
+ /* @__PURE__ */ f("div", { className: "min-w-0 flex-1", children: [
148
159
  /* @__PURE__ */ e(
149
160
  "div",
150
161
  {
151
162
  className: l(
152
163
  "truncate text-sm font-medium",
153
- d ? "text-primary" : "text-foreground"
164
+ u ? "text-primary" : "text-foreground"
154
165
  ),
155
- children: i.title
166
+ children: s.title
156
167
  }
157
168
  ),
158
- /* @__PURE__ */ o("div", { className: "mt-0.5 flex items-center gap-2", children: [
159
- /* @__PURE__ */ e("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: g(Math.floor(i.time)) }),
160
- i.duration != null && i.duration > 0 && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: h(i.duration) })
169
+ /* @__PURE__ */ f("div", { className: "mt-0.5 flex items-center gap-2", children: [
170
+ /* @__PURE__ */ e("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: D(Math.floor(s.time)) }),
171
+ s.duration != null && s.duration > 0 && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: z(s.duration) })
161
172
  ] })
162
173
  ] })
163
174
  ]
164
175
  },
165
- m
176
+ s.time
166
177
  );
167
178
  })
168
179
  }
169
180
  );
170
- }, P = ({
171
- poster: a,
172
- title: r,
173
- duration: t,
174
- progress: s,
175
- onClick: n,
181
+ }, le = ({
182
+ poster: t,
183
+ title: a,
184
+ duration: r,
185
+ progress: n,
186
+ onClick: o,
176
187
  className: c,
177
- style: i
178
- }) => /* @__PURE__ */ o(
188
+ style: s
189
+ }) => /* @__PURE__ */ f(
179
190
  "div",
180
191
  {
181
192
  className: l(
182
193
  "group overflow-hidden rounded-lg border border-border transition-colors",
183
- n && "cursor-pointer hover:border-primary/50 hover:shadow-sm",
194
+ o && "cursor-pointer hover:border-primary/50 hover:shadow-sm",
184
195
  c
185
196
  ),
186
- style: i,
187
- onClick: n,
197
+ style: s,
198
+ onClick: o,
199
+ role: o ? "button" : void 0,
200
+ tabIndex: o ? 0 : void 0,
201
+ onKeyDown: o ? (i) => {
202
+ (i.key === "Enter" || i.key === " ") && (i.preventDefault(), o());
203
+ } : void 0,
188
204
  children: [
189
- /* @__PURE__ */ o("div", { className: "relative overflow-hidden", style: { aspectRatio: "16/9" }, children: [
190
- a ? /* @__PURE__ */ e(
205
+ /* @__PURE__ */ f("div", { className: "relative overflow-hidden", style: { aspectRatio: "16/9" }, children: [
206
+ t ? /* @__PURE__ */ e(
191
207
  "img",
192
208
  {
193
- src: a,
194
- alt: r,
209
+ src: t,
210
+ alt: a,
211
+ loading: "lazy",
195
212
  className: "size-full object-cover transition-transform duration-300 group-hover:scale-105"
196
213
  }
197
- ) : /* @__PURE__ */ e("div", { className: "flex size-full items-center justify-center bg-muted", children: /* @__PURE__ */ e(C, { size: 32, className: "text-muted-foreground" }) }),
198
- /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/0 transition-colors group-hover:bg-black/20", children: /* @__PURE__ */ e("div", { className: "flex size-10 items-center justify-center rounded-full bg-black/60 opacity-0 transition-opacity group-hover:opacity-100", children: /* @__PURE__ */ e(p, { size: 20, className: "ml-0.5 text-white" }) }) }),
199
- t != null && t > 0 && /* @__PURE__ */ e("span", { className: "absolute bottom-2 right-2 rounded bg-black/75 px-1.5 py-0.5 text-xs font-medium tabular-nums text-white", children: h(t) })
214
+ ) : /* @__PURE__ */ e("div", { className: "flex size-full items-center justify-center bg-muted", children: /* @__PURE__ */ e(E, { size: 32, className: "text-muted-foreground" }) }),
215
+ /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/0 transition-colors group-hover:bg-black/20", children: /* @__PURE__ */ e("div", { className: "flex size-10 items-center justify-center rounded-full bg-black/60 opacity-0 transition-opacity group-hover:opacity-100", children: /* @__PURE__ */ e(N, { size: 20, className: "ml-0.5 text-white" }) }) }),
216
+ r != null && r > 0 && /* @__PURE__ */ e("span", { className: "absolute bottom-2 right-2 rounded bg-black/75 px-1.5 py-0.5 text-xs font-medium tabular-nums text-white", children: z(r) })
200
217
  ] }),
201
- /* @__PURE__ */ e("div", { className: "p-3", children: /* @__PURE__ */ e("h4", { className: "truncate text-sm font-medium text-foreground", children: r }) }),
202
- s != null && s >= 0 && /* @__PURE__ */ e("div", { className: "px-3 pb-3", children: /* @__PURE__ */ e(
203
- N,
218
+ /* @__PURE__ */ e("div", { className: "p-3", children: /* @__PURE__ */ e("h4", { className: "truncate text-sm font-medium text-foreground", children: a }) }),
219
+ n != null && n >= 0 && /* @__PURE__ */ e("div", { className: "px-3 pb-3", children: /* @__PURE__ */ e(
220
+ P,
204
221
  {
205
- value: s,
222
+ value: n,
206
223
  size: "sm",
207
- variant: s >= 100 ? "success" : "default"
224
+ variant: n >= 100 ? "success" : "default"
208
225
  }
209
226
  ) })
210
227
  ]
211
228
  }
212
- ), H = ({
229
+ ), oe = k(function({
213
230
  bookmark: a,
214
231
  onSeek: r,
215
- onDelete: t,
216
- onEdit: s,
217
- className: n,
218
- style: c
219
- }) => /* @__PURE__ */ o(
220
- "div",
221
- {
222
- className: l(
223
- "flex items-start gap-3 rounded-md border border-border p-3",
224
- n
225
- ),
226
- style: c,
227
- children: [
228
- /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center justify-center size-8 rounded-full bg-primary/10 text-primary", children: /* @__PURE__ */ e(T, { size: 16 }) }),
229
- /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: [
230
- /* @__PURE__ */ e(
231
- "button",
232
- {
233
- type: "button",
234
- className: l(
235
- "font-mono text-xs font-medium tabular-nums",
236
- r ? "cursor-pointer text-primary hover:underline" : "text-muted-foreground"
237
- ),
238
- onClick: () => r == null ? void 0 : r(a.time),
239
- disabled: !r,
240
- children: g(Math.floor(a.time))
241
- }
242
- ),
243
- a.note && /* @__PURE__ */ e("p", { className: "mt-0.5 text-sm text-foreground", children: a.note }),
244
- a.createdAt && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: new Date(a.createdAt).toLocaleDateString() })
245
- ] }),
246
- (s || t) && /* @__PURE__ */ o("div", { className: "flex shrink-0 items-center gap-1", children: [
247
- s && /* @__PURE__ */ e(
248
- "button",
249
- {
250
- type: "button",
251
- className: "inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
252
- "aria-label": "Edit bookmark",
253
- onClick: () => s(a.id),
254
- children: /* @__PURE__ */ e(z, { size: 14 })
255
- }
256
- ),
257
- t && /* @__PURE__ */ e(
258
- "button",
259
- {
260
- type: "button",
261
- className: "inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",
262
- "aria-label": "Delete bookmark",
263
- onClick: () => t(a.id),
264
- children: /* @__PURE__ */ e(w, { size: 14 })
265
- }
266
- )
267
- ] })
268
- ]
269
- }
270
- ), L = ({
232
+ onDelete: n,
233
+ onEdit: o,
234
+ className: c,
235
+ style: s
236
+ }) {
237
+ return /* @__PURE__ */ f(
238
+ "div",
239
+ {
240
+ className: l(
241
+ "flex items-start gap-3 rounded-md border border-border p-3",
242
+ c
243
+ ),
244
+ style: s,
245
+ children: [
246
+ /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center justify-center size-8 rounded-full bg-primary/10 text-primary", children: /* @__PURE__ */ e(L, { size: 16 }) }),
247
+ /* @__PURE__ */ f("div", { className: "min-w-0 flex-1", children: [
248
+ /* @__PURE__ */ e(
249
+ "button",
250
+ {
251
+ type: "button",
252
+ className: l(
253
+ "font-mono text-xs font-medium tabular-nums",
254
+ r ? "cursor-pointer text-primary hover:underline" : "text-muted-foreground"
255
+ ),
256
+ onClick: () => r == null ? void 0 : r(a.time),
257
+ disabled: !r,
258
+ children: D(Math.floor(a.time))
259
+ }
260
+ ),
261
+ a.note && /* @__PURE__ */ e("p", { className: "mt-0.5 text-sm text-foreground", children: a.note }),
262
+ a.createdAt && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: new Date(a.createdAt).toLocaleDateString() })
263
+ ] }),
264
+ (o || n) && /* @__PURE__ */ f("div", { className: "flex shrink-0 items-center gap-1", children: [
265
+ o && /* @__PURE__ */ e(
266
+ "button",
267
+ {
268
+ type: "button",
269
+ className: "inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
270
+ "aria-label": "Edit bookmark",
271
+ onClick: () => o(a.id),
272
+ children: /* @__PURE__ */ e(Q, { size: 14 })
273
+ }
274
+ ),
275
+ n && /* @__PURE__ */ e(
276
+ "button",
277
+ {
278
+ type: "button",
279
+ className: "inline-flex items-center justify-center rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive",
280
+ "aria-label": "Delete bookmark",
281
+ onClick: () => n(a.id),
282
+ children: /* @__PURE__ */ e($, { size: 14 })
283
+ }
284
+ )
285
+ ] })
286
+ ]
287
+ }
288
+ );
289
+ }), de = k(function({
271
290
  thumbnail: a,
272
291
  title: r,
273
- duration: t,
274
- status: s = "unwatched",
275
- isActive: n = !1,
276
- index: c,
292
+ duration: n,
293
+ status: o = "unwatched",
294
+ isActive: c = !1,
295
+ index: s,
277
296
  onClick: i,
278
- className: m,
279
- style: d
280
- }) => /* @__PURE__ */ o(
281
- "div",
282
- {
283
- className: l(
284
- "flex items-center gap-3 rounded-md px-3 py-2 transition-colors",
285
- n && "bg-primary/10",
286
- i && "cursor-pointer hover:bg-muted",
287
- m
288
- ),
289
- style: d,
290
- onClick: i,
291
- children: [
292
- /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center justify-center size-6", children: s === "completed" ? /* @__PURE__ */ e("span", { className: "text-success", children: /* @__PURE__ */ e(D, { size: 18 }) }) : n ? /* @__PURE__ */ e("span", { className: "text-primary", children: /* @__PURE__ */ e(p, { size: 16, className: "ml-px" }) }) : c != null ? /* @__PURE__ */ e("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: c }) : /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: /* @__PURE__ */ e(A, { size: 16 }) }) }),
293
- a && /* @__PURE__ */ o(
294
- "div",
295
- {
296
- className: "relative shrink-0 w-16 overflow-hidden rounded",
297
- style: { aspectRatio: "16/9" },
298
- children: [
299
- /* @__PURE__ */ e(
300
- "img",
301
- {
302
- src: a,
303
- alt: r,
304
- className: l(
305
- "size-full object-cover",
306
- s === "completed" && "opacity-60"
307
- )
308
- }
309
- ),
310
- n && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40", children: /* @__PURE__ */ e(p, { size: 12, className: "ml-px text-white" }) })
311
- ]
312
- }
297
+ className: u,
298
+ style: x
299
+ }) {
300
+ return /* @__PURE__ */ f(
301
+ "div",
302
+ {
303
+ className: l(
304
+ "flex items-center gap-3 rounded-md px-3 py-2 transition-colors",
305
+ c && "bg-primary/10",
306
+ i && "cursor-pointer hover:bg-muted",
307
+ u
313
308
  ),
314
- /* @__PURE__ */ o("div", { className: "min-w-0 flex-1", children: [
315
- /* @__PURE__ */ e(
309
+ style: x,
310
+ onClick: i,
311
+ role: i ? "button" : void 0,
312
+ tabIndex: i ? 0 : void 0,
313
+ onKeyDown: i ? (d) => {
314
+ (d.key === "Enter" || d.key === " ") && (d.preventDefault(), i());
315
+ } : void 0,
316
+ children: [
317
+ /* @__PURE__ */ e("div", { className: "flex shrink-0 items-center justify-center size-6", children: o === "completed" ? /* @__PURE__ */ e("span", { className: "text-success", children: /* @__PURE__ */ e(K, { size: 18 }) }) : c ? /* @__PURE__ */ e("span", { className: "text-primary", children: /* @__PURE__ */ e(N, { size: 16, className: "ml-px" }) }) : s != null ? /* @__PURE__ */ e("span", { className: "text-xs font-medium tabular-nums text-muted-foreground", children: s }) : /* @__PURE__ */ e("span", { className: "text-muted-foreground", children: /* @__PURE__ */ e(q, { size: 16 }) }) }),
318
+ a && /* @__PURE__ */ f(
316
319
  "div",
317
320
  {
318
- className: l(
319
- "truncate text-sm",
320
- n ? "font-medium text-primary" : "text-foreground",
321
- s === "completed" && !n && "text-muted-foreground"
322
- ),
323
- children: r
321
+ className: "relative shrink-0 w-16 overflow-hidden rounded",
322
+ style: { aspectRatio: "16/9" },
323
+ children: [
324
+ /* @__PURE__ */ e(
325
+ "img",
326
+ {
327
+ src: a,
328
+ alt: r,
329
+ loading: "lazy",
330
+ className: l(
331
+ "size-full object-cover",
332
+ o === "completed" && "opacity-60"
333
+ )
334
+ }
335
+ ),
336
+ c && /* @__PURE__ */ e("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40", children: /* @__PURE__ */ e(N, { size: 12, className: "ml-px text-white" }) })
337
+ ]
324
338
  }
325
339
  ),
326
- t != null && t > 0 && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: h(t) })
327
- ] })
328
- ]
329
- }
330
- );
331
- function M({
332
- children: a,
333
- colorMode: r = "dark",
334
- className: t,
335
- style: s
340
+ /* @__PURE__ */ f("div", { className: "min-w-0 flex-1", children: [
341
+ /* @__PURE__ */ e(
342
+ "div",
343
+ {
344
+ className: l(
345
+ "truncate text-sm",
346
+ c ? "font-medium text-primary" : "text-foreground",
347
+ o === "completed" && !c && "text-muted-foreground"
348
+ ),
349
+ children: r
350
+ }
351
+ ),
352
+ n != null && n > 0 && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: z(n) })
353
+ ] })
354
+ ]
355
+ }
356
+ );
357
+ });
358
+ function ee(t) {
359
+ return t.startsWith("image/") ? W : t.startsWith("video/") ? J : t.startsWith("audio/") ? X : t === "application/pdf" ? Z : t === "application/zip" || t === "application/x-rar-compressed" || t === "application/gzip" ? Y : _;
360
+ }
361
+ function ce({
362
+ files: t,
363
+ onDownload: a,
364
+ onRemove: r,
365
+ readOnly: n = !0,
366
+ className: o,
367
+ style: c
336
368
  }) {
369
+ return t.length === 0 ? null : /* @__PURE__ */ e("div", { className: l("flex flex-col gap-1", o), style: c, children: t.map((s, i) => {
370
+ const u = ee(s.type);
371
+ return /* @__PURE__ */ f(
372
+ "div",
373
+ {
374
+ className: "flex items-center gap-3 rounded-md px-2 py-1.5 hover:bg-muted/50 transition-colors",
375
+ children: [
376
+ /* @__PURE__ */ e("span", { className: "shrink-0 text-muted-foreground", children: /* @__PURE__ */ e(u, { size: 18 }) }),
377
+ /* @__PURE__ */ f("div", { className: "flex-1 min-w-0", children: [
378
+ /* @__PURE__ */ e("span", { className: "text-sm text-foreground block truncate", children: s.name }),
379
+ /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: H(s.size) })
380
+ ] }),
381
+ a && s.url && /* @__PURE__ */ e(
382
+ A,
383
+ {
384
+ variant: "ghost",
385
+ size: "sm",
386
+ className: "shrink-0 h-7 w-7 p-0",
387
+ onClick: () => a(s),
388
+ children: /* @__PURE__ */ e(G, { size: 14 })
389
+ }
390
+ ),
391
+ !n && r && /* @__PURE__ */ e(
392
+ A,
393
+ {
394
+ variant: "ghost",
395
+ size: "sm",
396
+ className: "shrink-0 h-7 w-7 p-0 text-muted-foreground hover:text-destructive",
397
+ onClick: () => r(s),
398
+ children: /* @__PURE__ */ e(U, { size: 14 })
399
+ }
400
+ )
401
+ ]
402
+ },
403
+ `${s.name}-${i}`
404
+ );
405
+ }) });
406
+ }
407
+ function ue({
408
+ durationSeconds: t,
409
+ warningThresholdSeconds: a = 60,
410
+ onExpire: r,
411
+ onWarning: n,
412
+ autoStart: o = !1
413
+ }) {
414
+ const [c, s] = S(t), i = h(o ? "running" : "idle"), u = h(null), x = h(r), d = h(n), p = h(!1);
415
+ x.current = r, d.current = n;
416
+ const m = b(() => {
417
+ u.current != null && (clearInterval(u.current), u.current = null);
418
+ }, []), g = b(() => {
419
+ m(), u.current = setInterval(() => {
420
+ s((w) => {
421
+ var C, T;
422
+ const v = w - 1;
423
+ return !p.current && v <= a && v > 0 && (p.current = !0, (C = d.current) == null || C.call(d)), v <= 0 ? (m(), i.current = "expired", (T = x.current) == null || T.call(x), 0) : v;
424
+ });
425
+ }, 1e3);
426
+ }, [m, a]), F = b(() => {
427
+ s(t), p.current = !1, i.current = "running", g();
428
+ }, [t, g]), B = b(() => {
429
+ i.current === "running" && (m(), i.current = "paused", s((w) => w));
430
+ }, [m]), R = b(() => {
431
+ i.current === "paused" && (i.current = "running", g());
432
+ }, [g]), V = b(() => {
433
+ m(), i.current = "idle", p.current = !1, s(t);
434
+ }, [m, t]);
435
+ j(() => (o && g(), m), []);
436
+ const y = i.current;
437
+ return {
438
+ timeRemaining: c,
439
+ isRunning: y === "running",
440
+ isPaused: y === "paused",
441
+ isExpired: y === "expired",
442
+ isWarning: c <= a && c > 0,
443
+ start: F,
444
+ pause: B,
445
+ resume: R,
446
+ reset: V
447
+ };
448
+ }
449
+ function me({
450
+ steps: t,
451
+ currentStep: a,
452
+ orientation: r = "horizontal",
453
+ variant: n = "default",
454
+ className: o,
455
+ style: c
456
+ }) {
457
+ const s = r === "horizontal", i = n === "compact", u = i ? "w-6 h-6 text-xs" : "w-8 h-8 text-sm", x = i ? 12 : 16;
337
458
  return /* @__PURE__ */ e(
338
459
  "div",
339
460
  {
340
- className: `hydra-root${r === "dark" ? " dark" : ""}${t ? ` ${t}` : ""}`,
341
- style: s,
342
- children: a
461
+ className: l(
462
+ "flex",
463
+ s ? "flex-row items-start" : "flex-col",
464
+ o
465
+ ),
466
+ style: c,
467
+ children: t.map((d, p) => {
468
+ const m = p < a, g = p === a;
469
+ return /* @__PURE__ */ f("div", { className: l("flex", s ? "flex-1 flex-row items-start" : "flex-row items-start"), children: [
470
+ /* @__PURE__ */ f("div", { className: l("flex", s ? "flex-col items-center" : "flex-row items-start gap-3"), children: [
471
+ /* @__PURE__ */ e(
472
+ "div",
473
+ {
474
+ className: l(
475
+ "rounded-full flex items-center justify-center shrink-0 font-semibold transition-colors",
476
+ u,
477
+ m && "bg-primary text-primary-foreground",
478
+ g && "border-2 border-primary bg-primary/10 text-primary",
479
+ !m && !g && "border-2 border-border bg-muted text-muted-foreground"
480
+ ),
481
+ children: m ? /* @__PURE__ */ e(O, { size: x }) : /* @__PURE__ */ e("span", { children: p + 1 })
482
+ }
483
+ ),
484
+ /* @__PURE__ */ f("div", { className: l(s ? "mt-1.5 text-center" : "pt-0.5"), children: [
485
+ /* @__PURE__ */ e(
486
+ "p",
487
+ {
488
+ className: l(
489
+ "text-sm font-medium leading-tight",
490
+ g ? "text-foreground" : "text-muted-foreground"
491
+ ),
492
+ children: d.label
493
+ }
494
+ ),
495
+ !i && d.description && /* @__PURE__ */ e("p", { className: "text-xs text-muted-foreground mt-0.5", children: d.description })
496
+ ] })
497
+ ] }),
498
+ p < t.length - 1 && (s ? /* @__PURE__ */ e(
499
+ "div",
500
+ {
501
+ className: l(
502
+ "flex-1 h-0.5 self-center mt-0 mx-2",
503
+ i ? "mt-3" : "mt-4",
504
+ m ? "bg-primary" : "bg-border"
505
+ )
506
+ }
507
+ ) : /* @__PURE__ */ e(
508
+ "div",
509
+ {
510
+ className: l(
511
+ "w-0.5 h-6 ml-3.5",
512
+ i && "ml-2.5",
513
+ m ? "bg-primary" : "bg-border"
514
+ )
515
+ }
516
+ ))
517
+ ] }, p);
518
+ })
343
519
  }
344
520
  );
345
521
  }
346
- function $({
347
- className: a,
348
- ...r
522
+ function fe({
523
+ children: t,
524
+ colorMode: a = "dark",
525
+ className: r,
526
+ style: n
527
+ }) {
528
+ return /* @__PURE__ */ e(
529
+ "div",
530
+ {
531
+ className: `hydra-root${a === "dark" ? " dark" : ""}${r ? ` ${r}` : ""}`,
532
+ style: n,
533
+ children: t
534
+ }
535
+ );
536
+ }
537
+ function xe({ className: t, ...a }) {
538
+ return /* @__PURE__ */ e(
539
+ "textarea",
540
+ {
541
+ "data-slot": "textarea",
542
+ className: l(
543
+ "placeholder:text-muted-foreground border-input flex min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-sm shadow-xs outline-none transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50",
544
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
545
+ "aria-invalid:ring-destructive/20 aria-invalid:border-destructive",
546
+ t
547
+ ),
548
+ ...a
549
+ }
550
+ );
551
+ }
552
+ function pe({
553
+ className: t,
554
+ ...a
349
555
  }) {
350
556
  return /* @__PURE__ */ e(
351
557
  "span",
@@ -353,30 +559,30 @@ function $({
353
559
  "data-slot": "avatar",
354
560
  className: l(
355
561
  "relative flex size-9 shrink-0 overflow-hidden rounded-full",
356
- a
562
+ t
357
563
  ),
358
- ...r
564
+ ...a
359
565
  }
360
566
  );
361
567
  }
362
- function E({
363
- className: a,
364
- onError: r,
365
- ...t
568
+ function ge({
569
+ className: t,
570
+ onError: a,
571
+ ...r
366
572
  }) {
367
573
  return /* @__PURE__ */ e(
368
574
  "img",
369
575
  {
370
576
  "data-slot": "avatar-image",
371
- className: l("aspect-square size-full object-cover", a),
372
- onError: r,
373
- ...t
577
+ className: l("aspect-square size-full object-cover", t),
578
+ onError: a,
579
+ ...r
374
580
  }
375
581
  );
376
582
  }
377
- function Q({
378
- className: a,
379
- ...r
583
+ function he({
584
+ className: t,
585
+ ...a
380
586
  }) {
381
587
  return /* @__PURE__ */ e(
382
588
  "span",
@@ -384,108 +590,141 @@ function Q({
384
590
  "data-slot": "avatar-fallback",
385
591
  className: l(
386
592
  "bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-xs font-medium",
387
- a
593
+ t
388
594
  ),
389
- ...r
595
+ ...a
390
596
  }
391
597
  );
392
598
  }
393
- function U({ className: a, ...r }) {
599
+ function be({ className: t, ...a }) {
394
600
  return /* @__PURE__ */ e(
395
601
  "div",
396
602
  {
397
603
  "data-slot": "skeleton",
398
- className: l("bg-muted animate-pulse rounded-md", a),
399
- ...r
604
+ className: l("bg-muted animate-pulse rounded-md", t),
605
+ ...a
400
606
  }
401
607
  );
402
608
  }
403
609
  export {
404
- Z as Alert,
405
- J as AlertDescription,
406
- K as AlertDialog,
407
- O as AlertDialogAction,
408
- W as AlertDialogBackdrop,
409
- X as AlertDialogCancel,
410
- Y as AlertDialogContent,
411
- _ as AlertDialogDescription,
412
- S as AlertDialogFooter,
413
- ee as AlertDialogHeader,
414
- ae as AlertDialogPortal,
415
- te as AlertDialogTitle,
416
- re as AlertDialogTrigger,
417
- se as AlertTitle,
418
- ie as AssessmentToolbar,
419
- $ as Avatar,
420
- Q as AvatarFallback,
421
- E as AvatarImage,
422
- le as Badge,
423
- oe as Button,
424
- ne as Card,
425
- de as CardAction,
426
- ce as CardContent,
427
- me as CardDescription,
428
- ue as CardFooter,
429
- fe as CardHeader,
430
- xe as CardTitle,
431
- pe as Choice,
432
- ge as ConfirmDialog,
433
- he as ContentBlock,
434
- be as CurriculumItemRow,
435
- ve as CurriculumTree,
436
- Ne as DueDateDisplay,
437
- ye as EmptyState,
438
- Ce as Essay,
439
- Te as FeedbackBanner,
440
- ze as FileUploadZone,
441
- we as FillInTheBlank,
442
- De as Flashcard,
443
- Ae as FlashcardDeck,
444
- je as GradeIndicator,
445
- M as HydraProvider,
446
- ke as Input,
447
- Ve as LearningObjectIcon,
448
- Ie as LikertScale,
449
- Re as MultipleChoice,
450
- Be as PostCard,
451
- N as Progress,
452
- Fe as ProgressRing,
453
- Pe as QuestionNavigator,
454
- He as QuestionRenderer,
455
- Le as SearchInput,
456
- Me as Separator,
457
- U as Skeleton,
458
- $e as StarRating,
459
- Ee as StatCard,
460
- Qe as StatusBadge,
461
- Ue as Table,
462
- qe as TableBody,
463
- Ge as TableCaption,
464
- Ze as TableCell,
465
- Je as TableFooter,
466
- Ke as TableHead,
467
- Oe as TableHeader,
468
- We as TableRow,
469
- Xe as Tabs,
470
- Ye as TabsContent,
471
- _e as TabsList,
472
- Se as TabsTrigger,
473
- ea as Textarea,
474
- aa as TimerDisplay,
475
- ta as Tooltip,
476
- ra as TooltipContent,
477
- sa as TooltipTrigger,
478
- ia as TrueFalse,
479
- la as UserAvatar,
480
- H as VideoBookmark,
481
- F as VideoChapterList,
482
- oa as VideoPlayer,
483
- L as VideoPlaylistItem,
484
- P as VideoThumbnailCard,
485
- B as VideoTranscript,
486
- na as alertVariants,
487
- da as badgeVariants,
488
- ca as buttonVariants,
610
+ ye as AchievementBadge,
611
+ we as ActivityTimeline,
612
+ De as Alert,
613
+ ze as AlertDescription,
614
+ Ce as AlertDialog,
615
+ Te as AlertDialogAction,
616
+ Ae as AlertDialogBackdrop,
617
+ Ie as AlertDialogCancel,
618
+ je as AlertDialogContent,
619
+ ke as AlertDialogDescription,
620
+ Fe as AlertDialogFooter,
621
+ Be as AlertDialogHeader,
622
+ Re as AlertDialogPortal,
623
+ Ve as AlertDialogTitle,
624
+ Pe as AlertDialogTrigger,
625
+ He as AlertTitle,
626
+ Me as AssessmentToolbar,
627
+ ce as AttachmentList,
628
+ pe as Avatar,
629
+ he as AvatarFallback,
630
+ ge as AvatarImage,
631
+ Ee as Badge,
632
+ A as Button,
633
+ Le as Card,
634
+ Qe as CardAction,
635
+ $e as CardContent,
636
+ Ke as CardDescription,
637
+ qe as CardFooter,
638
+ Ge as CardHeader,
639
+ Ue as CardTitle,
640
+ We as Choice,
641
+ Je as ConfirmDialog,
642
+ Xe as ContentBlock,
643
+ Ze as CurriculumItemRow,
644
+ Ye as CurriculumTree,
645
+ _e as Drawer,
646
+ Oe as DrawerBackdrop,
647
+ Se as DrawerBody,
648
+ et as DrawerClose,
649
+ tt as DrawerContent,
650
+ rt as DrawerDescription,
651
+ at as DrawerFooter,
652
+ st as DrawerHeader,
653
+ it as DrawerNav,
654
+ nt as DrawerNavItem,
655
+ lt as DrawerPortal,
656
+ ot as DrawerTitle,
657
+ dt as DrawerTrigger,
658
+ ct as DrawerViewport,
659
+ ut as DueDateDisplay,
660
+ mt as EmptyState,
661
+ ft as Essay,
662
+ xt as FeedbackBanner,
663
+ pt as FileUploadZone,
664
+ gt as FillInTheBlank,
665
+ ht as Flashcard,
666
+ bt as FlashcardDeck,
667
+ vt as GradeIndicator,
668
+ Nt as Hotspot,
669
+ fe as HydraProvider,
670
+ yt as InlineChoice,
671
+ wt as Input,
672
+ Dt as LearningObjectIcon,
673
+ zt as LikertScale,
674
+ Ct as Matching,
675
+ Tt as MultipleChoice,
676
+ At as Numeric,
677
+ It as Ordering,
678
+ jt as PostCard,
679
+ P as Progress,
680
+ kt as ProgressRing,
681
+ Ft as QuestionHeaderBar,
682
+ Bt as QuestionMaterialsDrawer,
683
+ Rt as QuestionNavigator,
684
+ Vt as QuestionRenderer,
685
+ Pt as RichTextEditor,
686
+ Ht as Scenario,
687
+ Mt as SearchInput,
688
+ Et as Separator,
689
+ be as Skeleton,
690
+ Lt as Spreadsheet,
691
+ Qt as StarRating,
692
+ $t as StatCard,
693
+ Kt as StatusBadge,
694
+ me as Stepper,
695
+ qt as StreakBadge,
696
+ Gt as Table,
697
+ Ut as TableBody,
698
+ Wt as TableCaption,
699
+ Jt as TableCell,
700
+ Xt as TableFooter,
701
+ Zt as TableHead,
702
+ Yt as TableHeader,
703
+ _t as TableRow,
704
+ Ot as Tabs,
705
+ St as TabsContent,
706
+ er as TabsList,
707
+ tr as TabsTrigger,
708
+ xe as Textarea,
709
+ rr as TimerDisplay,
710
+ ar as Tooltip,
711
+ sr as TooltipContent,
712
+ ir as TooltipTrigger,
713
+ nr as TrueFalse,
714
+ lr as UserAvatar,
715
+ oe as VideoBookmark,
716
+ ne as VideoChapterList,
717
+ or as VideoPlayer,
718
+ de as VideoPlaylistItem,
719
+ le as VideoThumbnailCard,
720
+ ie as VideoTranscript,
721
+ dr as alertVariants,
722
+ cr as badgeVariants,
723
+ ur as buttonVariants,
489
724
  l as cn,
490
- ma as progressVariants
725
+ mr as drawerContentVariants,
726
+ fr as progressVariants,
727
+ xr as scoreQuestion,
728
+ pr as scoreScenarioSubQuestions,
729
+ ue as useCountdown
491
730
  };