@hydralms/components 0.2.0 → 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 (283) hide show
  1. package/dist/StudentProfile-BVfZMbnV.cjs +1 -0
  2. package/dist/StudentProfile-DeMxdrL3.js +3275 -0
  3. package/dist/assessment-toolbar/question-navigator.d.ts +1 -1
  4. package/dist/assessment-toolbar/timer-display.d.ts +1 -1
  5. package/dist/common/index.d.ts +2 -1
  6. package/dist/common/pagination.d.ts +26 -0
  7. package/dist/common/types.d.ts +1 -0
  8. package/dist/components.css +1 -1
  9. package/dist/content/audio-player.d.ts +22 -0
  10. package/dist/content/code-block.d.ts +30 -0
  11. package/dist/content/embed-block.d.ts +28 -0
  12. package/dist/content/index.d.ts +6 -0
  13. package/dist/content/types.d.ts +24 -0
  14. package/dist/curriculum/course-card.d.ts +51 -0
  15. package/dist/curriculum/index.d.ts +2 -0
  16. package/dist/curriculum/types.d.ts +2 -2
  17. package/dist/index.cjs +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.js +494 -444
  20. package/dist/license/HydraContext.d.ts +16 -0
  21. package/dist/license/ProBadge.d.ts +6 -0
  22. package/dist/license/index.d.ts +7 -0
  23. package/dist/license/tiers.d.ts +3 -0
  24. package/dist/license/useHydraLicense.d.ts +6 -0
  25. package/dist/license/validate.d.ts +13 -0
  26. package/dist/license/withProGate.d.ts +6 -0
  27. package/dist/modules/AssignmentModule/AssignmentModule.d.ts +4 -7
  28. package/dist/modules/AssignmentModule/types.d.ts +5 -1
  29. package/dist/modules/CertificateModule/CertificateModule.d.ts +4 -8
  30. package/dist/modules/CertificateModule/types.d.ts +6 -4
  31. package/dist/modules/CourseCatalogModule/CourseCatalogModule.d.ts +5 -0
  32. package/dist/modules/CourseCatalogModule/types.d.ts +43 -0
  33. package/dist/modules/CoursePlayer/CoursePlayer.d.ts +4 -1
  34. package/dist/modules/DiscussionModule/DiscussionModule.d.ts +4 -7
  35. package/dist/modules/ExamModule/ExamModule.d.ts +4 -7
  36. package/dist/modules/ExamModule/types.d.ts +5 -14
  37. package/dist/modules/FlashcardLab/FlashcardLab.d.ts +4 -1
  38. package/dist/modules/FlashcardLab/types.d.ts +2 -0
  39. package/dist/modules/GradeCenterModule/GradeCenterModule.d.ts +4 -8
  40. package/dist/modules/GradeCenterModule/types.d.ts +2 -0
  41. package/dist/modules/QuizModule/QuizModule.d.ts +4 -1
  42. package/dist/modules/QuizModule/types.d.ts +5 -14
  43. package/dist/modules/StudentDashboardModule/StudentDashboardModule.d.ts +5 -0
  44. package/dist/modules/StudentDashboardModule/types.d.ts +54 -0
  45. package/dist/modules/StudentProfileModule/StudentProfileModule.d.ts +5 -0
  46. package/dist/modules/StudentProfileModule/types.d.ts +43 -0
  47. package/dist/modules/SurveyModule/SurveyModule.d.ts +4 -6
  48. package/dist/modules/SurveyModule/types.d.ts +2 -0
  49. package/dist/modules/_shared/assessment-intro.d.ts +16 -0
  50. package/dist/modules/_shared/assessment-results.d.ts +23 -0
  51. package/dist/modules/_shared/types.d.ts +10 -0
  52. package/dist/modules/_shared/use-timer.d.ts +9 -0
  53. package/dist/modules/index.d.ts +6 -0
  54. package/dist/modules.cjs +1 -1
  55. package/dist/modules.js +1266 -854
  56. package/dist/progress/types.d.ts +2 -0
  57. package/dist/provider/HydraProvider.d.ts +5 -1
  58. package/dist/questions/choice.d.ts +1 -1
  59. package/dist/questions/confidence-indicator.d.ts +37 -0
  60. package/dist/questions/essay.d.ts +1 -1
  61. package/dist/questions/fill-in-the-blank.d.ts +1 -1
  62. package/dist/questions/hotspot.d.ts +1 -1
  63. package/dist/questions/index.d.ts +2 -0
  64. package/dist/questions/inline-choice.d.ts +1 -1
  65. package/dist/questions/matching.d.ts +1 -1
  66. package/dist/questions/multiple-choice.d.ts +1 -1
  67. package/dist/questions/numeric.d.ts +1 -1
  68. package/dist/questions/ordering.d.ts +1 -1
  69. package/dist/questions/question-renderer.d.ts +1 -1
  70. package/dist/questions/scenario.d.ts +1 -1
  71. package/dist/questions/spreadsheet.d.ts +1 -1
  72. package/dist/questions/true-false.d.ts +1 -1
  73. package/dist/sections/AnnouncementFeed/AnnouncementFeed.d.ts +1 -1
  74. package/dist/sections/AnnouncementFeed/types.d.ts +15 -1
  75. package/dist/sections/AssessmentReview/AssessmentReview.d.ts +1 -1
  76. package/dist/sections/AssessmentReview/types.d.ts +6 -0
  77. package/dist/sections/AssignmentSubmission/AssignmentSubmission.d.ts +1 -1
  78. package/dist/sections/AssignmentSubmission/types.d.ts +6 -0
  79. package/dist/sections/CertificateViewer/CertificateViewer.d.ts +1 -1
  80. package/dist/sections/CertificateViewer/certificate-variants.d.ts +42 -0
  81. package/dist/sections/CertificateViewer/types.d.ts +6 -0
  82. package/dist/sections/CourseCatalog/CourseCatalog.d.ts +2 -0
  83. package/dist/sections/CourseCatalog/types.d.ts +80 -0
  84. package/dist/sections/CourseOutline/CourseOutline.d.ts +1 -1
  85. package/dist/sections/CourseOutline/types.d.ts +6 -0
  86. package/dist/sections/DiscussionThread/DiscussionThread.d.ts +1 -1
  87. package/dist/sections/DiscussionThread/types.d.ts +6 -0
  88. package/dist/sections/EnrollmentWizard/EnrollmentWizard.d.ts +2 -0
  89. package/dist/sections/EnrollmentWizard/types.d.ts +66 -0
  90. package/dist/sections/ExamSession/ExamSession.d.ts +1 -1
  91. package/dist/sections/ExamSession/types.d.ts +6 -0
  92. package/dist/sections/FlashcardStudySession/FlashcardStudySession.d.ts +1 -1
  93. package/dist/sections/FlashcardStudySession/types.d.ts +6 -0
  94. package/dist/sections/ForumBoard/ForumBoard.d.ts +1 -1
  95. package/dist/sections/ForumBoard/types.d.ts +14 -0
  96. package/dist/sections/GradebookTable/GradebookTable.d.ts +1 -1
  97. package/dist/sections/GradebookTable/types.d.ts +14 -0
  98. package/dist/sections/LecturePlayer/LecturePlayer.d.ts +1 -1
  99. package/dist/sections/LecturePlayer/types.d.ts +8 -0
  100. package/dist/sections/LessonPage/LessonPage.d.ts +1 -1
  101. package/dist/sections/LessonPage/types.d.ts +6 -0
  102. package/dist/sections/PracticeQuiz/PracticeQuiz.d.ts +1 -1
  103. package/dist/sections/PracticeQuiz/types.d.ts +6 -0
  104. package/dist/sections/ProgressDashboard/ProgressDashboard.d.ts +1 -1
  105. package/dist/sections/ProgressDashboard/types.d.ts +6 -0
  106. package/dist/sections/QuizSession/QuizSession.d.ts +1 -1
  107. package/dist/sections/QuizSession/types.d.ts +6 -0
  108. package/dist/sections/RequirementsChecklist/RequirementsChecklist.d.ts +1 -1
  109. package/dist/sections/RequirementsChecklist/types.d.ts +6 -0
  110. package/dist/sections/ResourceLibrary/ResourceLibrary.d.ts +1 -1
  111. package/dist/sections/ResourceLibrary/types.d.ts +15 -1
  112. package/dist/sections/RubricView/RubricView.d.ts +1 -1
  113. package/dist/sections/RubricView/types.d.ts +6 -0
  114. package/dist/sections/ScrollableQuiz/ScrollableQuiz.d.ts +1 -1
  115. package/dist/sections/ScrollableQuiz/types.d.ts +6 -0
  116. package/dist/sections/StudentProfile/StudentProfile.d.ts +2 -0
  117. package/dist/sections/StudentProfile/types.d.ts +98 -0
  118. package/dist/sections/SurveyForm/SurveyForm.d.ts +1 -1
  119. package/dist/sections/SurveyForm/types.d.ts +6 -0
  120. package/dist/sections/_shared/merge-answers.d.ts +9 -0
  121. package/dist/sections/_shared/section-shell.d.ts +20 -0
  122. package/dist/sections/_shared/use-assessment-session.d.ts +30 -0
  123. package/dist/sections/index.d.ts +6 -0
  124. package/dist/sections.cjs +1 -1
  125. package/dist/sections.js +268 -307
  126. package/dist/tabs-BsfVo2Bl.cjs +173 -0
  127. package/dist/{tabs-Wf3h_Cx3.js → tabs-BuY1iNJE.js} +7532 -6807
  128. package/dist/ui/badge.d.ts +1 -1
  129. package/dist/ui/index.d.ts +2 -0
  130. package/dist/ui/progress.d.ts +1 -1
  131. package/dist/ui/rich-text-editor.d.ts +3 -1
  132. package/dist/ui/toast.d.ts +43 -0
  133. package/dist/utils/debounce.d.ts +5 -1
  134. package/dist/utils/pick-palette-color.d.ts +19 -0
  135. package/dist/video/types.d.ts +15 -0
  136. package/dist/video/video-player.d.ts +1 -1
  137. package/dist/withProGate-BWqcKdPM.js +137 -0
  138. package/dist/withProGate-DX6XqKLp.cjs +1 -0
  139. package/package.json +34 -220
  140. package/src/assessment-toolbar/question-navigator.tsx +10 -5
  141. package/src/assessment-toolbar/timer-display.tsx +4 -3
  142. package/src/assessment-toolbar/use-countdown.ts +1 -1
  143. package/src/common/empty-state.tsx +1 -0
  144. package/src/common/index.ts +2 -0
  145. package/src/common/pagination.tsx +135 -0
  146. package/src/common/search-input.tsx +2 -1
  147. package/src/common/types.ts +2 -0
  148. package/src/content/attachment-list.tsx +2 -0
  149. package/src/content/audio-player.tsx +196 -0
  150. package/src/content/code-block.tsx +113 -0
  151. package/src/content/content-block.tsx +64 -0
  152. package/src/content/embed-block.tsx +78 -0
  153. package/src/content/file-upload-zone.tsx +10 -0
  154. package/src/content/index.ts +6 -0
  155. package/src/content/types.ts +5 -0
  156. package/src/curriculum/course-card.tsx +199 -0
  157. package/src/curriculum/curriculum-item.tsx +3 -3
  158. package/src/curriculum/curriculum-tree.tsx +20 -13
  159. package/src/curriculum/index.ts +2 -0
  160. package/src/curriculum/types.ts +2 -2
  161. package/src/flashcards/flashcard.tsx +28 -8
  162. package/src/index.ts +3 -0
  163. package/src/license/HydraContext.tsx +62 -0
  164. package/src/license/ProBadge.tsx +43 -0
  165. package/src/license/index.ts +7 -0
  166. package/src/license/tiers.ts +24 -0
  167. package/src/license/useHydraLicense.ts +10 -0
  168. package/src/license/validate.ts +90 -0
  169. package/src/license/withProGate.tsx +21 -0
  170. package/src/modules/AssignmentModule/AssignmentModule.tsx +17 -8
  171. package/src/modules/AssignmentModule/types.ts +5 -1
  172. package/src/modules/CertificateModule/CertificateModule.tsx +21 -9
  173. package/src/modules/CertificateModule/types.ts +6 -4
  174. package/src/modules/CourseCatalogModule/CourseCatalogModule.tsx +126 -0
  175. package/src/modules/CourseCatalogModule/types.ts +47 -0
  176. package/src/modules/CoursePlayer/CoursePlayer.tsx +37 -22
  177. package/src/modules/DiscussionModule/DiscussionModule.tsx +57 -22
  178. package/src/modules/ExamModule/ExamModule.tsx +64 -198
  179. package/src/modules/ExamModule/types.ts +5 -14
  180. package/src/modules/FlashcardLab/FlashcardLab.tsx +10 -5
  181. package/src/modules/FlashcardLab/types.ts +2 -0
  182. package/src/modules/GradeCenterModule/GradeCenterModule.tsx +7 -2
  183. package/src/modules/GradeCenterModule/types.ts +2 -0
  184. package/src/modules/QuizModule/QuizModule.tsx +49 -169
  185. package/src/modules/QuizModule/types.ts +5 -15
  186. package/src/modules/StudentDashboardModule/StudentDashboardModule.tsx +117 -0
  187. package/src/modules/StudentDashboardModule/types.ts +56 -0
  188. package/src/modules/StudentProfileModule/StudentProfileModule.tsx +289 -0
  189. package/src/modules/StudentProfileModule/types.ts +45 -0
  190. package/src/modules/SurveyModule/SurveyModule.tsx +9 -4
  191. package/src/modules/SurveyModule/types.ts +2 -0
  192. package/src/modules/_shared/assessment-intro.tsx +75 -0
  193. package/src/modules/_shared/assessment-results.tsx +133 -0
  194. package/src/modules/_shared/types.ts +11 -0
  195. package/src/modules/_shared/use-timer.ts +49 -0
  196. package/src/modules/index.ts +9 -0
  197. package/src/progress/achievement-badge.tsx +3 -3
  198. package/src/progress/grade-indicator.tsx +9 -1
  199. package/src/progress/progress-ring.tsx +2 -1
  200. package/src/progress/stat-card.tsx +8 -1
  201. package/src/progress/types.ts +2 -0
  202. package/src/provider/HydraProvider.tsx +15 -6
  203. package/src/questions/choice.tsx +13 -6
  204. package/src/questions/confidence-indicator.tsx +107 -0
  205. package/src/questions/essay.tsx +6 -4
  206. package/src/questions/fill-in-the-blank.tsx +8 -4
  207. package/src/questions/hotspot.tsx +4 -4
  208. package/src/questions/index.ts +2 -0
  209. package/src/questions/inline-choice.tsx +5 -4
  210. package/src/questions/matching.tsx +5 -4
  211. package/src/questions/multiple-choice.tsx +13 -6
  212. package/src/questions/numeric.tsx +8 -4
  213. package/src/questions/ordering.tsx +12 -4
  214. package/src/questions/question-renderer.tsx +3 -2
  215. package/src/questions/scenario.tsx +4 -4
  216. package/src/questions/spreadsheet.tsx +5 -4
  217. package/src/questions/true-false.tsx +13 -6
  218. package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +64 -8
  219. package/src/sections/AnnouncementFeed/types.ts +15 -1
  220. package/src/sections/AssessmentReview/AssessmentReview.tsx +37 -0
  221. package/src/sections/AssessmentReview/types.ts +6 -0
  222. package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +37 -1
  223. package/src/sections/AssignmentSubmission/types.ts +6 -0
  224. package/src/sections/CertificateViewer/CertificateViewer.tsx +29 -227
  225. package/src/sections/CertificateViewer/certificate-variants.tsx +170 -0
  226. package/src/sections/CertificateViewer/types.ts +6 -0
  227. package/src/sections/CourseCatalog/CourseCatalog.tsx +220 -0
  228. package/src/sections/CourseCatalog/types.ts +76 -0
  229. package/src/sections/CourseOutline/CourseOutline.tsx +41 -0
  230. package/src/sections/CourseOutline/types.ts +6 -0
  231. package/src/sections/DiscussionThread/DiscussionThread.tsx +42 -1
  232. package/src/sections/DiscussionThread/types.ts +6 -0
  233. package/src/sections/EnrollmentWizard/EnrollmentWizard.tsx +343 -0
  234. package/src/sections/EnrollmentWizard/types.ts +65 -0
  235. package/src/sections/ExamSession/ExamSession.tsx +100 -94
  236. package/src/sections/ExamSession/types.ts +6 -0
  237. package/src/sections/FlashcardStudySession/FlashcardStudySession.tsx +53 -36
  238. package/src/sections/FlashcardStudySession/types.ts +6 -0
  239. package/src/sections/ForumBoard/ForumBoard.tsx +59 -1
  240. package/src/sections/ForumBoard/types.ts +14 -0
  241. package/src/sections/GradebookTable/GradebookTable.tsx +54 -1
  242. package/src/sections/GradebookTable/types.ts +14 -0
  243. package/src/sections/LecturePlayer/LecturePlayer.tsx +63 -37
  244. package/src/sections/LecturePlayer/types.ts +8 -0
  245. package/src/sections/LessonPage/LessonPage.tsx +36 -5
  246. package/src/sections/LessonPage/types.ts +6 -0
  247. package/src/sections/PracticeQuiz/PracticeQuiz.tsx +106 -74
  248. package/src/sections/PracticeQuiz/types.ts +6 -0
  249. package/src/sections/ProgressDashboard/ProgressDashboard.tsx +64 -10
  250. package/src/sections/ProgressDashboard/types.ts +6 -0
  251. package/src/sections/QuizSession/QuizSession.tsx +71 -82
  252. package/src/sections/QuizSession/types.ts +6 -0
  253. package/src/sections/RequirementsChecklist/RequirementsChecklist.tsx +41 -1
  254. package/src/sections/RequirementsChecklist/types.ts +6 -0
  255. package/src/sections/ResourceLibrary/ResourceLibrary.tsx +64 -8
  256. package/src/sections/ResourceLibrary/types.ts +15 -1
  257. package/src/sections/RubricView/RubricView.tsx +37 -1
  258. package/src/sections/RubricView/types.ts +6 -0
  259. package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +36 -15
  260. package/src/sections/ScrollableQuiz/types.ts +6 -0
  261. package/src/sections/StudentProfile/StudentProfile.tsx +279 -0
  262. package/src/sections/StudentProfile/types.ts +99 -0
  263. package/src/sections/SurveyForm/SurveyForm.tsx +32 -5
  264. package/src/sections/SurveyForm/types.ts +6 -0
  265. package/src/sections/_shared/merge-answers.ts +22 -0
  266. package/src/sections/_shared/section-shell.tsx +64 -0
  267. package/src/sections/_shared/use-assessment-session.ts +125 -0
  268. package/src/sections/index.ts +22 -0
  269. package/src/social/user-avatar.tsx +9 -5
  270. package/src/styles/globals.css +39 -41
  271. package/src/ui/badge.tsx +8 -0
  272. package/src/ui/index.ts +2 -0
  273. package/src/ui/progress.tsx +4 -0
  274. package/src/ui/rich-text-editor.tsx +10 -0
  275. package/src/ui/rich-text-toolbar.tsx +2 -1
  276. package/src/ui/toast.tsx +170 -0
  277. package/src/utils/debounce.ts +8 -2
  278. package/src/utils/pick-palette-color.ts +33 -0
  279. package/src/video/types.ts +16 -0
  280. package/src/video/video-player.tsx +13 -1
  281. package/dist/ForumBoard-CHXU3mjC.js +0 -2207
  282. package/dist/ForumBoard-d1w5-r6n.cjs +0 -1
  283. package/dist/tabs-DRM2Iq_J.cjs +0 -172
