@hydralms/components 0.1.3 → 0.3.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 (344) hide show
  1. package/dist/StudentProfile-BVfZMbnV.cjs +1 -0
  2. package/dist/StudentProfile-DeMxdrL3.js +3275 -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/timer-display.d.ts +1 -1
  9. package/dist/assessment-toolbar/types.d.ts +52 -4
  10. package/dist/assessment-toolbar/use-countdown.d.ts +43 -0
  11. package/dist/common/index.d.ts +3 -1
  12. package/dist/common/pagination.d.ts +26 -0
  13. package/dist/common/stepper.d.ts +6 -0
  14. package/dist/common/types.d.ts +38 -0
  15. package/dist/components.css +1 -1
  16. package/dist/content/attachment-list.d.ts +6 -0
  17. package/dist/content/audio-player.d.ts +22 -0
  18. package/dist/content/code-block.d.ts +30 -0
  19. package/dist/content/content-block.d.ts +1 -1
  20. package/dist/content/embed-block.d.ts +28 -0
  21. package/dist/content/index.d.ts +8 -1
  22. package/dist/content/types.d.ts +63 -0
  23. package/dist/curriculum/course-card.d.ts +51 -0
  24. package/dist/curriculum/curriculum-item.d.ts +1 -1
  25. package/dist/curriculum/index.d.ts +2 -0
  26. package/dist/curriculum/types.d.ts +2 -2
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.js +597 -308
  30. package/dist/license/HydraContext.d.ts +16 -0
  31. package/dist/license/ProBadge.d.ts +6 -0
  32. package/dist/license/index.d.ts +7 -0
  33. package/dist/license/tiers.d.ts +3 -0
  34. package/dist/license/useHydraLicense.d.ts +6 -0
  35. package/dist/license/validate.d.ts +13 -0
  36. package/dist/license/withProGate.d.ts +6 -0
  37. package/dist/modules/AssignmentModule/AssignmentModule.d.ts +5 -0
  38. package/dist/modules/AssignmentModule/types.d.ts +69 -0
  39. package/dist/modules/CertificateModule/CertificateModule.d.ts +5 -0
  40. package/dist/modules/CertificateModule/types.d.ts +51 -0
  41. package/dist/modules/CourseCatalogModule/CourseCatalogModule.d.ts +5 -0
  42. package/dist/modules/CourseCatalogModule/types.d.ts +43 -0
  43. package/dist/modules/CoursePlayer/CoursePlayer.d.ts +4 -1
  44. package/dist/modules/DiscussionModule/DiscussionModule.d.ts +5 -0
  45. package/dist/modules/DiscussionModule/types.d.ts +47 -0
  46. package/dist/modules/ExamModule/ExamModule.d.ts +5 -0
  47. package/dist/modules/ExamModule/types.d.ts +55 -0
  48. package/dist/modules/FlashcardLab/FlashcardLab.d.ts +4 -1
  49. package/dist/modules/FlashcardLab/types.d.ts +2 -0
  50. package/dist/modules/GradeCenterModule/GradeCenterModule.d.ts +5 -0
  51. package/dist/modules/GradeCenterModule/types.d.ts +56 -0
  52. package/dist/modules/QuizModule/QuizModule.d.ts +4 -1
  53. package/dist/modules/QuizModule/types.d.ts +10 -14
  54. package/dist/modules/StudentDashboardModule/StudentDashboardModule.d.ts +5 -0
  55. package/dist/modules/StudentDashboardModule/types.d.ts +54 -0
  56. package/dist/modules/StudentProfileModule/StudentProfileModule.d.ts +5 -0
  57. package/dist/modules/StudentProfileModule/types.d.ts +43 -0
  58. package/dist/modules/SurveyModule/SurveyModule.d.ts +5 -0
  59. package/dist/modules/SurveyModule/types.d.ts +51 -0
  60. package/dist/modules/_shared/assessment-intro.d.ts +16 -0
  61. package/dist/modules/_shared/assessment-results.d.ts +23 -0
  62. package/dist/modules/_shared/types.d.ts +10 -0
  63. package/dist/modules/_shared/use-timer.d.ts +9 -0
  64. package/dist/modules/index.d.ts +18 -0
  65. package/dist/modules.cjs +1 -0
  66. package/dist/modules.js +1834 -0
  67. package/dist/progress/achievement-badge.d.ts +6 -0
  68. package/dist/progress/activity-timeline.d.ts +6 -0
  69. package/dist/progress/index.d.ts +4 -1
  70. package/dist/progress/stat-card.d.ts +1 -1
  71. package/dist/progress/streak-badge.d.ts +6 -0
  72. package/dist/progress/types.d.ts +99 -0
  73. package/dist/provider/HydraProvider.d.ts +5 -1
  74. package/dist/questions/choice.d.ts +1 -1
  75. package/dist/questions/confidence-indicator.d.ts +37 -0
  76. package/dist/questions/essay.d.ts +2 -2
  77. package/dist/questions/fill-in-the-blank.d.ts +1 -1
  78. package/dist/questions/hotspot.d.ts +21 -0
  79. package/dist/questions/index.d.ts +11 -1
  80. package/dist/questions/inline-choice.d.ts +21 -0
  81. package/dist/questions/matching.d.ts +22 -0
  82. package/dist/questions/multiple-choice.d.ts +1 -1
  83. package/dist/questions/numeric.d.ts +11 -0
  84. package/dist/questions/ordering.d.ts +12 -0
  85. package/dist/questions/question-renderer.d.ts +1 -1
  86. package/dist/questions/scenario.d.ts +23 -0
  87. package/dist/questions/scoring.d.ts +22 -0
  88. package/dist/questions/spreadsheet.d.ts +29 -0
  89. package/dist/questions/true-false.d.ts +1 -1
  90. package/dist/questions/types.d.ts +106 -1
  91. package/dist/questions/use-drag-reorder.d.ts +17 -0
  92. package/dist/sections/AnnouncementFeed/AnnouncementFeed.d.ts +1 -1
  93. package/dist/sections/AnnouncementFeed/types.d.ts +15 -1
  94. package/dist/sections/AssessmentReview/AssessmentReview.d.ts +1 -1
  95. package/dist/sections/AssessmentReview/types.d.ts +6 -0
  96. package/dist/sections/AssignmentSubmission/AssignmentSubmission.d.ts +1 -1
  97. package/dist/sections/AssignmentSubmission/types.d.ts +6 -0
  98. package/dist/sections/CertificateViewer/CertificateViewer.d.ts +1 -1
  99. package/dist/sections/CertificateViewer/certificate-variants.d.ts +42 -0
  100. package/dist/sections/CertificateViewer/types.d.ts +13 -5
  101. package/dist/sections/CourseCatalog/CourseCatalog.d.ts +2 -0
  102. package/dist/sections/CourseCatalog/types.d.ts +80 -0
  103. package/dist/sections/CourseOutline/CourseOutline.d.ts +1 -1
  104. package/dist/sections/CourseOutline/types.d.ts +6 -0
  105. package/dist/sections/DiscussionThread/DiscussionThread.d.ts +1 -1
  106. package/dist/sections/DiscussionThread/types.d.ts +6 -0
  107. package/dist/sections/EnrollmentWizard/EnrollmentWizard.d.ts +2 -0
  108. package/dist/sections/EnrollmentWizard/types.d.ts +66 -0
  109. package/dist/sections/ExamSession/ExamSession.d.ts +1 -1
  110. package/dist/sections/ExamSession/types.d.ts +12 -1
  111. package/dist/sections/FlashcardStudySession/FlashcardStudySession.d.ts +1 -1
  112. package/dist/sections/FlashcardStudySession/types.d.ts +6 -0
  113. package/dist/sections/ForumBoard/ForumBoard.d.ts +8 -0
  114. package/dist/sections/ForumBoard/types.d.ts +78 -0
  115. package/dist/sections/GradebookTable/GradebookTable.d.ts +1 -1
  116. package/dist/sections/GradebookTable/types.d.ts +14 -0
  117. package/dist/sections/LecturePlayer/LecturePlayer.d.ts +1 -1
  118. package/dist/sections/LecturePlayer/types.d.ts +8 -0
  119. package/dist/sections/LessonPage/LessonPage.d.ts +1 -1
  120. package/dist/sections/LessonPage/types.d.ts +6 -0
  121. package/dist/sections/PracticeQuiz/PracticeQuiz.d.ts +1 -1
  122. package/dist/sections/PracticeQuiz/types.d.ts +6 -0
  123. package/dist/sections/ProgressDashboard/ProgressDashboard.d.ts +1 -1
  124. package/dist/sections/ProgressDashboard/types.d.ts +6 -0
  125. package/dist/sections/QuizSession/QuizSession.d.ts +1 -1
  126. package/dist/sections/QuizSession/types.d.ts +12 -1
  127. package/dist/sections/RequirementsChecklist/RequirementsChecklist.d.ts +8 -0
  128. package/dist/sections/RequirementsChecklist/types.d.ts +43 -0
  129. package/dist/sections/ResourceLibrary/ResourceLibrary.d.ts +1 -1
  130. package/dist/sections/ResourceLibrary/types.d.ts +15 -1
  131. package/dist/sections/RubricView/RubricView.d.ts +9 -0
  132. package/dist/sections/RubricView/types.d.ts +56 -0
  133. package/dist/sections/ScrollableQuiz/ScrollableQuiz.d.ts +1 -1
  134. package/dist/sections/ScrollableQuiz/types.d.ts +6 -0
  135. package/dist/sections/StudentProfile/StudentProfile.d.ts +2 -0
  136. package/dist/sections/StudentProfile/types.d.ts +98 -0
  137. package/dist/sections/SurveyForm/SurveyForm.d.ts +1 -1
  138. package/dist/sections/SurveyForm/types.d.ts +6 -0
  139. package/dist/sections/_shared/merge-answers.d.ts +9 -0
  140. package/dist/sections/_shared/section-shell.d.ts +20 -0
  141. package/dist/sections/_shared/use-assessment-session.d.ts +30 -0
  142. package/dist/sections/index.d.ts +13 -1
  143. package/dist/sections.cjs +1 -1
  144. package/dist/sections.js +282 -1786
  145. package/dist/social/post-card.d.ts +1 -1
  146. package/dist/tabs-BsfVo2Bl.cjs +173 -0
  147. package/dist/tabs-BuY1iNJE.js +22305 -0
  148. package/dist/ui/alert.d.ts +1 -1
  149. package/dist/ui/badge.d.ts +1 -1
  150. package/dist/ui/button.d.ts +1 -1
  151. package/dist/ui/drawer.d.ts +84 -0
  152. package/dist/ui/index.d.ts +5 -0
  153. package/dist/ui/progress.d.ts +1 -1
  154. package/dist/ui/rich-text-editor.d.ts +32 -0
  155. package/dist/ui/rich-text-toolbar.d.ts +8 -0
  156. package/dist/ui/toast.d.ts +43 -0
  157. package/dist/utils/array-utils.d.ts +4 -0
  158. package/dist/utils/debounce.d.ts +5 -1
  159. package/dist/utils/flatten-leaves.d.ts +6 -0
  160. package/dist/utils/format-file-size.d.ts +1 -0
  161. package/dist/utils/format-timestamp.d.ts +1 -0
  162. package/dist/utils/is-empty-html.d.ts +5 -0
  163. package/dist/utils/pick-palette-color.d.ts +19 -0
  164. package/dist/utils/shuffle.d.ts +1 -0
  165. package/dist/utils/string-utils.d.ts +12 -0
  166. package/dist/video/types.d.ts +15 -0
  167. package/dist/video/video-bookmark.d.ts +1 -1
  168. package/dist/video/video-player.d.ts +1 -1
  169. package/dist/video/video-playlist-item.d.ts +1 -1
  170. package/dist/withProGate-BWqcKdPM.js +137 -0
  171. package/dist/withProGate-DX6XqKLp.cjs +1 -0
  172. package/package.json +40 -137
  173. package/src/assessment-toolbar/assessment-toolbar.tsx +54 -49
  174. package/src/assessment-toolbar/index.ts +6 -0
  175. package/src/assessment-toolbar/question-header-bar.tsx +61 -0
  176. package/src/assessment-toolbar/question-materials-drawer.tsx +55 -0
  177. package/src/assessment-toolbar/question-navigator.tsx +13 -36
  178. package/src/assessment-toolbar/timer-display.tsx +6 -5
  179. package/src/assessment-toolbar/types.ts +54 -4
  180. package/src/assessment-toolbar/use-countdown.ts +153 -0
  181. package/src/common/empty-state.tsx +1 -0
  182. package/src/common/index.ts +5 -0
  183. package/src/common/pagination.tsx +135 -0
  184. package/src/common/search-input.tsx +8 -6
  185. package/src/common/stepper.tsx +100 -0
  186. package/src/common/types.ts +41 -0
  187. package/src/content/attachment-list.tsx +92 -0
  188. package/src/content/audio-player.tsx +196 -0
  189. package/src/content/code-block.tsx +113 -0
  190. package/src/content/content-block.tsx +68 -2
  191. package/src/content/embed-block.tsx +78 -0
  192. package/src/content/file-upload-zone.tsx +11 -6
  193. package/src/content/index.ts +9 -0
  194. package/src/content/types.ts +46 -0
  195. package/src/curriculum/course-card.tsx +199 -0
  196. package/src/curriculum/curriculum-item.tsx +9 -5
  197. package/src/curriculum/curriculum-tree.tsx +20 -13
  198. package/src/curriculum/index.ts +2 -0
  199. package/src/curriculum/types.ts +2 -2
  200. package/src/feedback/feedback-banner.tsx +12 -14
  201. package/src/flashcards/flashcard-deck.tsx +1 -9
  202. package/src/flashcards/flashcard.tsx +29 -9
  203. package/src/index.ts +3 -0
  204. package/src/license/HydraContext.tsx +62 -0
  205. package/src/license/ProBadge.tsx +43 -0
  206. package/src/license/index.ts +7 -0
  207. package/src/license/tiers.ts +24 -0
  208. package/src/license/useHydraLicense.ts +10 -0
  209. package/src/license/validate.ts +90 -0
  210. package/src/license/withProGate.tsx +21 -0
  211. package/src/modules/AssignmentModule/AssignmentModule.tsx +314 -0
  212. package/src/modules/AssignmentModule/types.ts +77 -0
  213. package/src/modules/CertificateModule/CertificateModule.tsx +173 -0
  214. package/src/modules/CertificateModule/types.ts +49 -0
  215. package/src/modules/CourseCatalogModule/CourseCatalogModule.tsx +126 -0
  216. package/src/modules/CourseCatalogModule/types.ts +47 -0
  217. package/src/modules/CoursePlayer/CoursePlayer.tsx +80 -69
  218. package/src/modules/DiscussionModule/DiscussionModule.tsx +145 -0
  219. package/src/modules/DiscussionModule/types.ts +54 -0
  220. package/src/modules/ExamModule/ExamModule.tsx +151 -0
  221. package/src/modules/ExamModule/types.ts +57 -0
  222. package/src/modules/FlashcardLab/FlashcardLab.tsx +39 -21
  223. package/src/modules/FlashcardLab/types.ts +2 -0
  224. package/src/modules/GradeCenterModule/GradeCenterModule.tsx +174 -0
  225. package/src/modules/GradeCenterModule/types.ts +65 -0
  226. package/src/modules/QuizModule/QuizModule.tsx +58 -178
  227. package/src/modules/QuizModule/types.ts +10 -15
  228. package/src/modules/StudentDashboardModule/StudentDashboardModule.tsx +117 -0
  229. package/src/modules/StudentDashboardModule/types.ts +56 -0
  230. package/src/modules/StudentProfileModule/StudentProfileModule.tsx +289 -0
  231. package/src/modules/StudentProfileModule/types.ts +45 -0
  232. package/src/modules/SurveyModule/SurveyModule.tsx +185 -0
  233. package/src/modules/SurveyModule/types.ts +53 -0
  234. package/src/modules/_shared/assessment-intro.tsx +75 -0
  235. package/src/modules/_shared/assessment-results.tsx +133 -0
  236. package/src/modules/_shared/types.ts +11 -0
  237. package/src/modules/_shared/use-timer.ts +49 -0
  238. package/src/modules/index.ts +33 -0
  239. package/src/progress/achievement-badge.tsx +52 -0
  240. package/src/progress/activity-timeline.tsx +84 -0
  241. package/src/progress/grade-indicator.tsx +9 -1
  242. package/src/progress/index.ts +7 -0
  243. package/src/progress/progress-ring.tsx +2 -1
  244. package/src/progress/stat-card.tsx +37 -18
  245. package/src/progress/streak-badge.tsx +35 -0
  246. package/src/progress/types.ts +103 -0
  247. package/src/provider/HydraProvider.tsx +15 -6
  248. package/src/questions/choice.tsx +19 -14
  249. package/src/questions/confidence-indicator.tsx +107 -0
  250. package/src/questions/essay.tsx +28 -28
  251. package/src/questions/fill-in-the-blank.tsx +20 -19
  252. package/src/questions/hotspot.tsx +154 -0
  253. package/src/questions/index.ts +18 -0
  254. package/src/questions/inline-choice.tsx +152 -0
  255. package/src/questions/matching.tsx +229 -0
  256. package/src/questions/multiple-choice.tsx +19 -14
  257. package/src/questions/numeric.tsx +106 -0
  258. package/src/questions/ordering.tsx +167 -0
  259. package/src/questions/question-renderer.tsx +24 -2
  260. package/src/questions/scenario.tsx +140 -0
  261. package/src/questions/scoring.ts +201 -0
  262. package/src/questions/spreadsheet.tsx +260 -0
  263. package/src/questions/true-false.tsx +19 -14
  264. package/src/questions/types.ts +123 -1
  265. package/src/questions/use-drag-reorder.ts +80 -0
  266. package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +66 -23
  267. package/src/sections/AnnouncementFeed/types.ts +15 -1
  268. package/src/sections/AssessmentReview/AssessmentReview.tsx +50 -2
  269. package/src/sections/AssessmentReview/types.ts +6 -0
  270. package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +44 -6
  271. package/src/sections/AssignmentSubmission/types.ts +6 -0
  272. package/src/sections/CertificateViewer/CertificateViewer.tsx +215 -60
  273. package/src/sections/CertificateViewer/certificate-variants.tsx +170 -0
  274. package/src/sections/CertificateViewer/types.ts +19 -5
  275. package/src/sections/CourseCatalog/CourseCatalog.tsx +220 -0
  276. package/src/sections/CourseCatalog/types.ts +76 -0
  277. package/src/sections/CourseOutline/CourseOutline.tsx +45 -14
  278. package/src/sections/CourseOutline/types.ts +6 -0
  279. package/src/sections/DiscussionThread/DiscussionThread.tsx +55 -11
  280. package/src/sections/DiscussionThread/types.ts +6 -0
  281. package/src/sections/EnrollmentWizard/EnrollmentWizard.tsx +343 -0
  282. package/src/sections/EnrollmentWizard/types.ts +65 -0
  283. package/src/sections/ExamSession/ExamSession.tsx +125 -82
  284. package/src/sections/ExamSession/types.ts +12 -1
  285. package/src/sections/FlashcardStudySession/FlashcardStudySession.tsx +53 -36
  286. package/src/sections/FlashcardStudySession/types.ts +6 -0
  287. package/src/sections/ForumBoard/ForumBoard.tsx +342 -0
  288. package/src/sections/ForumBoard/types.ts +81 -0
  289. package/src/sections/GradebookTable/GradebookTable.tsx +55 -2
  290. package/src/sections/GradebookTable/types.ts +14 -0
  291. package/src/sections/LecturePlayer/LecturePlayer.tsx +63 -37
  292. package/src/sections/LecturePlayer/types.ts +8 -0
  293. package/src/sections/LessonPage/LessonPage.tsx +40 -13
  294. package/src/sections/LessonPage/types.ts +6 -0
  295. package/src/sections/PracticeQuiz/PracticeQuiz.tsx +119 -98
  296. package/src/sections/PracticeQuiz/types.ts +6 -0
  297. package/src/sections/ProgressDashboard/ProgressDashboard.tsx +121 -67
  298. package/src/sections/ProgressDashboard/types.ts +6 -0
  299. package/src/sections/QuizSession/QuizSession.tsx +115 -67
  300. package/src/sections/QuizSession/types.ts +12 -1
  301. package/src/sections/RequirementsChecklist/RequirementsChecklist.tsx +147 -0
  302. package/src/sections/RequirementsChecklist/types.ts +44 -0
  303. package/src/sections/ResourceLibrary/ResourceLibrary.tsx +68 -17
  304. package/src/sections/ResourceLibrary/types.ts +15 -1
  305. package/src/sections/RubricView/RubricView.tsx +174 -0
  306. package/src/sections/RubricView/types.ts +58 -0
  307. package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +58 -23
  308. package/src/sections/ScrollableQuiz/types.ts +6 -0
  309. package/src/sections/StudentProfile/StudentProfile.tsx +279 -0
  310. package/src/sections/StudentProfile/types.ts +99 -0
  311. package/src/sections/SurveyForm/SurveyForm.tsx +40 -10
  312. package/src/sections/SurveyForm/types.ts +6 -0
  313. package/src/sections/_shared/merge-answers.ts +22 -0
  314. package/src/sections/_shared/section-shell.tsx +64 -0
  315. package/src/sections/_shared/use-assessment-session.ts +125 -0
  316. package/src/sections/index.ts +42 -1
  317. package/src/social/post-card.tsx +8 -19
  318. package/src/social/user-avatar.tsx +10 -5
  319. package/src/styles/globals.css +52 -41
  320. package/src/ui/badge.tsx +8 -0
  321. package/src/ui/drawer.tsx +600 -0
  322. package/src/ui/index.ts +21 -0
  323. package/src/ui/progress.tsx +4 -0
  324. package/src/ui/rich-text-editor.tsx +119 -0
  325. package/src/ui/rich-text-toolbar.tsx +157 -0
  326. package/src/ui/toast.tsx +170 -0
  327. package/src/utils/array-utils.ts +17 -0
  328. package/src/utils/debounce.ts +8 -2
  329. package/src/utils/flatten-leaves.ts +17 -0
  330. package/src/utils/format-file-size.ts +5 -0
  331. package/src/utils/format-timestamp.ts +13 -0
  332. package/src/utils/is-empty-html.ts +7 -0
  333. package/src/utils/pick-palette-color.ts +33 -0
  334. package/src/utils/shuffle.ts +8 -0
  335. package/src/utils/string-utils.ts +30 -0
  336. package/src/video/types.ts +16 -0
  337. package/src/video/video-bookmark.tsx +4 -3
  338. package/src/video/video-chapter-list.tsx +9 -4
  339. package/src/video/video-player.tsx +24 -5
  340. package/src/video/video-playlist-item.tsx +8 -3
  341. package/src/video/video-thumbnail-card.tsx +4 -0
  342. package/src/video/video-transcript.tsx +8 -5
  343. package/dist/table-BrS5cDQu.js +0 -2510
  344. package/dist/table-D6AkBBEo.cjs +0 -1
