@hydralms/components 0.2.0 → 0.3.1

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 (302) hide show
  1. package/dist/StudentProfile-BPsZBaJj.cjs +1 -0
  2. package/dist/StudentProfile-Cw2p-RZn.js +3273 -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 +495 -439
  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 +6 -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 +1267 -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/AdaptiveLearningPath/AdaptiveLearningPath.d.ts +5 -0
  74. package/dist/sections/AdaptiveLearningPath/path-connector.d.ts +8 -0
  75. package/dist/sections/AdaptiveLearningPath/path-milestone-marker.d.ts +7 -0
  76. package/dist/sections/AdaptiveLearningPath/path-node-card.d.ts +10 -0
  77. package/dist/sections/AdaptiveLearningPath/path-skill-bar.d.ts +8 -0
  78. package/dist/sections/AdaptiveLearningPath/types.d.ts +136 -0
  79. package/dist/sections/AnnouncementFeed/AnnouncementFeed.d.ts +1 -1
  80. package/dist/sections/AnnouncementFeed/types.d.ts +15 -1
  81. package/dist/sections/AssessmentReview/AssessmentReview.d.ts +1 -1
  82. package/dist/sections/AssessmentReview/types.d.ts +6 -0
  83. package/dist/sections/AssignmentSubmission/AssignmentSubmission.d.ts +1 -1
  84. package/dist/sections/AssignmentSubmission/types.d.ts +6 -0
  85. package/dist/sections/CertificateViewer/CertificateViewer.d.ts +1 -1
  86. package/dist/sections/CertificateViewer/certificate-variants.d.ts +42 -0
  87. package/dist/sections/CertificateViewer/types.d.ts +6 -0
  88. package/dist/sections/ContentAuthoringStudio/ContentAuthoringStudio.d.ts +5 -0
  89. package/dist/sections/ContentAuthoringStudio/block-editor-item.d.ts +14 -0
  90. package/dist/sections/ContentAuthoringStudio/block-type-picker.d.ts +12 -0
  91. package/dist/sections/ContentAuthoringStudio/types.d.ts +67 -0
  92. package/dist/sections/CourseCatalog/CourseCatalog.d.ts +2 -0
  93. package/dist/sections/CourseCatalog/types.d.ts +80 -0
  94. package/dist/sections/CourseOutline/CourseOutline.d.ts +1 -1
  95. package/dist/sections/CourseOutline/types.d.ts +6 -0
  96. package/dist/sections/DiscussionThread/DiscussionThread.d.ts +1 -1
  97. package/dist/sections/DiscussionThread/types.d.ts +6 -0
  98. package/dist/sections/EnrollmentWizard/EnrollmentWizard.d.ts +2 -0
  99. package/dist/sections/EnrollmentWizard/types.d.ts +66 -0
  100. package/dist/sections/ExamSession/ExamSession.d.ts +1 -1
  101. package/dist/sections/ExamSession/types.d.ts +6 -0
  102. package/dist/sections/FlashcardStudySession/FlashcardStudySession.d.ts +1 -1
  103. package/dist/sections/FlashcardStudySession/types.d.ts +6 -0
  104. package/dist/sections/ForumBoard/ForumBoard.d.ts +1 -1
  105. package/dist/sections/ForumBoard/types.d.ts +14 -0
  106. package/dist/sections/GradebookTable/GradebookTable.d.ts +1 -1
  107. package/dist/sections/GradebookTable/types.d.ts +14 -0
  108. package/dist/sections/LecturePlayer/LecturePlayer.d.ts +1 -1
  109. package/dist/sections/LecturePlayer/types.d.ts +8 -0
  110. package/dist/sections/LessonPage/LessonPage.d.ts +1 -1
  111. package/dist/sections/LessonPage/types.d.ts +6 -0
  112. package/dist/sections/PracticeQuiz/PracticeQuiz.d.ts +1 -1
  113. package/dist/sections/PracticeQuiz/types.d.ts +6 -0
  114. package/dist/sections/ProgressDashboard/ProgressDashboard.d.ts +1 -1
  115. package/dist/sections/ProgressDashboard/types.d.ts +6 -0
  116. package/dist/sections/QuizSession/QuizSession.d.ts +1 -1
  117. package/dist/sections/QuizSession/types.d.ts +6 -0
  118. package/dist/sections/RequirementsChecklist/RequirementsChecklist.d.ts +1 -1
  119. package/dist/sections/RequirementsChecklist/types.d.ts +6 -0
  120. package/dist/sections/ResourceLibrary/ResourceLibrary.d.ts +1 -1
  121. package/dist/sections/ResourceLibrary/types.d.ts +15 -1
  122. package/dist/sections/RubricView/RubricView.d.ts +1 -1
  123. package/dist/sections/RubricView/types.d.ts +6 -0
  124. package/dist/sections/ScrollableQuiz/ScrollableQuiz.d.ts +1 -1
  125. package/dist/sections/ScrollableQuiz/types.d.ts +6 -0
  126. package/dist/sections/StudentProfile/StudentProfile.d.ts +2 -0
  127. package/dist/sections/StudentProfile/types.d.ts +98 -0
  128. package/dist/sections/SurveyForm/SurveyForm.d.ts +1 -1
  129. package/dist/sections/SurveyForm/types.d.ts +6 -0
  130. package/dist/sections/_shared/merge-answers.d.ts +9 -0
  131. package/dist/sections/_shared/section-shell.d.ts +20 -0
  132. package/dist/sections/_shared/use-assessment-session.d.ts +30 -0
  133. package/dist/sections/index.d.ts +10 -0
  134. package/dist/sections.cjs +1 -1
  135. package/dist/sections.js +1361 -307
  136. package/dist/ui/badge.d.ts +1 -1
  137. package/dist/ui/index.d.ts +2 -0
  138. package/dist/ui/progress.d.ts +1 -1
  139. package/dist/ui/rich-text-editor.d.ts +3 -1
  140. package/dist/ui/toast.d.ts +43 -0
  141. package/dist/utils/debounce.d.ts +5 -1
  142. package/dist/utils/pick-palette-color.d.ts +19 -0
  143. package/dist/video/types.d.ts +15 -0
  144. package/dist/video/video-player.d.ts +1 -1
  145. package/dist/withProGate-BJdu1T9Y.cjs +2 -0
  146. package/dist/withProGate-BvFc7Jwy.js +4975 -0
  147. package/package.json +57 -226
  148. package/src/assessment-toolbar/question-navigator.tsx +10 -5
  149. package/src/assessment-toolbar/timer-display.tsx +4 -3
  150. package/src/assessment-toolbar/use-countdown.ts +1 -1
  151. package/src/common/empty-state.tsx +1 -0
  152. package/src/common/index.ts +2 -0
  153. package/src/common/pagination.tsx +135 -0
  154. package/src/common/search-input.tsx +2 -1
  155. package/src/common/types.ts +2 -0
  156. package/src/content/attachment-list.tsx +2 -0
  157. package/src/content/audio-player.tsx +196 -0
  158. package/src/content/code-block.tsx +113 -0
  159. package/src/content/content-block.tsx +64 -0
  160. package/src/content/embed-block.tsx +78 -0
  161. package/src/content/file-upload-zone.tsx +10 -0
  162. package/src/content/index.ts +6 -0
  163. package/src/content/types.ts +5 -0
  164. package/src/curriculum/course-card.tsx +199 -0
  165. package/src/curriculum/curriculum-item.tsx +3 -3
  166. package/src/curriculum/curriculum-tree.tsx +20 -13
  167. package/src/curriculum/index.ts +2 -0
  168. package/src/curriculum/types.ts +2 -2
  169. package/src/flashcards/flashcard.tsx +28 -8
  170. package/src/index.ts +3 -0
  171. package/src/license/HydraContext.tsx +62 -0
  172. package/src/license/ProBadge.tsx +43 -0
  173. package/src/license/index.ts +7 -0
  174. package/src/license/tiers.ts +34 -0
  175. package/src/license/useHydraLicense.ts +10 -0
  176. package/src/license/validate.ts +90 -0
  177. package/src/license/withProGate.tsx +21 -0
  178. package/src/modules/AssignmentModule/AssignmentModule.tsx +17 -8
  179. package/src/modules/AssignmentModule/types.ts +5 -1
  180. package/src/modules/CertificateModule/CertificateModule.tsx +21 -9
  181. package/src/modules/CertificateModule/types.ts +6 -4
  182. package/src/modules/CourseCatalogModule/CourseCatalogModule.tsx +126 -0
  183. package/src/modules/CourseCatalogModule/types.ts +47 -0
  184. package/src/modules/CoursePlayer/CoursePlayer.tsx +39 -22
  185. package/src/modules/DiscussionModule/DiscussionModule.tsx +57 -22
  186. package/src/modules/ExamModule/ExamModule.tsx +64 -198
  187. package/src/modules/ExamModule/types.ts +5 -14
  188. package/src/modules/FlashcardLab/FlashcardLab.tsx +10 -5
  189. package/src/modules/FlashcardLab/types.ts +2 -0
  190. package/src/modules/GradeCenterModule/GradeCenterModule.tsx +7 -2
  191. package/src/modules/GradeCenterModule/types.ts +2 -0
  192. package/src/modules/QuizModule/QuizModule.tsx +49 -169
  193. package/src/modules/QuizModule/types.ts +5 -15
  194. package/src/modules/StudentDashboardModule/StudentDashboardModule.tsx +117 -0
  195. package/src/modules/StudentDashboardModule/types.ts +56 -0
  196. package/src/modules/StudentProfileModule/StudentProfileModule.tsx +289 -0
  197. package/src/modules/StudentProfileModule/types.ts +45 -0
  198. package/src/modules/SurveyModule/SurveyModule.tsx +9 -4
  199. package/src/modules/SurveyModule/types.ts +2 -0
  200. package/src/modules/_shared/assessment-intro.tsx +75 -0
  201. package/src/modules/_shared/assessment-results.tsx +133 -0
  202. package/src/modules/_shared/types.ts +11 -0
  203. package/src/modules/_shared/use-timer.ts +49 -0
  204. package/src/modules/index.ts +9 -0
  205. package/src/progress/achievement-badge.tsx +3 -3
  206. package/src/progress/grade-indicator.tsx +9 -1
  207. package/src/progress/progress-ring.tsx +2 -1
  208. package/src/progress/stat-card.tsx +14 -2
  209. package/src/progress/types.ts +2 -0
  210. package/src/provider/HydraProvider.tsx +15 -6
  211. package/src/questions/choice.tsx +13 -6
  212. package/src/questions/confidence-indicator.tsx +107 -0
  213. package/src/questions/essay.tsx +6 -4
  214. package/src/questions/fill-in-the-blank.tsx +8 -4
  215. package/src/questions/hotspot.tsx +4 -4
  216. package/src/questions/index.ts +2 -0
  217. package/src/questions/inline-choice.tsx +5 -4
  218. package/src/questions/matching.tsx +5 -4
  219. package/src/questions/multiple-choice.tsx +13 -6
  220. package/src/questions/numeric.tsx +8 -4
  221. package/src/questions/ordering.tsx +12 -4
  222. package/src/questions/question-renderer.tsx +3 -2
  223. package/src/questions/scenario.tsx +4 -4
  224. package/src/questions/spreadsheet.tsx +5 -4
  225. package/src/questions/true-false.tsx +13 -6
  226. package/src/sections/AdaptiveLearningPath/AdaptiveLearningPath.tsx +251 -0
  227. package/src/sections/AdaptiveLearningPath/path-connector.tsx +27 -0
  228. package/src/sections/AdaptiveLearningPath/path-milestone-marker.tsx +50 -0
  229. package/src/sections/AdaptiveLearningPath/path-node-card.tsx +166 -0
  230. package/src/sections/AdaptiveLearningPath/path-skill-bar.tsx +49 -0
  231. package/src/sections/AdaptiveLearningPath/types.ts +159 -0
  232. package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +64 -8
  233. package/src/sections/AnnouncementFeed/types.ts +15 -1
  234. package/src/sections/AssessmentReview/AssessmentReview.tsx +37 -0
  235. package/src/sections/AssessmentReview/types.ts +6 -0
  236. package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +37 -1
  237. package/src/sections/AssignmentSubmission/types.ts +6 -0
  238. package/src/sections/CertificateViewer/CertificateViewer.tsx +29 -227
  239. package/src/sections/CertificateViewer/certificate-variants.tsx +170 -0
  240. package/src/sections/CertificateViewer/types.ts +6 -0
  241. package/src/sections/ContentAuthoringStudio/ContentAuthoringStudio.tsx +289 -0
  242. package/src/sections/ContentAuthoringStudio/block-editor-item.tsx +487 -0
  243. package/src/sections/ContentAuthoringStudio/block-type-picker.tsx +123 -0
  244. package/src/sections/ContentAuthoringStudio/types.ts +67 -0
  245. package/src/sections/CourseCatalog/CourseCatalog.tsx +220 -0
  246. package/src/sections/CourseCatalog/types.ts +76 -0
  247. package/src/sections/CourseOutline/CourseOutline.tsx +41 -0
  248. package/src/sections/CourseOutline/types.ts +6 -0
  249. package/src/sections/DiscussionThread/DiscussionThread.tsx +42 -1
  250. package/src/sections/DiscussionThread/types.ts +6 -0
  251. package/src/sections/EnrollmentWizard/EnrollmentWizard.tsx +343 -0
  252. package/src/sections/EnrollmentWizard/types.ts +65 -0
  253. package/src/sections/ExamSession/ExamSession.tsx +100 -94
  254. package/src/sections/ExamSession/types.ts +6 -0
  255. package/src/sections/FlashcardStudySession/FlashcardStudySession.tsx +53 -36
  256. package/src/sections/FlashcardStudySession/types.ts +6 -0
  257. package/src/sections/ForumBoard/ForumBoard.tsx +67 -7
  258. package/src/sections/ForumBoard/types.ts +14 -0
  259. package/src/sections/GradebookTable/GradebookTable.tsx +54 -1
  260. package/src/sections/GradebookTable/types.ts +14 -0
  261. package/src/sections/LecturePlayer/LecturePlayer.tsx +63 -37
  262. package/src/sections/LecturePlayer/types.ts +8 -0
  263. package/src/sections/LessonPage/LessonPage.tsx +34 -6
  264. package/src/sections/LessonPage/types.ts +6 -0
  265. package/src/sections/PracticeQuiz/PracticeQuiz.tsx +106 -74
  266. package/src/sections/PracticeQuiz/types.ts +6 -0
  267. package/src/sections/ProgressDashboard/ProgressDashboard.tsx +64 -10
  268. package/src/sections/ProgressDashboard/types.ts +6 -0
  269. package/src/sections/QuizSession/QuizSession.tsx +71 -82
  270. package/src/sections/QuizSession/types.ts +6 -0
  271. package/src/sections/RequirementsChecklist/RequirementsChecklist.tsx +41 -1
  272. package/src/sections/RequirementsChecklist/types.ts +6 -0
  273. package/src/sections/ResourceLibrary/ResourceLibrary.tsx +64 -8
  274. package/src/sections/ResourceLibrary/types.ts +15 -1
  275. package/src/sections/RubricView/RubricView.tsx +37 -1
  276. package/src/sections/RubricView/types.ts +6 -0
  277. package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +36 -15
  278. package/src/sections/ScrollableQuiz/types.ts +6 -0
  279. package/src/sections/StudentProfile/StudentProfile.tsx +279 -0
  280. package/src/sections/StudentProfile/types.ts +99 -0
  281. package/src/sections/SurveyForm/SurveyForm.tsx +32 -5
  282. package/src/sections/SurveyForm/types.ts +6 -0
  283. package/src/sections/_shared/merge-answers.ts +22 -0
  284. package/src/sections/_shared/section-shell.tsx +64 -0
  285. package/src/sections/_shared/use-assessment-session.ts +125 -0
  286. package/src/sections/index.ts +40 -0
  287. package/src/social/user-avatar.tsx +9 -5
  288. package/src/styles/globals.css +39 -41
  289. package/src/ui/badge.tsx +8 -0
  290. package/src/ui/index.ts +2 -0
  291. package/src/ui/progress.tsx +4 -0
  292. package/src/ui/rich-text-editor.tsx +10 -0
  293. package/src/ui/rich-text-toolbar.tsx +2 -1
  294. package/src/ui/toast.tsx +170 -0
  295. package/src/utils/debounce.ts +8 -2
  296. package/src/utils/pick-palette-color.ts +33 -0
  297. package/src/video/types.ts +16 -0
  298. package/src/video/video-player.tsx +27 -6
  299. package/dist/ForumBoard-CHXU3mjC.js +0 -2207
  300. package/dist/ForumBoard-d1w5-r6n.cjs +0 -1
  301. package/dist/tabs-DRM2Iq_J.cjs +0 -172
  302. package/dist/tabs-Wf3h_Cx3.js +0 -21580