@@ -68,6 +68,8 @@ export interface StatCardProps {
68
68
  value: number;
69
69
  direction: "up" | "down" | "flat";
70
70
  };
71
+ /** Accent color CSS value for the icon background. Defaults to primary. */
72
+ accent?: string;
71
73
  /** CSS class name for the root element */
72
74
  className?: string;
73
75
  /** 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>;
@@ -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>;
@@ -18,4 +18,4 @@ import { QuestionProps } from './types';
18
18
  * onAnswer={(answers) => handleAnswer(answers)}
19
19
  * />
20
20
  */
21
- export declare const Hotspot: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const Hotspot: import('react').NamedExoticComponent<QuestionProps>;
@@ -12,4 +12,6 @@ export { InlineChoice } from './inline-choice';
12
12
  export { Scenario } from './scenario';
13
13
  export { Spreadsheet } from './spreadsheet';
14
14
  export { scoreQuestion, scoreScenarioSubQuestions } from './scoring';
15
+ export { ConfidenceIndicator } from './confidence-indicator';
16
+ export type { ConfidenceIndicatorProps, ConfidenceLevel } from './confidence-indicator';
15
17
  export type { QuestionProps, QuestionData, QuestionTypeEnum, QuestionMaterial, AnswerOption, SessionAnswer, MatchingPair, HotspotRegion, InlineBlank, ScenarioScoringMode, SpreadsheetColumn, SpreadsheetCell, SpreadsheetRow, } from './types';