@@ -0,0 +1,6 @@
1
+ import { AchievementBadgeProps } from './types';
2
+ /**
3
+ * AchievementBadge displays a single achievement or badge earned by a learner,
4
+ * with support for locked/earned states and metal-tier variants.
5
+ */
6
+ export declare function AchievementBadge({ title, description, icon, earnedDate, locked, variant, className, style, }: AchievementBadgeProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ActivityTimelineProps } from './types';
2
+ /**
3
+ * ActivityTimeline renders a vertical timeline of activity events
4
+ * with icons, timestamps, and an optional "load more" action.
5
+ */
6
+ export declare function ActivityTimeline({ events, limit, showLoadMore, onLoadMore, emptyMessage, className, style, }: ActivityTimelineProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,7 @@
1
1
  export { ProgressRing } from './progress-ring';
2
2
  export { GradeIndicator } from './grade-indicator';
3
3
  export { StatCard } from './stat-card';
4
- export type { ProgressRingProps, GradeIndicatorProps, StatCardProps, } from './types';
4
+ export { AchievementBadge } from './achievement-badge';
5
+ export { StreakBadge } from './streak-badge';
6
+ export { ActivityTimeline } from './activity-timeline';
7
+ export type { ProgressRingProps, GradeIndicatorProps, StatCardProps, AchievementBadgeProps, StreakBadgeProps, ActivityTimelineProps, TimelineEvent, } from './types';
@@ -1,2 +1,2 @@
1
1
  import { StatCardProps } from './types';
2
- export declare function StatCard({ icon, label, value, subtitle, trend, className, style, }: StatCardProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare const StatCard: import('react').NamedExoticComponent<StatCardProps>;
@@ -0,0 +1,6 @@
1
+ import { StreakBadgeProps } from './types';
2
+ /**
3
+ * StreakBadge displays a compact learning streak indicator with
4
+ * a fire icon and day count.
5
+ */
6
+ export declare function StreakBadge({ currentStreak, longestStreak, unit, showLongest, className, style, }: StreakBadgeProps): import("react/jsx-runtime").JSX.Element;
@@ -57,6 +57,8 @@ export interface StatCardProps {
57
57
  icon?: ReactNode;
58
58
  /** Stat label */
59
59
  label: string;
60
+ /** Short description displayed below the label */
61
+ description?: string;
60
62
  /** Stat value */
61
63
  value: string | number;
62
64
  /** Secondary text below the value */
@@ -66,6 +68,103 @@ export interface StatCardProps {
66
68
  value: number;
67
69
  direction: "up" | "down" | "flat";
68
70
  };
71
+ /** Accent color CSS value for the icon background. Defaults to primary. */
72
+ accent?: string;
73
+ /** CSS class name for the root element */
74
+ className?: string;
75
+ /** Inline styles for the root element */
76
+ style?: React.CSSProperties;
77
+ }
78
+ /**
79
+ * AchievementBadge displays a single achievement or badge earned by a learner,
80
+ * with support for locked/earned states and metal-tier variants.
81
+ *
82
+ * @example
83
+ * <AchievementBadge
84
+ * title="Quiz Master"
85
+ * description="Pass 10 quizzes with 90%+ score"
86
+ * variant="gold"
87
+ * earnedDate="2025-12-01T00:00:00Z"
88
+ * />
89
+ */
90
+ export interface AchievementBadgeProps {
91
+ /** Achievement title */
92
+ title: string;
93
+ /** Optional description of how to earn the achievement */
94
+ description?: string;
95
+ /** Custom icon to display. Falls back to Trophy icon */
96
+ icon?: ReactNode;
97
+ /** ISO date string of when the achievement was earned */
98
+ earnedDate?: string;
99
+ /** Whether the achievement is locked (not yet earned). @default false */
100
+ locked?: boolean;
101
+ /** Visual tier variant. @default 'default' */
102
+ variant?: "default" | "gold" | "silver" | "bronze";
103
+ /** CSS class name for the root element */
104
+ className?: string;
105
+ /** Inline styles for the root element */
106
+ style?: React.CSSProperties;
107
+ }
108
+ /**
109
+ * StreakBadge displays a compact learning streak indicator with
110
+ * a fire icon and day count.
111
+ *
112
+ * @example
113
+ * <StreakBadge currentStreak={7} longestStreak={14} showLongest />
114
+ */
115
+ export interface StreakBadgeProps {
116
+ /** Current active streak count */
117
+ currentStreak: number;
118
+ /** All-time longest streak count */
119
+ longestStreak?: number;
120
+ /** Unit label for the streak count. @default "days" */
121
+ unit?: string;
122
+ /** Whether to show the longest streak subtitle. @default false */
123
+ showLongest?: boolean;
124
+ /** CSS class name for the root element */
125
+ className?: string;
126
+ /** Inline styles for the root element */
127
+ style?: React.CSSProperties;
128
+ }
129
+ /**
130
+ * A single event in an ActivityTimeline.
131
+ */
132
+ export interface TimelineEvent {
133
+ /** Unique identifier */
134
+ uid: string;
135
+ /** Event type — used for default icon selection */
136
+ type: string;
137
+ /** Event title */
138
+ title: string;
139
+ /** Optional longer description */
140
+ description?: string;
141
+ /** ISO 8601 timestamp */
142
+ timestamp: string;
143
+ /** Optional custom icon (overrides type-based default) */
144
+ icon?: ReactNode;
145
+ }
146
+ /**
147
+ * ActivityTimeline renders a vertical timeline of activity events
148
+ * with icons, timestamps, and an optional "load more" action.
149
+ *
150
+ * @example
151
+ * <ActivityTimeline
152
+ * events={[
153
+ * { uid: "1", type: "lesson_completed", title: "Completed Lesson 3", timestamp: "2025-03-01T12:00:00Z" },
154
+ * ]}
155
+ * />
156
+ */
157
+ export interface ActivityTimelineProps {
158
+ /** List of activity events to display */
159
+ events: TimelineEvent[];
160
+ /** Maximum number of events to display. When set, truncates the list. */
161
+ limit?: number;
162
+ /** Whether to show a "Load more" button at the bottom. @default false */
163
+ showLoadMore?: boolean;
164
+ /** Called when the user clicks "Load more" */
165
+ onLoadMore?: () => void;
166
+ /** Message displayed when the events list is empty. @default "No recent activity" */
167
+ emptyMessage?: string;
69
168
  /** CSS class name for the root element */
70
169
  className?: string;
71
170
  /** Inline styles for the root element */
@@ -3,7 +3,11 @@ export interface HydraProviderProps {
3
3
  children: ReactNode;
4
4
  /** Controls color mode. Defaults to `"dark"`. Set to `"light"` to use the light theme. */
5
5
  colorMode?: "light" | "dark";
6
+ /** HydraLMS Pro license key. Omit for free tier. */
7
+ licenseKey?: string;
8
+ /** Validation endpoint URL. When empty (default), all features are unlocked (dev mode). */
9
+ validateUrl?: string;
6
10
  className?: string;
7
11
  style?: React.CSSProperties;
8
12
  }
9
- export declare function HydraProvider({ children, colorMode, className, style, }: HydraProviderProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function HydraProvider({ children, colorMode, licenseKey, validateUrl, className, style, }: HydraProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const Choice: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const Choice: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,37 @@
1
+ import { ReactNode } from 'react';
2
+ /** A single confidence level option. */
3
+ export interface ConfidenceLevel {
4
+ /** Value stored in SessionAnswer.confidence */
5
+ value: string;
6
+ /** Display label */
7
+ label: string;
8
+ /** Optional icon */
9
+ icon?: ReactNode;
10
+ }
11
+ /**
12
+ * ConfidenceIndicator lets learners self-report their answer confidence,
13
+ * supporting metacognitive assessment strategies.
14
+ *
15
+ * @example
16
+ * <ConfidenceIndicator
17
+ * value={answer.confidence}
18
+ * onChange={(level) => updateConfidence(level)}
19
+ * />
20
+ */
21
+ export interface ConfidenceIndicatorProps {
22
+ /** Currently selected confidence level value */
23
+ value: string | null;
24
+ /** Called when the user selects a confidence level */
25
+ onChange: (level: string) => void;
26
+ /** Custom confidence levels (defaults to 3 levels) */
27
+ levels?: ConfidenceLevel[];
28
+ /** When true, disables interaction */
29
+ disabled?: boolean;
30
+ /** When true, shows selected state but disables interaction */
31
+ readOnly?: boolean;
32
+ /** CSS class name for the root element */
33
+ className?: string;
34
+ /** Inline styles for the root element */
35
+ style?: React.CSSProperties;
36
+ }
37
+ export declare const ConfidenceIndicator: import('react').NamedExoticComponent<ConfidenceIndicatorProps>;
@@ -1,6 +1,6 @@
1
1
  import { QuestionProps } from './types';
2
2
  /**
3
- * Essay renders a long-form text input question with a multiline textarea.
3
+ * Essay renders a long-form rich text input question.
4
4
  *
5
5
  * @example
6
6
  * <Essay
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const Essay: ({ question, sessionAnswers, onAnswer, readOnly, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const Essay: import('react').NamedExoticComponent<QuestionProps>;
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const FillInTheBlank: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const FillInTheBlank: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,21 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Hotspot renders an image with clickable regions for selection.
4
+ *
5
+ * Regions are positioned using percentage-based coordinates so they scale with the image.
6
+ *
7
+ * @example
8
+ * <Hotspot
9
+ * question={{
10
+ * uid: "q1",
11
+ * type: "hotspot",
12
+ * content: "Click on the heart.",
13
+ * hotspotImageUrl: "/anatomy.png",
14
+ * hotspotRegions: [
15
+ * { uid: "r1", shape: "circle", coords: [50, 40, 8], isCorrect: true, label: "Heart" },
16
+ * ],
17
+ * }}
18
+ * onAnswer={(answers) => handleAnswer(answers)}
19
+ * />
20
+ */
21
+ export declare const Hotspot: import('react').NamedExoticComponent<QuestionProps>;
@@ -4,4 +4,14 @@ export { Choice } from './choice';
4
4
  export { TrueFalse } from './true-false';
5
5
  export { FillInTheBlank } from './fill-in-the-blank';
6
6
  export { Essay } from './essay';
7
- export type { QuestionProps, QuestionData, QuestionTypeEnum, AnswerOption, SessionAnswer, } from './types';
7
+ export { Numeric } from './numeric';
8
+ export { Ordering } from './ordering';
9
+ export { Matching } from './matching';
10
+ export { Hotspot } from './hotspot';
11
+ export { InlineChoice } from './inline-choice';
12
+ export { Scenario } from './scenario';
13
+ export { Spreadsheet } from './spreadsheet';
14
+ export { scoreQuestion, scoreScenarioSubQuestions } from './scoring';
15
+ export { ConfidenceIndicator } from './confidence-indicator';
16
+ export type { ConfidenceIndicatorProps, ConfidenceLevel } from './confidence-indicator';
17
+ export type { QuestionProps, QuestionData, QuestionTypeEnum, QuestionMaterial, AnswerOption, SessionAnswer, MatchingPair, HotspotRegion, InlineBlank, ScenarioScoringMode, SpreadsheetColumn, SpreadsheetCell, SpreadsheetRow, } from './types';
@@ -0,0 +1,21 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * InlineChoice renders a cloze-style passage with embedded dropdown blanks.
4
+ *
5
+ * Content should contain `{{blank:uid}}` markers that correspond to entries in `question.inlineBlanks`.
6
+ *
7
+ * @example
8
+ * <InlineChoice
9
+ * question={{
10
+ * uid: "q1",
11
+ * type: "inline_choice",
12
+ * content: "The capital of France is {{blank:b1}}.",
13
+ * inlineBlanks: [{ uid: "b1", sequence: 0, options: [
14
+ * { uid: "o1", content: "Paris", isCorrect: true },
15
+ * { uid: "o2", content: "London" },
16
+ * ]}],
17
+ * }}
18
+ * onAnswer={(answers) => handleAnswer(answers)}
19
+ * />
20
+ */
21
+ export declare const InlineChoice: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,22 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Matching renders a two-column matching question with dropdown selects and optional drag-and-drop.
4
+ *
5
+ * Each item (left column) must be matched to its correct target (right column).
6
+ * The dropdown is the primary accessible interaction; drag-and-drop is progressive enhancement.
7
+ *
8
+ * @example
9
+ * <Matching
10
+ * question={{
11
+ * uid: "q1",
12
+ * type: "matching",
13
+ * content: "Match each country to its capital.",
14
+ * matchingPairs: [
15
+ * { uid: "p1", item: "France", target: "Paris", sequence: 0 },
16
+ * { uid: "p2", item: "Germany", target: "Berlin", sequence: 1 },
17
+ * ],
18
+ * }}
19
+ * onAnswer={(answers) => handleAnswer(answers)}
20
+ * />
21
+ */
22
+ export declare const Matching: import('react').NamedExoticComponent<QuestionProps>;
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const MultipleChoice: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const MultipleChoice: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,11 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Numeric renders a number input question with optional tolerance and unit display.
4
+ *
5
+ * @example
6
+ * <Numeric
7
+ * question={{ uid: "q1", type: "numeric", content: "What is pi to 2 decimal places?", numericAnswer: 3.14, numericTolerance: 0.01 }}
8
+ * onAnswer={(answers) => handleAnswer(answers)}
9
+ * />
10
+ */
11
+ export declare const Numeric: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,12 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Ordering renders a drag-and-drop reorderable list of items.
4
+ * The correct order is determined by each answer's `sequence` field.
5
+ *
6
+ * @example
7
+ * <Ordering
8
+ * question={question}
9
+ * onAnswer={(answers) => handleAnswer(answers)}
10
+ * />
11
+ */
12
+ export declare const Ordering: import('react').NamedExoticComponent<QuestionProps>;
@@ -9,4 +9,4 @@ import { QuestionProps } from './types';
9
9
  * onAnswer={handleAnswer}
10
10
  * />
11
11
  */
12
- export declare const QuestionRenderer: (props: QuestionProps) => import("react/jsx-runtime").JSX.Element;
12
+ export declare const QuestionRenderer: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,23 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Scenario renders a shared context/stimulus with multiple sub-questions.
4
+ *
5
+ * Sub-questions can be any existing question type (choice, numeric, matching, etc.).
6
+ * The shared context is displayed prominently above all sub-questions.
7
+ *
8
+ * @example
9
+ * <Scenario
10
+ * question={{
11
+ * uid: "s1",
12
+ * type: "scenario",
13
+ * content: "<p>Read the following passage and answer the questions below.</p>",
14
+ * scenarioQuestions: [
15
+ * { uid: "sq1", type: "choice", content: "What is the main idea?", answers: [...] },
16
+ * { uid: "sq2", type: "true_false", content: "The author agrees.", answers: [...] },
17
+ * ],
18
+ * scenarioScoringMode: "per_question",
19
+ * }}
20
+ * onAnswer={(answers) => handleAnswer(answers)}
21
+ * />
22
+ */
23
+ export declare const Scenario: import('react').NamedExoticComponent<QuestionProps>;
@@ -0,0 +1,22 @@
1
+ import { QuestionData, SessionAnswer } from './types';
2
+ /**
3
+ * Scores a single question against the user's answers.
4
+ *
5
+ * @returns `true` if correct, `false` if incorrect, `null` if the question is not auto-gradable.
6
+ */
7
+ export declare function scoreQuestion(question: QuestionData, userAnswers: SessionAnswer[]): boolean | null;
8
+ /**
9
+ * Scores an entire set of questions against user answers.
10
+ *
11
+ * @returns An object with correct count, total gradable, and percentage.
12
+ */
13
+ export declare function scoreAssessment(questions: QuestionData[], answers: SessionAnswer[]): {
14
+ correct: number;
15
+ total: number;
16
+ percentage: number;
17
+ };
18
+ /**
19
+ * Scores individual sub-questions within a scenario.
20
+ * Returns a Map of sub-question UID to score (`true`/`false`/`null`).
21
+ */
22
+ export declare function scoreScenarioSubQuestions(question: QuestionData, userAnswers: SessionAnswer[]): Map<string, boolean | null>;
@@ -0,0 +1,29 @@
1
+ import { QuestionProps } from './types';
2
+ /**
3
+ * Spreadsheet renders a grid-based question for accounting and tabular data entry.
4
+ * Students fill in editable cells while locked cells display pre-filled values.
5
+ * Each cell is graded independently with support for numeric tolerance.
6
+ *
7
+ * @example
8
+ * <Spreadsheet
9
+ * question={{
10
+ * uid: "q1",
11
+ * type: "spreadsheet",
12
+ * content: "Complete the trial balance:",
13
+ * spreadsheetColumns: [
14
+ * { uid: "col-acct", label: "Account", type: "text", width: 14 },
15
+ * { uid: "col-dr", label: "Debit ($)", type: "currency", width: 9 },
16
+ * { uid: "col-cr", label: "Credit ($)", type: "currency", width: 9 },
17
+ * ],
18
+ * spreadsheetRows: [
19
+ * { uid: "r1", cells: [
20
+ * { uid: "r1-acct", columnUid: "col-acct", locked: true, value: "Cash" },
21
+ * { uid: "r1-dr", columnUid: "col-dr", locked: false, correctAnswer: "5000" },
22
+ * { uid: "r1-cr", columnUid: "col-cr", locked: true, value: "" },
23
+ * ]},
24
+ * ],
25
+ * }}
26
+ * onAnswer={(answers) => handleAnswer(answers)}
27
+ * />
28
+ */
29
+ export declare const Spreadsheet: import('react').NamedExoticComponent<QuestionProps>;
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const TrueFalse: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const TrueFalse: import('react').NamedExoticComponent<QuestionProps>;
@@ -1,4 +1,6 @@
1
- export type QuestionTypeEnum = "multiple_choice" | "choice" | "true_false" | "fill_in_the_blank" | "essay";
1
+ export type QuestionTypeEnum = "multiple_choice" | "choice" | "true_false" | "fill_in_the_blank" | "essay" | "matching" | "ordering" | "numeric" | "hotspot" | "inline_choice" | "scenario" | "spreadsheet";
2
+ /** Scoring strategy for scenario questions. */
3
+ export type ScenarioScoringMode = "per_question" | "all_or_nothing";
2
4
  export interface AnswerOption {
3
5
  uid: string;
4
6
  content: string;
@@ -12,12 +14,115 @@ export interface SessionAnswer {
12
14
  content?: string;
13
15
  confidence?: string;
14
16
  }
17
+ /** A pair linking a left-side item to its correct right-side target. */
18
+ export interface MatchingPair {
19
+ uid: string;
20
+ /** Left-side item content (HTML) */
21
+ item: string;
22
+ /** Right-side target content (HTML) */
23
+ target: string;
24
+ sequence: number;
25
+ }
26
+ /** A clickable region on a hotspot image. Coordinates are percentages (0–100). */
27
+ export interface HotspotRegion {
28
+ uid: string;
29
+ shape: "rect" | "circle";
30
+ /** rect: [x, y, width, height]; circle: [centerX, centerY, radius] */
31
+ coords: number[];
32
+ isCorrect?: boolean;
33
+ label?: string;
34
+ }
35
+ /** A dropdown blank embedded in an inline-choice (cloze) passage. */
36
+ export interface InlineBlank {
37
+ uid: string;
38
+ options: {
39
+ uid: string;
40
+ content: string;
41
+ isCorrect?: boolean;
42
+ }[];
43
+ sequence: number;
44
+ }
45
+ /** A column definition for a spreadsheet question. */
46
+ export interface SpreadsheetColumn {
47
+ uid: string;
48
+ /** Column header text */
49
+ label: string;
50
+ /** Data type hint for input rendering and scoring */
51
+ type: "text" | "numeric" | "currency";
52
+ /** Column width in rems (default 8) */
53
+ width?: number;
54
+ }
55
+ /** A single cell in a spreadsheet row. */
56
+ export interface SpreadsheetCell {
57
+ /** Unique identifier — becomes the answerUid in SessionAnswer */
58
+ uid: string;
59
+ /** Which column this cell belongs to */
60
+ columnUid: string;
61
+ /** When true, cell is pre-filled and not editable */
62
+ locked: boolean;
63
+ /** Display value for locked cells, or pre-fill for editable cells */
64
+ value?: string;
65
+ /** Expected answer for grading (editable cells only) */
66
+ correctAnswer?: string;
67
+ /** Acceptable numeric deviation (default 0 = exact match) */
68
+ tolerance?: number;
69
+ /** Hint shown in review mode (e.g., "= Revenue – Expenses") */
70
+ formula?: string;
71
+ }
72
+ /** A row in a spreadsheet question grid. */
73
+ export interface SpreadsheetRow {
74
+ uid: string;
75
+ /** Optional row header label (e.g., "Cash", "Accounts Receivable") */
76
+ label?: string;
77
+ /** Ordered cells — one per column */
78
+ cells: SpreadsheetCell[];
79
+ /** Renders as a bold section divider row */
80
+ isHeader?: boolean;
81
+ /** Renders in table footer with top border */
82
+ isTotals?: boolean;
83
+ }
84
+ /** Content blocks associated with a question for open-book reference. */
85
+ export interface QuestionMaterial {
86
+ /** UID of the question this material is linked to */
87
+ questionUid: string;
88
+ /** Display label for the material group (e.g., "Chapter 3: Bonds") */
89
+ label?: string;
90
+ /** Content blocks to render in the materials drawer */
91
+ blocks: import('../content/types').LessonBlock[];
92
+ }
15
93
  export interface QuestionData {
16
94
  uid: string;
17
95
  type: QuestionTypeEnum;
96
+ /** Question prompt (HTML) */
18
97
  content: string;
98
+ /** Explanation shown in review mode (HTML) */
19
99
  explanation?: string;
100
+ /** Answer options for choice / multiple_choice / true_false / ordering */
20
101
  answers?: AnswerOption[];
102
+ /** Matching-specific: pairs of items and targets */
103
+ matchingPairs?: MatchingPair[];
104
+ /** Numeric-specific: correct answer */
105
+ numericAnswer?: number;
106
+ /** Numeric-specific: acceptable deviation (default 0 = exact) */
107
+ numericTolerance?: number;
108
+ /** Numeric-specific: unit label displayed after input */
109
+ numericUnit?: string;
110
+ /** Hotspot-specific: image URL */
111
+ hotspotImageUrl?: string;
112
+ /** Hotspot-specific: clickable regions */
113
+ hotspotRegions?: HotspotRegion[];
114
+ /** Hotspot-specific: allow selecting multiple regions */
115
+ hotspotMultiSelect?: boolean;
116
+ /** InlineChoice-specific: dropdown blanks embedded in content */
117
+ inlineBlanks?: InlineBlank[];
118
+ /** Scenario-specific: sub-questions grouped under this scenario's shared context */
119
+ scenarioQuestions?: QuestionData[];
120
+ /** Scenario-specific: how the scenario is scored (default "per_question") */
121
+ scenarioScoringMode?: ScenarioScoringMode;
122
+ /** Spreadsheet-specific: column definitions */
123
+ spreadsheetColumns?: SpreadsheetColumn[];
124
+ /** Spreadsheet-specific: row data with cells */
125
+ spreadsheetRows?: SpreadsheetRow[];
21
126
  }
22
127
  /**
23
128
  * Shared props interface for all question type components.
@@ -0,0 +1,17 @@
1
+ interface UseDragReorderOptions<T> {
2
+ items: T[];
3
+ onReorder: (items: T[]) => void;
4
+ disabled?: boolean;
5
+ }
6
+ export declare function useDragReorder<T>({ items, onReorder, disabled, }: UseDragReorderOptions<T>): {
7
+ getDragProps: (index: number) => {
8
+ draggable: boolean;
9
+ onDragStart: (e: React.DragEvent) => void;
10
+ onDragOver: (e: React.DragEvent) => void;
11
+ onDrop: (e: React.DragEvent) => void;
12
+ onDragEnd: () => void;
13
+ };
14
+ dragIndex: number | null;
15
+ dragOverIndex: number | null;
16
+ };
17
+ export {};
@@ -1,2 +1,2 @@
1
1
  import { AnnouncementFeedProps } from './types';
2
- export declare function AnnouncementFeed({ announcements, onMarkRead, onSelect, showAvatars, previewLines, emptyMessage, readOnly, className, style, }: AnnouncementFeedProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AnnouncementFeed({ announcements, onMarkRead, onSelect, showAvatars, previewLines, emptyMessage, readOnly, isLoading, error, onRetry, pageSize, currentPage, totalItems, onPageChange, className, style, }: AnnouncementFeedProps): import("react/jsx-runtime").JSX.Element;
@@ -25,6 +25,20 @@ export interface AnnouncementFeedProps {
25
25
  emptyMessage?: string;
26
26
  /** When true, disables interactions */
27
27
  readOnly?: boolean;
28
+ /** Render skeleton placeholders instead of content */
29
+ isLoading?: boolean;
30
+ /** Error message — renders an error state with optional retry */
31
+ error?: string | null;
32
+ /** Called when the user clicks retry in the error state */
33
+ onRetry?: () => void;
34
+ /** Number of items per page (enables pagination when set with onPageChange) */
35
+ pageSize?: number;
36
+ /** Current page (1-indexed) */
37
+ currentPage?: number;
38
+ /** Total number of items (for server-side pagination) */
39
+ totalItems?: number;
40
+ /** Called when the user navigates to a different page */
41
+ onPageChange?: (page: number) => void;
28
42
  /** CSS class name for the root element */
29
43
  className?: string;
30
44
  /** Inline styles for the root element */
@@ -35,7 +49,7 @@ export interface Announcement {
35
49
  uid: string;
36
50
  /** Announcement title */
37
51
  title: string;
38
- /** Announcement body content */
52
+ /** Announcement body content. May contain HTML from a rich-text editor. */
39
53
  content: string;
40
54
  /** Author information */
41
55
  author: {
@@ -1,2 +1,2 @@
1
1
  import { AssessmentReviewProps } from './types';
2
- export declare function AssessmentReview({ questions, sessionAnswers, score, questionGroups, showCorrectAnswers, className, style, }: AssessmentReviewProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AssessmentReview({ questions, sessionAnswers, score, questionGroups, showCorrectAnswers, isLoading, error, onRetry, className, style, }: AssessmentReviewProps): import("react/jsx-runtime").JSX.Element;
@@ -33,6 +33,12 @@ export interface AssessmentReviewProps {
33
33
  * @default true
34
34
  */
35
35
  showCorrectAnswers?: boolean;
36
+ /** Render skeleton placeholders instead of content */
37
+ isLoading?: boolean;
38
+ /** Error message — renders an error state with optional retry */
39
+ error?: string | null;
40
+ /** Called when the user clicks retry in the error state */
41
+ onRetry?: () => void;
36
42
  /** CSS class name for the root element */
37
43
  className?: string;
38
44
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { AssignmentSubmissionProps } from './types';
2
- export declare function AssignmentSubmission({ title, instructions, dueDate, maxScore, status, submissionTypes, existingSubmission, fileConstraints, onSubmit, onSaveDraft, grade, isSubmitting, readOnly, className, style, }: AssignmentSubmissionProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function AssignmentSubmission({ title, instructions, dueDate, maxScore, status, submissionTypes, existingSubmission, fileConstraints, onSubmit, onSaveDraft, grade, isSubmitting, readOnly, isLoading, error, onRetry, className, style, }: AssignmentSubmissionProps): import("react/jsx-runtime").JSX.Element;