@@ -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>;
@@ -0,0 +1,5 @@
1
+ import { AdaptiveLearningPathProps } from './types';
2
+ export declare const AdaptiveLearningPath: {
3
+ (props: AdaptiveLearningPathProps): import("react/jsx-runtime").JSX.Element;
4
+ displayName: string;
5
+ };
@@ -0,0 +1,8 @@
1
+ import { PathNodeStatus } from './types';
2
+ interface PathConnectorProps {
3
+ /** Status of the node above this connector */
4
+ fromStatus: PathNodeStatus;
5
+ className?: string;
6
+ }
7
+ export declare function PathConnector({ fromStatus, className }: PathConnectorProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,7 @@
1
+ import { PathMilestone } from './types';
2
+ interface PathMilestoneMarkerProps {
3
+ milestone: PathMilestone;
4
+ className?: string;
5
+ }
6
+ export declare function PathMilestoneMarker({ milestone, className, }: PathMilestoneMarkerProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,10 @@
1
+ import { PathNode } from './types';
2
+ interface PathNodeCardProps {
3
+ node: PathNode;
4
+ onClick?: (uid: string) => void;
5
+ onStart?: (uid: string) => void;
6
+ readOnly?: boolean;
7
+ className?: string;
8
+ }
9
+ export declare const PathNodeCard: import('react').NamedExoticComponent<PathNodeCardProps>;
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import { PathSkill } from './types';
2
+ interface PathSkillBarProps {
3
+ skill: PathSkill;
4
+ onClick?: (uid: string) => void;
5
+ className?: string;
6
+ }
7
+ export declare const PathSkillBar: import('react').NamedExoticComponent<PathSkillBarProps>;
8
+ export {};
@@ -0,0 +1,136 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * Status of a single node in the learning path.
4
+ * - `locked` — prerequisites not met, node is inaccessible
5
+ * - `available` — prerequisites met, learner can start
6
+ * - `in_progress` — learner is currently working on this node
7
+ * - `completed` — learner finished but below mastery threshold
8
+ * - `mastered` — learner finished and reached the mastery threshold
9
+ * - `skipped` — node was bypassed by the adaptive engine
10
+ */
11
+ export type PathNodeStatus = "locked" | "available" | "in_progress" | "completed" | "mastered" | "skipped";
12
+ /**
13
+ * The type of learning activity a path node represents.
14
+ * Aligns with LearningObjectIcon type strings.
15
+ */
16
+ export type PathNodeType = "lesson" | "quiz" | "assignment" | "video" | "discussion" | "document" | "assessment" | "audio" | "link";
17
+ /** A skill or competency area that the learning path develops. */
18
+ export interface PathSkill {
19
+ uid: string;
20
+ name: string;
21
+ /** Current proficiency level 0–100 */
22
+ proficiency: number;
23
+ /** Target proficiency level 0–100 */
24
+ targetProficiency?: number;
25
+ }
26
+ /** A milestone marker along the learning path. */
27
+ export interface PathMilestone {
28
+ uid: string;
29
+ title: string;
30
+ description?: string;
31
+ /** Whether the milestone has been reached */
32
+ reached: boolean;
33
+ /** Index of the node after which this milestone appears (zero-based) */
34
+ afterNodeIndex: number;
35
+ variant?: "default" | "gold" | "silver" | "bronze";
36
+ }
37
+ /** A single node in the adaptive learning path. */
38
+ export interface PathNode {
39
+ uid: string;
40
+ title: string;
41
+ description?: string;
42
+ /** Learning activity type — used for icon selection via LearningObjectIcon */
43
+ type: PathNodeType;
44
+ status: PathNodeStatus;
45
+ /** Estimated duration in seconds */
46
+ estimatedDuration?: number;
47
+ /** Performance score if completed (0–100) */
48
+ score?: number;
49
+ /** Whether this node is recommended as the next step */
50
+ recommended?: boolean;
51
+ /** Skill UIDs that this node develops */
52
+ skillUids?: string[];
53
+ /** UIDs of prerequisite nodes */
54
+ prerequisites?: string[];
55
+ /** Optional custom icon (overrides type-based icon) */
56
+ icon?: ReactNode;
57
+ }
58
+ /** A branch point where the adaptive engine may redirect the learner. */
59
+ export interface PathBranch {
60
+ uid: string;
61
+ /** UID of the node where the branch originates */
62
+ fromNodeUid: string;
63
+ /** Label for this branch (e.g., "Review Fundamentals") */
64
+ label: string;
65
+ /** UIDs of nodes in this branch path */
66
+ nodeUids: string[];
67
+ /** Whether this branch is the active/chosen branch */
68
+ active?: boolean;
69
+ /** Condition description (e.g., "Score below 70%") */
70
+ condition?: string;
71
+ }
72
+ /** Overall progress summary for the path. */
73
+ export interface PathProgress {
74
+ /** Percentage of path completed (0–100) */
75
+ completionPercentage: number;
76
+ completedNodes: number;
77
+ totalNodes: number;
78
+ /** Total time spent in seconds */
79
+ totalTimeSpent: number;
80
+ /** Average score across completed nodes (0–100) */
81
+ averageScore?: number;
82
+ /** Current streak in days */
83
+ currentStreak?: number;
84
+ }
85
+ /**
86
+ * AdaptiveLearningPath section — a premium visualization of a personalized
87
+ * learning sequence that adapts based on learner performance.
88
+ *
89
+ * Shows a visual path map with nodes, connectors, milestones, skill bars,
90
+ * and summary stats. Each node represents a learning activity with status,
91
+ * score, and recommended-next indicators.
92
+ *
93
+ * @example
94
+ * <AdaptiveLearningPath
95
+ * title="React Mastery Path"
96
+ * description="A personalized journey for mastering React"
97
+ * nodes={pathNodes}
98
+ * progress={pathProgress}
99
+ * onNodeClick={(uid) => navigate(`/activity/${uid}`)}
100
+ * onNodeStart={(uid) => startActivity(uid)}
101
+ * />
102
+ */
103
+ export interface AdaptiveLearningPathProps {
104
+ /** Path title */
105
+ title: string;
106
+ /** Optional path description */
107
+ description?: string;
108
+ /** Difficulty level displayed in the header */
109
+ difficulty?: "beginner" | "intermediate" | "advanced";
110
+ /** Ordered list of learning path nodes */
111
+ nodes: PathNode[];
112
+ /** Overall path progress data */
113
+ progress: PathProgress;
114
+ /** Skill/competency areas covered by this path */
115
+ skills?: PathSkill[];
116
+ /** Milestones along the path */
117
+ milestones?: PathMilestone[];
118
+ /** Branch points for adaptive routing */
119
+ branches?: PathBranch[];
120
+ /** Called when the user clicks a node */
121
+ onNodeClick?: (nodeUid: string) => void;
122
+ /** Called when the user starts a recommended or available activity */
123
+ onNodeStart?: (nodeUid: string) => void;
124
+ /** Called when the user clicks a skill */
125
+ onSkillClick?: (skillUid: string) => void;
126
+ /** When true, disables all interactive elements. @default false */
127
+ readOnly?: boolean;
128
+ /** Render skeleton placeholders instead of content */
129
+ isLoading?: boolean;
130
+ /** Error message — renders an error state with optional retry */
131
+ error?: string | null;
132
+ /** Called when the user clicks retry in the error state */
133
+ onRetry?: () => void;
134
+ className?: string;
135
+ style?: React.CSSProperties;
136
+ }
@@ -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,5 @@
1
+ import { ContentAuthoringStudioProps } from './types';
2
+ export declare const ContentAuthoringStudio: {
3
+ (props: ContentAuthoringStudioProps): import("react/jsx-runtime").JSX.Element;
4
+ displayName: string;
5
+ };
@@ -0,0 +1,14 @@
1
+ import { LessonBlock } from '../../content/types';
2
+ import { AuthoringBlock } from './types';
3
+ interface BlockEditorItemProps {
4
+ item: AuthoringBlock;
5
+ onChange: (id: string, block: LessonBlock) => void;
6
+ onRemove: (id: string) => void;
7
+ onDuplicate: (id: string) => void;
8
+ onToggleCollapse: (id: string) => void;
9
+ dragProps: Record<string, unknown>;
10
+ isDragging: boolean;
11
+ isDragOver: boolean;
12
+ }
13
+ export declare const BlockEditorItem: import('react').NamedExoticComponent<BlockEditorItemProps>;
14
+ export {};
@@ -0,0 +1,12 @@
1
+ import { LessonBlock } from '../../content/types';
2
+ export declare function getBlockIcon(type: string): import('react').ComponentType<{
3
+ className?: string;
4
+ }>;
5
+ export declare function getBlockLabel(type: string): string;
6
+ interface BlockTypePickerProps {
7
+ onSelect: (type: LessonBlock["type"]) => void;
8
+ allowedTypes?: LessonBlock["type"][];
9
+ className?: string;
10
+ }
11
+ export declare function BlockTypePicker({ onSelect, allowedTypes, className, }: BlockTypePickerProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,67 @@
1
+ import { LessonBlock } from '../../content/types';
2
+ /**
3
+ * A single authoring block wrapping a LessonBlock with editor metadata.
4
+ */
5
+ export interface AuthoringBlock {
6
+ /** Unique identifier for keying and drag operations */
7
+ id: string;
8
+ /** The underlying content block data */
9
+ block: LessonBlock;
10
+ /** Whether this block is collapsed in the editor UI */
11
+ collapsed?: boolean;
12
+ }
13
+ /**
14
+ * Metadata for a block type option in the picker.
15
+ */
16
+ export interface BlockTypeOption {
17
+ type: LessonBlock["type"];
18
+ label: string;
19
+ description: string;
20
+ }
21
+ /**
22
+ * ContentAuthoringStudio is a premium block-based content editor
23
+ * for creating lessons. It produces the same `LessonBlock[]` data
24
+ * model that `LessonPage` renders, providing a WYSIWYG authoring
25
+ * experience with drag-and-drop reordering, per-block editors,
26
+ * and live preview.
27
+ *
28
+ * @example
29
+ * <ContentAuthoringStudio
30
+ * title="React Hooks Deep Dive"
31
+ * blocks={lessonBlocks}
32
+ * onBlocksChange={setLessonBlocks}
33
+ * onTitleChange={setTitle}
34
+ * onSave={({ title, blocks }) => api.saveLesson(title, blocks)}
35
+ * />
36
+ */
37
+ export interface ContentAuthoringStudioProps {
38
+ /** Lesson title (editable in edit mode) */
39
+ title?: string;
40
+ /** Initial content blocks */
41
+ blocks?: LessonBlock[];
42
+ /** Called when blocks change (add, edit, remove, reorder) */
43
+ onBlocksChange?: (blocks: LessonBlock[]) => void;
44
+ /** Called when the title changes */
45
+ onTitleChange?: (title: string) => void;
46
+ /** Called when the user clicks Save */
47
+ onSave?: (data: {
48
+ title: string;
49
+ blocks: LessonBlock[];
50
+ }) => void;
51
+ /** Show the edit/preview toggle. @default true */
52
+ showPreviewToggle?: boolean;
53
+ /** Restrict available block types. Defaults to all types. */
54
+ allowedBlockTypes?: LessonBlock["type"][];
55
+ /** When true, shows preview only (no editing controls). @default false */
56
+ readOnly?: boolean;
57
+ /** Render skeleton placeholders instead of content */
58
+ isLoading?: boolean;
59
+ /** Error message — renders an error state with optional retry */
60
+ error?: string | null;
61
+ /** Called when the user clicks retry in the error state */
62
+ onRetry?: () => void;
63
+ /** CSS class name for the root element */
64
+ className?: string;
65
+ /** Inline styles for the root element */
66
+ style?: React.CSSProperties;
67
+ }
@@ -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;