@@ -18,4 +18,4 @@ import { QuestionProps } from './types';
18
18
  * onAnswer={(answers) => handleAnswer(answers)}
19
19
  * />
20
20
  */
21
- export declare const InlineChoice: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
21
+ export declare const InlineChoice: import('react').NamedExoticComponent<QuestionProps>;
@@ -19,4 +19,4 @@ import { QuestionProps } from './types';
19
19
  * onAnswer={(answers) => handleAnswer(answers)}
20
20
  * />
21
21
  */
22
- export declare const Matching: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
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>;
@@ -8,4 +8,4 @@ import { QuestionProps } from './types';
8
8
  * onAnswer={(answers) => handleAnswer(answers)}
9
9
  * />
10
10
  */
11
- export declare const Numeric: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const Numeric: import('react').NamedExoticComponent<QuestionProps>;
@@ -9,4 +9,4 @@ import { QuestionProps } from './types';
9
9
  * onAnswer={(answers) => handleAnswer(answers)}
10
10
  * />
11
11
  */
12
- export declare const Ordering: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
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>;
@@ -20,4 +20,4 @@ import { QuestionProps } from './types';
20
20
  * onAnswer={(answers) => handleAnswer(answers)}
21
21
  * />
22
22
  */
23
- export declare const Scenario: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
23
+ export declare const Scenario: import('react').NamedExoticComponent<QuestionProps>;
@@ -26,4 +26,4 @@ import { QuestionProps } from './types';
26
26
  * onAnswer={(answers) => handleAnswer(answers)}
27
27
  * />
28
28
  */
29
- export declare const Spreadsheet: ({ question, sessionAnswers, onAnswer, readOnly, showCorrectAnswers, disabled, }: QuestionProps) => import("react/jsx-runtime").JSX.Element;
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,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;
@@ -50,6 +50,12 @@ export interface AssignmentSubmissionProps {
50
50
  isSubmitting?: boolean;
51
51
  /** When true, disables all interactions */
52
52
  readOnly?: boolean;
53
+ /** Render skeleton placeholders instead of content */
54
+ isLoading?: boolean;
55
+ /** Error message — renders an error state with optional retry */
56
+ error?: string | null;
57
+ /** Called when the user clicks retry in the error state */
58
+ onRetry?: () => void;
53
59
  /** CSS class name for the root element */
54
60
  className?: string;
55
61
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { CertificateViewerProps } from './types';
2
- export declare function CertificateViewer({ recipientName, courseTitle, completionDate, organizationName, organizationLogo, signatory, certificateId, variant, showActions, onPrint, onDownload, className, style, }: CertificateViewerProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function CertificateViewer({ recipientName, courseTitle, completionDate, organizationName, organizationLogo, signatory, certificateId, variant, showActions, onPrint, onDownload, isLoading, error, onRetry, className, style, }: CertificateViewerProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,42 @@
1
+ import { CertificateVariant } from './types';
2
+ export interface CornerConfig {
3
+ size: number;
4
+ paths: {
5
+ d: string;
6
+ strokeWidth: number;
7
+ }[];
8
+ dots?: {
9
+ cx: number;
10
+ cy: number;
11
+ r: number;
12
+ }[];
13
+ color: string;
14
+ }
15
+ export declare const CORNER_CONFIGS: Record<CertificateVariant, CornerConfig | null>;
16
+ export declare const CORNER_POSITIONS: readonly [{
17
+ readonly key: "tl";
18
+ readonly pos: "top-3 left-3";
19
+ readonly transform: undefined;
20
+ }, {
21
+ readonly key: "tr";
22
+ readonly pos: "top-3 right-3";
23
+ readonly transform: "scaleX(-1)";
24
+ }, {
25
+ readonly key: "bl";
26
+ readonly pos: "bottom-3 left-3";
27
+ readonly transform: "scaleY(-1)";
28
+ }, {
29
+ readonly key: "br";
30
+ readonly pos: "bottom-3 right-3";
31
+ readonly transform: "scale(-1)";
32
+ }];
33
+ export interface DividerConfig {
34
+ lineColor: string;
35
+ motif: React.ReactNode;
36
+ }
37
+ export declare const DIVIDER_CONFIGS: Record<CertificateVariant, DividerConfig>;
38
+ export declare const BACKGROUND_GLOW: Record<CertificateVariant, React.CSSProperties | null>;
39
+ export declare const ICON_COLORS: Record<CertificateVariant, string>;
40
+ export declare const HEADING_STYLES: Record<CertificateVariant, string>;
41
+ export declare const COURSE_TITLE_COLORS: Record<CertificateVariant, string>;
42
+ export declare const SERIF_VARIANTS: ReadonlySet<CertificateVariant>;
@@ -42,6 +42,12 @@ export interface CertificateViewerProps {
42
42
  onPrint?: () => void;
43
43
  /** Called when download is triggered */
44
44
  onDownload?: () => void;
45
+ /** Render skeleton placeholders instead of content */
46
+ isLoading?: boolean;
47
+ /** Error message — renders an error state with optional retry */
48
+ error?: string | null;
49
+ /** Called when the user clicks retry in the error state */
50
+ onRetry?: () => void;
45
51
  /** CSS class name for the root element */
46
52
  className?: string;
47
53
  /** Inline styles for the root element */
@@ -0,0 +1,2 @@
1
+ import { CourseCatalogProps } from './types';
2
+ export declare function CourseCatalog({ courses, categories, onCourseClick, onEnroll, viewMode: initialViewMode, allowViewToggle, showSearch, emptyMessage, readOnly, isLoading, error, onRetry, pageSize, currentPage, totalItems, onPageChange, className, style, }: CourseCatalogProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,80 @@
1
+ /**
2
+ * CourseCatalog section — a searchable, filterable course catalog.
3
+ *
4
+ * Displays courses in a grid or list view with search, category tabs,
5
+ * view mode toggling, and optional pagination.
6
+ *
7
+ * @example
8
+ * <CourseCatalog
9
+ * courses={courses}
10
+ * categories={categories}
11
+ * onCourseClick={(c) => navigate(`/courses/${c.uid}`)}
12
+ * onEnroll={(c) => enroll(c.uid)}
13
+ * />
14
+ */
15
+ export interface CourseCatalogProps {
16
+ /** Courses to display */
17
+ courses: CourseInfo[];
18
+ /** Optional categories for tab filtering */
19
+ categories?: {
20
+ uid: string;
21
+ label: string;
22
+ }[];
23
+ /** Called when the user clicks a course */
24
+ onCourseClick: (course: CourseInfo) => void;
25
+ /** Called when the user clicks enroll on a course */
26
+ onEnroll?: (course: CourseInfo) => void;
27
+ /** Layout view mode */
28
+ viewMode?: "grid" | "list";
29
+ /** Whether the user can toggle between grid and list */
30
+ allowViewToggle?: boolean;
31
+ /** Whether to show search */
32
+ showSearch?: boolean;
33
+ /** Empty state message */
34
+ emptyMessage?: string;
35
+ /** When true, disables interactions */
36
+ readOnly?: boolean;
37
+ /** Render skeleton placeholders instead of content */
38
+ isLoading?: boolean;
39
+ /** Error message — renders an error state with optional retry */
40
+ error?: string | null;
41
+ /** Called when the user clicks retry in the error state */
42
+ onRetry?: () => void;
43
+ /** Number of items per page (enables pagination when set with onPageChange) */
44
+ pageSize?: number;
45
+ /** Current page (1-indexed) */
46
+ currentPage?: number;
47
+ /** Total number of items (for server-side pagination) */
48
+ totalItems?: number;
49
+ /** Called when the user navigates to a different page */
50
+ onPageChange?: (page: number) => void;
51
+ /** CSS class name for the root element */
52
+ className?: string;
53
+ /** Inline styles for the root element */
54
+ style?: React.CSSProperties;
55
+ }
56
+ export interface CourseInfo {
57
+ /** Unique identifier */
58
+ uid: string;
59
+ /** Course title */
60
+ title: string;
61
+ /** Course description */
62
+ description?: string;
63
+ /** Thumbnail image URL */
64
+ thumbnailUrl?: string;
65
+ /** Instructor info */
66
+ instructor?: {
67
+ displayName: string;
68
+ avatarUrl?: string;
69
+ };
70
+ /** Category UID for filtering */
71
+ categoryUid?: string;
72
+ /** Progress percentage (0-100) */
73
+ progress?: number;
74
+ /** Enrollment status */
75
+ enrollmentStatus?: "enrolled" | "completed" | "available" | "locked";
76
+ /** Number of enrolled students */
77
+ studentCount?: number;
78
+ /** Estimated duration (e.g. "12 hours") */
79
+ duration?: string;
80
+ }
@@ -1,2 +1,2 @@
1
1
  import { CourseOutlineProps } from './types';
2
- export declare function CourseOutline({ items, progress, courseTitle, activeItemUid, onItemClick, showOverallProgress, showDuration, showIcons, readOnly, className, style, }: CourseOutlineProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function CourseOutline({ items, progress, courseTitle, activeItemUid, onItemClick, showOverallProgress, showDuration, showIcons, readOnly, isLoading, error, onRetry, className, style, }: CourseOutlineProps): import("react/jsx-runtime").JSX.Element;
@@ -42,6 +42,12 @@ export interface CourseOutlineProps {
42
42
  showIcons?: boolean;
43
43
  /** When true, disables all click interactions */
44
44
  readOnly?: boolean;
45
+ /** Render skeleton placeholders instead of content */
46
+ isLoading?: boolean;
47
+ /** Error message — renders an error state with optional retry */
48
+ error?: string | null;
49
+ /** Called when the user clicks retry in the error state */
50
+ onRetry?: () => void;
45
51
  /** CSS class name for the root element */
46
52
  className?: string;
47
53
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { DiscussionThreadProps } from './types';
2
- export declare function DiscussionThread({ title, rootPost, replies, currentUser, onReply, onToggleLike, onMarkAnswer, maxDepth, allowReplies, sortOrder, readOnly, className, style, }: DiscussionThreadProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function DiscussionThread({ title, rootPost, replies, currentUser, onReply, onToggleLike, onMarkAnswer, maxDepth, allowReplies, sortOrder, readOnly, isLoading, error, onRetry, className, style, }: DiscussionThreadProps): import("react/jsx-runtime").JSX.Element;
@@ -37,6 +37,12 @@ export interface DiscussionThreadProps {
37
37
  sortOrder?: "newest" | "oldest" | "most_liked";
38
38
  /** When true, disables interactions */
39
39
  readOnly?: boolean;
40
+ /** Render skeleton placeholders instead of content */
41
+ isLoading?: boolean;
42
+ /** Error message — renders an error state with optional retry */
43
+ error?: string | null;
44
+ /** Called when the user clicks retry in the error state */
45
+ onRetry?: () => void;
40
46
  /** CSS class name for the root element */
41
47
  className?: string;
42
48
  /** Inline styles for the root element */
@@ -0,0 +1,2 @@
1
+ import { EnrollmentWizardProps } from './types';
2
+ export declare function EnrollmentWizard({ course, prerequisites, onEnroll, onCancel, enrollLabel, isEnrolling, isLoading, error, onRetry, className, style, }: EnrollmentWizardProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * EnrollmentWizard section — a multi-step course enrollment flow.
3
+ *
4
+ * Guides users through course details, prerequisite checks, and enrollment
5
+ * confirmation with visual step progress.
6
+ *
7
+ * @example
8
+ * <EnrollmentWizard
9
+ * course={{ uid: "c1", title: "React 101", description: "Learn React" }}
10
+ * prerequisites={[{ uid: "p1", label: "JavaScript Basics", isMet: true }]}
11
+ * onEnroll={(courseUid) => enroll(courseUid)}
12
+ * />
13
+ */
14
+ export interface EnrollmentWizardProps {
15
+ /** Course information to display */
16
+ course: EnrollmentCourse;
17
+ /** Prerequisites for enrollment */
18
+ prerequisites?: Prerequisite[];
19
+ /** Called when the user confirms enrollment */
20
+ onEnroll: (courseUid: string) => void;
21
+ /** Called when the user cancels the wizard */
22
+ onCancel?: () => void;
23
+ /** Label for the enroll button */
24
+ enrollLabel?: string;
25
+ /** Whether enrollment is in progress (shows spinner) */
26
+ isEnrolling?: boolean;
27
+ /** Render skeleton placeholders instead of content */
28
+ isLoading?: boolean;
29
+ /** Error message — renders an error state with optional retry */
30
+ error?: string | null;
31
+ /** Called when the user clicks retry in the error state */
32
+ onRetry?: () => void;
33
+ /** CSS class name for the root element */
34
+ className?: string;
35
+ /** Inline styles for the root element */
36
+ style?: React.CSSProperties;
37
+ }
38
+ export interface EnrollmentCourse {
39
+ /** Course UID */
40
+ uid: string;
41
+ /** Course title */
42
+ title: string;
43
+ /** Course description */
44
+ description?: string;
45
+ /** Thumbnail image URL */
46
+ thumbnailUrl?: string;
47
+ /** Instructor info */
48
+ instructor?: {
49
+ displayName: string;
50
+ avatarUrl?: string;
51
+ };
52
+ /** Estimated duration */
53
+ duration?: string;
54
+ /** Syllabus bullet points */
55
+ syllabus?: string[];
56
+ }
57
+ export interface Prerequisite {
58
+ /** Unique identifier */
59
+ uid: string;
60
+ /** Prerequisite label */
61
+ label: string;
62
+ /** Whether this prerequisite has been met */
63
+ isMet: boolean;
64
+ /** Optional description */
65
+ description?: string;
66
+ }
@@ -1,2 +1,2 @@
1
1
  import { ExamSessionProps } from './types';
2
- export declare function ExamSession({ questions, initialAnswers, onSubmit, onAnswerChange, timeLimitSeconds, timeElapsedSeconds, autoSubmitOnTimeout, timeWarningThreshold, allowBackNavigation, confirmBeforeSubmit, examTitle, instructions, questionMaterials, isSubmitting, readOnly, className, style, }: ExamSessionProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ExamSession({ questions, initialAnswers, onSubmit, onAnswerChange, timeLimitSeconds, timeElapsedSeconds, autoSubmitOnTimeout, timeWarningThreshold, allowBackNavigation, confirmBeforeSubmit, examTitle, instructions, questionMaterials, isSubmitting, readOnly, isLoading, error, onRetry, className, style, }: ExamSessionProps): import("react/jsx-runtime").JSX.Element;
@@ -50,6 +50,12 @@ export interface ExamSessionProps {
50
50
  questionMaterials?: QuestionMaterial[];
51
51
  /** When true, all inputs are disabled */
52
52
  readOnly?: boolean;
53
+ /** Render skeleton placeholders instead of content */
54
+ isLoading?: boolean;
55
+ /** Error message — renders an error state with optional retry */
56
+ error?: string | null;
57
+ /** Called when the user clicks retry in the error state */
58
+ onRetry?: () => void;
53
59
  /** CSS class name for the root element */
54
60
  className?: string;
55
61
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { FlashcardStudySessionProps } from './types';
2
- export declare function FlashcardStudySession({ cards, title, description, shuffled, onComplete, readOnly, className, style, }: FlashcardStudySessionProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function FlashcardStudySession({ cards, title, description, shuffled, onComplete, readOnly, isLoading, error, onRetry, className, style, }: FlashcardStudySessionProps): import("react/jsx-runtime").JSX.Element;
@@ -27,6 +27,12 @@ export interface FlashcardStudySessionProps {
27
27
  onComplete?: (stats: FlashcardSessionStats) => void;
28
28
  /** When true, disables card flipping */
29
29
  readOnly?: boolean;
30
+ /** Render skeleton placeholders instead of content */
31
+ isLoading?: boolean;
32
+ /** Error message — renders an error state with optional retry */
33
+ error?: string | null;
34
+ /** Called when the user clicks retry in the error state */
35
+ onRetry?: () => void;
30
36
  /** CSS class name for the root element */
31
37
  className?: string;
32
38
  /** Inline styles for the root element */
@@ -5,4 +5,4 @@ import { ForumBoardProps } from './types';
5
5
  * Displays a searchable, sortable list of discussion topics with author info,
6
6
  * reply/like counts, timestamps, and new topic creation.
7
7
  */
8
- export declare function ForumBoard({ title, topics, onTopicClick, onCreateTopic, sortOrder, onSortChange, searchQuery, onSearchChange, readOnly, className, style, }: ForumBoardProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function ForumBoard({ title, topics, onTopicClick, onCreateTopic, sortOrder, onSortChange, searchQuery, onSearchChange, readOnly, isLoading, error, onRetry, pageSize, currentPage, totalItems, onPageChange, className, style, }: ForumBoardProps): import("react/jsx-runtime").JSX.Element;
@@ -35,6 +35,20 @@ export interface ForumBoardProps {
35
35
  onSearchChange?: (query: string) => void;
36
36
  /** When true, disables create and interactions */
37
37
  readOnly?: boolean;
38
+ /** Render skeleton placeholders instead of content */
39
+ isLoading?: boolean;
40
+ /** Error message — renders an error state with optional retry */
41
+ error?: string | null;
42
+ /** Called when the user clicks retry in the error state */
43
+ onRetry?: () => void;
44
+ /** Number of items per page (enables pagination when set with onPageChange) */
45
+ pageSize?: number;
46
+ /** Current page (1-indexed) */
47
+ currentPage?: number;
48
+ /** Total number of items (for server-side pagination) */
49
+ totalItems?: number;
50
+ /** Called when the user navigates to a different page */
51
+ onPageChange?: (page: number) => void;
38
52
  /** CSS class name for the root element */
39
53
  className?: string;
40
54
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { GradebookTableProps } from './types';
2
- export declare function GradebookTable({ items, categories, overallGrade, showWeights, showCategoryTotals, onItemClick, readOnly, className, style, }: GradebookTableProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function GradebookTable({ items, categories, overallGrade, showWeights, showCategoryTotals, onItemClick, readOnly, isLoading, error, onRetry, pageSize, currentPage, totalItems, onPageChange, className, style, }: GradebookTableProps): import("react/jsx-runtime").JSX.Element;
@@ -26,6 +26,20 @@ export interface GradebookTableProps {
26
26
  onItemClick?: (item: GradeItem) => void;
27
27
  /** When true, disables interactions */
28
28
  readOnly?: boolean;
29
+ /** Render skeleton placeholders instead of content */
30
+ isLoading?: boolean;
31
+ /** Error message — renders an error state with optional retry */
32
+ error?: string | null;
33
+ /** Called when the user clicks retry in the error state */
34
+ onRetry?: () => void;
35
+ /** Number of items per page (enables pagination when set with onPageChange) */
36
+ pageSize?: number;
37
+ /** Current page (1-indexed) */
38
+ currentPage?: number;
39
+ /** Total number of items (for server-side pagination) */
40
+ totalItems?: number;
41
+ /** Called when the user navigates to a different page */
42
+ onPageChange?: (page: number) => void;
29
43
  /** CSS class name for the root element */
30
44
  className?: string;
31
45
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { LecturePlayerProps } from './types';
2
- export declare function LecturePlayer({ video, notes, layout, notesPanelWidth, notesPanelHeight, className, style, }: LecturePlayerProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function LecturePlayer({ video, notes, layout, notesPanelWidth, notesPanelHeight, isLoading, error, onRetry, onComplete, className, style, }: LecturePlayerProps): import("react/jsx-runtime").JSX.Element;
@@ -40,6 +40,14 @@ export interface LecturePlayerProps {
40
40
  * @default "240px"
41
41
  */
42
42
  notesPanelHeight?: string | number;
43
+ /** Render skeleton placeholders instead of content */
44
+ isLoading?: boolean;
45
+ /** Error message — renders an error state with optional retry */
46
+ error?: string | null;
47
+ /** Called when the user clicks retry in the error state */
48
+ onRetry?: () => void;
49
+ /** Called when the video playback ends. */
50
+ onComplete?: () => void;
43
51
  /** CSS class name for the root element */
44
52
  className?: string;
45
53
  /** Inline styles for the root element */
@@ -1,2 +1,2 @@
1
1
  import { LessonPageProps } from './types';
2
- export declare function LessonPage({ title, blocks, isCompleted, onMarkComplete, onNextLesson, nextLessonTitle, estimatedDuration, showDuration, readOnly, className, style, }: LessonPageProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function LessonPage({ title, blocks, isCompleted, onMarkComplete, onNextLesson, nextLessonTitle, estimatedDuration, showDuration, readOnly, isLoading, error, onRetry, className, style, }: LessonPageProps): import("react/jsx-runtime").JSX.Element;