@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.
- package/dist/StudentProfile-BVfZMbnV.cjs +1 -0
- package/dist/StudentProfile-DeMxdrL3.js +3275 -0
- package/dist/assessment-toolbar/assessment-toolbar.d.ts +1 -1
- package/dist/assessment-toolbar/index.d.ts +5 -1
- package/dist/assessment-toolbar/question-header-bar.d.ts +2 -0
- package/dist/assessment-toolbar/question-materials-drawer.d.ts +2 -0
- package/dist/assessment-toolbar/question-navigator.d.ts +1 -1
- package/dist/assessment-toolbar/timer-display.d.ts +1 -1
- package/dist/assessment-toolbar/types.d.ts +52 -4
- package/dist/assessment-toolbar/use-countdown.d.ts +43 -0
- package/dist/common/index.d.ts +3 -1
- package/dist/common/pagination.d.ts +26 -0
- package/dist/common/stepper.d.ts +6 -0
- package/dist/common/types.d.ts +38 -0
- package/dist/components.css +1 -1
- package/dist/content/attachment-list.d.ts +6 -0
- package/dist/content/audio-player.d.ts +22 -0
- package/dist/content/code-block.d.ts +30 -0
- package/dist/content/content-block.d.ts +1 -1
- package/dist/content/embed-block.d.ts +28 -0
- package/dist/content/index.d.ts +8 -1
- package/dist/content/types.d.ts +63 -0
- package/dist/curriculum/course-card.d.ts +51 -0
- package/dist/curriculum/curriculum-item.d.ts +1 -1
- package/dist/curriculum/index.d.ts +2 -0
- package/dist/curriculum/types.d.ts +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +597 -308
- package/dist/license/HydraContext.d.ts +16 -0
- package/dist/license/ProBadge.d.ts +6 -0
- package/dist/license/index.d.ts +7 -0
- package/dist/license/tiers.d.ts +3 -0
- package/dist/license/useHydraLicense.d.ts +6 -0
- package/dist/license/validate.d.ts +13 -0
- package/dist/license/withProGate.d.ts +6 -0
- package/dist/modules/AssignmentModule/AssignmentModule.d.ts +5 -0
- package/dist/modules/AssignmentModule/types.d.ts +69 -0
- package/dist/modules/CertificateModule/CertificateModule.d.ts +5 -0
- package/dist/modules/CertificateModule/types.d.ts +51 -0
- package/dist/modules/CourseCatalogModule/CourseCatalogModule.d.ts +5 -0
- package/dist/modules/CourseCatalogModule/types.d.ts +43 -0
- package/dist/modules/CoursePlayer/CoursePlayer.d.ts +4 -1
- package/dist/modules/DiscussionModule/DiscussionModule.d.ts +5 -0
- package/dist/modules/DiscussionModule/types.d.ts +47 -0
- package/dist/modules/ExamModule/ExamModule.d.ts +5 -0
- package/dist/modules/ExamModule/types.d.ts +55 -0
- package/dist/modules/FlashcardLab/FlashcardLab.d.ts +4 -1
- package/dist/modules/FlashcardLab/types.d.ts +2 -0
- package/dist/modules/GradeCenterModule/GradeCenterModule.d.ts +5 -0
- package/dist/modules/GradeCenterModule/types.d.ts +56 -0
- package/dist/modules/QuizModule/QuizModule.d.ts +4 -1
- package/dist/modules/QuizModule/types.d.ts +10 -14
- package/dist/modules/StudentDashboardModule/StudentDashboardModule.d.ts +5 -0
- package/dist/modules/StudentDashboardModule/types.d.ts +54 -0
- package/dist/modules/StudentProfileModule/StudentProfileModule.d.ts +5 -0
- package/dist/modules/StudentProfileModule/types.d.ts +43 -0
- package/dist/modules/SurveyModule/SurveyModule.d.ts +5 -0
- package/dist/modules/SurveyModule/types.d.ts +51 -0
- package/dist/modules/_shared/assessment-intro.d.ts +16 -0
- package/dist/modules/_shared/assessment-results.d.ts +23 -0
- package/dist/modules/_shared/types.d.ts +10 -0
- package/dist/modules/_shared/use-timer.d.ts +9 -0
- package/dist/modules/index.d.ts +18 -0
- package/dist/modules.cjs +1 -0
- package/dist/modules.js +1834 -0
- package/dist/progress/achievement-badge.d.ts +6 -0
- package/dist/progress/activity-timeline.d.ts +6 -0
- package/dist/progress/index.d.ts +4 -1
- package/dist/progress/stat-card.d.ts +1 -1
- package/dist/progress/streak-badge.d.ts +6 -0
- package/dist/progress/types.d.ts +99 -0
- package/dist/provider/HydraProvider.d.ts +5 -1
- package/dist/questions/choice.d.ts +1 -1
- package/dist/questions/confidence-indicator.d.ts +37 -0
- package/dist/questions/essay.d.ts +2 -2
- package/dist/questions/fill-in-the-blank.d.ts +1 -1
- package/dist/questions/hotspot.d.ts +21 -0
- package/dist/questions/index.d.ts +11 -1
- package/dist/questions/inline-choice.d.ts +21 -0
- package/dist/questions/matching.d.ts +22 -0
- package/dist/questions/multiple-choice.d.ts +1 -1
- package/dist/questions/numeric.d.ts +11 -0
- package/dist/questions/ordering.d.ts +12 -0
- package/dist/questions/question-renderer.d.ts +1 -1
- package/dist/questions/scenario.d.ts +23 -0
- package/dist/questions/scoring.d.ts +22 -0
- package/dist/questions/spreadsheet.d.ts +29 -0
- package/dist/questions/true-false.d.ts +1 -1
- package/dist/questions/types.d.ts +106 -1
- package/dist/questions/use-drag-reorder.d.ts +17 -0
- package/dist/sections/AnnouncementFeed/AnnouncementFeed.d.ts +1 -1
- package/dist/sections/AnnouncementFeed/types.d.ts +15 -1
- package/dist/sections/AssessmentReview/AssessmentReview.d.ts +1 -1
- package/dist/sections/AssessmentReview/types.d.ts +6 -0
- package/dist/sections/AssignmentSubmission/AssignmentSubmission.d.ts +1 -1
- package/dist/sections/AssignmentSubmission/types.d.ts +6 -0
- package/dist/sections/CertificateViewer/CertificateViewer.d.ts +1 -1
- package/dist/sections/CertificateViewer/certificate-variants.d.ts +42 -0
- package/dist/sections/CertificateViewer/types.d.ts +13 -5
- package/dist/sections/CourseCatalog/CourseCatalog.d.ts +2 -0
- package/dist/sections/CourseCatalog/types.d.ts +80 -0
- package/dist/sections/CourseOutline/CourseOutline.d.ts +1 -1
- package/dist/sections/CourseOutline/types.d.ts +6 -0
- package/dist/sections/DiscussionThread/DiscussionThread.d.ts +1 -1
- package/dist/sections/DiscussionThread/types.d.ts +6 -0
- package/dist/sections/EnrollmentWizard/EnrollmentWizard.d.ts +2 -0
- package/dist/sections/EnrollmentWizard/types.d.ts +66 -0
- package/dist/sections/ExamSession/ExamSession.d.ts +1 -1
- package/dist/sections/ExamSession/types.d.ts +12 -1
- package/dist/sections/FlashcardStudySession/FlashcardStudySession.d.ts +1 -1
- package/dist/sections/FlashcardStudySession/types.d.ts +6 -0
- package/dist/sections/ForumBoard/ForumBoard.d.ts +8 -0
- package/dist/sections/ForumBoard/types.d.ts +78 -0
- package/dist/sections/GradebookTable/GradebookTable.d.ts +1 -1
- package/dist/sections/GradebookTable/types.d.ts +14 -0
- package/dist/sections/LecturePlayer/LecturePlayer.d.ts +1 -1
- package/dist/sections/LecturePlayer/types.d.ts +8 -0
- package/dist/sections/LessonPage/LessonPage.d.ts +1 -1
- package/dist/sections/LessonPage/types.d.ts +6 -0
- package/dist/sections/PracticeQuiz/PracticeQuiz.d.ts +1 -1
- package/dist/sections/PracticeQuiz/types.d.ts +6 -0
- package/dist/sections/ProgressDashboard/ProgressDashboard.d.ts +1 -1
- package/dist/sections/ProgressDashboard/types.d.ts +6 -0
- package/dist/sections/QuizSession/QuizSession.d.ts +1 -1
- package/dist/sections/QuizSession/types.d.ts +12 -1
- package/dist/sections/RequirementsChecklist/RequirementsChecklist.d.ts +8 -0
- package/dist/sections/RequirementsChecklist/types.d.ts +43 -0
- package/dist/sections/ResourceLibrary/ResourceLibrary.d.ts +1 -1
- package/dist/sections/ResourceLibrary/types.d.ts +15 -1
- package/dist/sections/RubricView/RubricView.d.ts +9 -0
- package/dist/sections/RubricView/types.d.ts +56 -0
- package/dist/sections/ScrollableQuiz/ScrollableQuiz.d.ts +1 -1
- package/dist/sections/ScrollableQuiz/types.d.ts +6 -0
- package/dist/sections/StudentProfile/StudentProfile.d.ts +2 -0
- package/dist/sections/StudentProfile/types.d.ts +98 -0
- package/dist/sections/SurveyForm/SurveyForm.d.ts +1 -1
- package/dist/sections/SurveyForm/types.d.ts +6 -0
- package/dist/sections/_shared/merge-answers.d.ts +9 -0
- package/dist/sections/_shared/section-shell.d.ts +20 -0
- package/dist/sections/_shared/use-assessment-session.d.ts +30 -0
- package/dist/sections/index.d.ts +13 -1
- package/dist/sections.cjs +1 -1
- package/dist/sections.js +282 -1786
- package/dist/social/post-card.d.ts +1 -1
- package/dist/tabs-BsfVo2Bl.cjs +173 -0
- package/dist/tabs-BuY1iNJE.js +22305 -0
- package/dist/ui/alert.d.ts +1 -1
- package/dist/ui/badge.d.ts +1 -1
- package/dist/ui/button.d.ts +1 -1
- package/dist/ui/drawer.d.ts +84 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/progress.d.ts +1 -1
- package/dist/ui/rich-text-editor.d.ts +32 -0
- package/dist/ui/rich-text-toolbar.d.ts +8 -0
- package/dist/ui/toast.d.ts +43 -0
- package/dist/utils/array-utils.d.ts +4 -0
- package/dist/utils/debounce.d.ts +5 -1
- package/dist/utils/flatten-leaves.d.ts +6 -0
- package/dist/utils/format-file-size.d.ts +1 -0
- package/dist/utils/format-timestamp.d.ts +1 -0
- package/dist/utils/is-empty-html.d.ts +5 -0
- package/dist/utils/pick-palette-color.d.ts +19 -0
- package/dist/utils/shuffle.d.ts +1 -0
- package/dist/utils/string-utils.d.ts +12 -0
- package/dist/video/types.d.ts +15 -0
- package/dist/video/video-bookmark.d.ts +1 -1
- package/dist/video/video-player.d.ts +1 -1
- package/dist/video/video-playlist-item.d.ts +1 -1
- package/dist/withProGate-BWqcKdPM.js +137 -0
- package/dist/withProGate-DX6XqKLp.cjs +1 -0
- package/package.json +40 -137
- package/src/assessment-toolbar/assessment-toolbar.tsx +54 -49
- package/src/assessment-toolbar/index.ts +6 -0
- package/src/assessment-toolbar/question-header-bar.tsx +61 -0
- package/src/assessment-toolbar/question-materials-drawer.tsx +55 -0
- package/src/assessment-toolbar/question-navigator.tsx +13 -36
- package/src/assessment-toolbar/timer-display.tsx +6 -5
- package/src/assessment-toolbar/types.ts +54 -4
- package/src/assessment-toolbar/use-countdown.ts +153 -0
- package/src/common/empty-state.tsx +1 -0
- package/src/common/index.ts +5 -0
- package/src/common/pagination.tsx +135 -0
- package/src/common/search-input.tsx +8 -6
- package/src/common/stepper.tsx +100 -0
- package/src/common/types.ts +41 -0
- package/src/content/attachment-list.tsx +92 -0
- package/src/content/audio-player.tsx +196 -0
- package/src/content/code-block.tsx +113 -0
- package/src/content/content-block.tsx +68 -2
- package/src/content/embed-block.tsx +78 -0
- package/src/content/file-upload-zone.tsx +11 -6
- package/src/content/index.ts +9 -0
- package/src/content/types.ts +46 -0
- package/src/curriculum/course-card.tsx +199 -0
- package/src/curriculum/curriculum-item.tsx +9 -5
- package/src/curriculum/curriculum-tree.tsx +20 -13
- package/src/curriculum/index.ts +2 -0
- package/src/curriculum/types.ts +2 -2
- package/src/feedback/feedback-banner.tsx +12 -14
- package/src/flashcards/flashcard-deck.tsx +1 -9
- package/src/flashcards/flashcard.tsx +29 -9
- package/src/index.ts +3 -0
- package/src/license/HydraContext.tsx +62 -0
- package/src/license/ProBadge.tsx +43 -0
- package/src/license/index.ts +7 -0
- package/src/license/tiers.ts +24 -0
- package/src/license/useHydraLicense.ts +10 -0
- package/src/license/validate.ts +90 -0
- package/src/license/withProGate.tsx +21 -0
- package/src/modules/AssignmentModule/AssignmentModule.tsx +314 -0
- package/src/modules/AssignmentModule/types.ts +77 -0
- package/src/modules/CertificateModule/CertificateModule.tsx +173 -0
- package/src/modules/CertificateModule/types.ts +49 -0
- package/src/modules/CourseCatalogModule/CourseCatalogModule.tsx +126 -0
- package/src/modules/CourseCatalogModule/types.ts +47 -0
- package/src/modules/CoursePlayer/CoursePlayer.tsx +80 -69
- package/src/modules/DiscussionModule/DiscussionModule.tsx +145 -0
- package/src/modules/DiscussionModule/types.ts +54 -0
- package/src/modules/ExamModule/ExamModule.tsx +151 -0
- package/src/modules/ExamModule/types.ts +57 -0
- package/src/modules/FlashcardLab/FlashcardLab.tsx +39 -21
- package/src/modules/FlashcardLab/types.ts +2 -0
- package/src/modules/GradeCenterModule/GradeCenterModule.tsx +174 -0
- package/src/modules/GradeCenterModule/types.ts +65 -0
- package/src/modules/QuizModule/QuizModule.tsx +58 -178
- package/src/modules/QuizModule/types.ts +10 -15
- package/src/modules/StudentDashboardModule/StudentDashboardModule.tsx +117 -0
- package/src/modules/StudentDashboardModule/types.ts +56 -0
- package/src/modules/StudentProfileModule/StudentProfileModule.tsx +289 -0
- package/src/modules/StudentProfileModule/types.ts +45 -0
- package/src/modules/SurveyModule/SurveyModule.tsx +185 -0
- package/src/modules/SurveyModule/types.ts +53 -0
- package/src/modules/_shared/assessment-intro.tsx +75 -0
- package/src/modules/_shared/assessment-results.tsx +133 -0
- package/src/modules/_shared/types.ts +11 -0
- package/src/modules/_shared/use-timer.ts +49 -0
- package/src/modules/index.ts +33 -0
- package/src/progress/achievement-badge.tsx +52 -0
- package/src/progress/activity-timeline.tsx +84 -0
- package/src/progress/grade-indicator.tsx +9 -1
- package/src/progress/index.ts +7 -0
- package/src/progress/progress-ring.tsx +2 -1
- package/src/progress/stat-card.tsx +37 -18
- package/src/progress/streak-badge.tsx +35 -0
- package/src/progress/types.ts +103 -0
- package/src/provider/HydraProvider.tsx +15 -6
- package/src/questions/choice.tsx +19 -14
- package/src/questions/confidence-indicator.tsx +107 -0
- package/src/questions/essay.tsx +28 -28
- package/src/questions/fill-in-the-blank.tsx +20 -19
- package/src/questions/hotspot.tsx +154 -0
- package/src/questions/index.ts +18 -0
- package/src/questions/inline-choice.tsx +152 -0
- package/src/questions/matching.tsx +229 -0
- package/src/questions/multiple-choice.tsx +19 -14
- package/src/questions/numeric.tsx +106 -0
- package/src/questions/ordering.tsx +167 -0
- package/src/questions/question-renderer.tsx +24 -2
- package/src/questions/scenario.tsx +140 -0
- package/src/questions/scoring.ts +201 -0
- package/src/questions/spreadsheet.tsx +260 -0
- package/src/questions/true-false.tsx +19 -14
- package/src/questions/types.ts +123 -1
- package/src/questions/use-drag-reorder.ts +80 -0
- package/src/sections/AnnouncementFeed/AnnouncementFeed.tsx +66 -23
- package/src/sections/AnnouncementFeed/types.ts +15 -1
- package/src/sections/AssessmentReview/AssessmentReview.tsx +50 -2
- package/src/sections/AssessmentReview/types.ts +6 -0
- package/src/sections/AssignmentSubmission/AssignmentSubmission.tsx +44 -6
- package/src/sections/AssignmentSubmission/types.ts +6 -0
- package/src/sections/CertificateViewer/CertificateViewer.tsx +215 -60
- package/src/sections/CertificateViewer/certificate-variants.tsx +170 -0
- package/src/sections/CertificateViewer/types.ts +19 -5
- package/src/sections/CourseCatalog/CourseCatalog.tsx +220 -0
- package/src/sections/CourseCatalog/types.ts +76 -0
- package/src/sections/CourseOutline/CourseOutline.tsx +45 -14
- package/src/sections/CourseOutline/types.ts +6 -0
- package/src/sections/DiscussionThread/DiscussionThread.tsx +55 -11
- package/src/sections/DiscussionThread/types.ts +6 -0
- package/src/sections/EnrollmentWizard/EnrollmentWizard.tsx +343 -0
- package/src/sections/EnrollmentWizard/types.ts +65 -0
- package/src/sections/ExamSession/ExamSession.tsx +125 -82
- package/src/sections/ExamSession/types.ts +12 -1
- package/src/sections/FlashcardStudySession/FlashcardStudySession.tsx +53 -36
- package/src/sections/FlashcardStudySession/types.ts +6 -0
- package/src/sections/ForumBoard/ForumBoard.tsx +342 -0
- package/src/sections/ForumBoard/types.ts +81 -0
- package/src/sections/GradebookTable/GradebookTable.tsx +55 -2
- package/src/sections/GradebookTable/types.ts +14 -0
- package/src/sections/LecturePlayer/LecturePlayer.tsx +63 -37
- package/src/sections/LecturePlayer/types.ts +8 -0
- package/src/sections/LessonPage/LessonPage.tsx +40 -13
- package/src/sections/LessonPage/types.ts +6 -0
- package/src/sections/PracticeQuiz/PracticeQuiz.tsx +119 -98
- package/src/sections/PracticeQuiz/types.ts +6 -0
- package/src/sections/ProgressDashboard/ProgressDashboard.tsx +121 -67
- package/src/sections/ProgressDashboard/types.ts +6 -0
- package/src/sections/QuizSession/QuizSession.tsx +115 -67
- package/src/sections/QuizSession/types.ts +12 -1
- package/src/sections/RequirementsChecklist/RequirementsChecklist.tsx +147 -0
- package/src/sections/RequirementsChecklist/types.ts +44 -0
- package/src/sections/ResourceLibrary/ResourceLibrary.tsx +68 -17
- package/src/sections/ResourceLibrary/types.ts +15 -1
- package/src/sections/RubricView/RubricView.tsx +174 -0
- package/src/sections/RubricView/types.ts +58 -0
- package/src/sections/ScrollableQuiz/ScrollableQuiz.tsx +58 -23
- package/src/sections/ScrollableQuiz/types.ts +6 -0
- package/src/sections/StudentProfile/StudentProfile.tsx +279 -0
- package/src/sections/StudentProfile/types.ts +99 -0
- package/src/sections/SurveyForm/SurveyForm.tsx +40 -10
- package/src/sections/SurveyForm/types.ts +6 -0
- package/src/sections/_shared/merge-answers.ts +22 -0
- package/src/sections/_shared/section-shell.tsx +64 -0
- package/src/sections/_shared/use-assessment-session.ts +125 -0
- package/src/sections/index.ts +42 -1
- package/src/social/post-card.tsx +8 -19
- package/src/social/user-avatar.tsx +10 -5
- package/src/styles/globals.css +52 -41
- package/src/ui/badge.tsx +8 -0
- package/src/ui/drawer.tsx +600 -0
- package/src/ui/index.ts +21 -0
- package/src/ui/progress.tsx +4 -0
- package/src/ui/rich-text-editor.tsx +119 -0
- package/src/ui/rich-text-toolbar.tsx +157 -0
- package/src/ui/toast.tsx +170 -0
- package/src/utils/array-utils.ts +17 -0
- package/src/utils/debounce.ts +8 -2
- package/src/utils/flatten-leaves.ts +17 -0
- package/src/utils/format-file-size.ts +5 -0
- package/src/utils/format-timestamp.ts +13 -0
- package/src/utils/is-empty-html.ts +7 -0
- package/src/utils/pick-palette-color.ts +33 -0
- package/src/utils/shuffle.ts +8 -0
- package/src/utils/string-utils.ts +30 -0
- package/src/video/types.ts +16 -0
- package/src/video/video-bookmark.tsx +4 -3
- package/src/video/video-chapter-list.tsx +9 -4
- package/src/video/video-player.tsx +24 -5
- package/src/video/video-playlist-item.tsx +8 -3
- package/src/video/video-thumbnail-card.tsx +4 -0
- package/src/video/video-transcript.tsx +8 -5
- package/dist/table-BrS5cDQu.js +0 -2510
- package/dist/table-D6AkBBEo.cjs +0 -1
|
@@ -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>;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
/** Available certificate visual styles */
|
|
2
|
+
export type CertificateVariant = "classic" | "modern" | "elegant" | "academic" | "minimal" | "bold";
|
|
1
3
|
/**
|
|
2
4
|
* CertificateViewer section — a printable completion certificate.
|
|
3
5
|
*
|
|
4
6
|
* Displays a certificate with recipient details, course information,
|
|
5
|
-
* signatory, and verification ID. Supports
|
|
6
|
-
* classic, modern, and
|
|
7
|
+
* signatory, and verification ID. Supports six visual variants:
|
|
8
|
+
* classic, modern, elegant, academic, minimal, and bold.
|
|
7
9
|
*
|
|
8
10
|
* @example
|
|
9
11
|
* <CertificateViewer
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
* courseTitle="Advanced React"
|
|
12
14
|
* completionDate="2025-03-01"
|
|
13
15
|
* organizationName="HydraLMS Academy"
|
|
14
|
-
* variant="
|
|
16
|
+
* variant="elegant"
|
|
15
17
|
* />
|
|
16
18
|
*/
|
|
17
19
|
export interface CertificateViewerProps {
|
|
@@ -32,14 +34,20 @@ export interface CertificateViewerProps {
|
|
|
32
34
|
};
|
|
33
35
|
/** Unique certificate ID */
|
|
34
36
|
certificateId?: string;
|
|
35
|
-
/** Certificate template variant */
|
|
36
|
-
variant?:
|
|
37
|
+
/** Certificate template variant @default "classic" */
|
|
38
|
+
variant?: CertificateVariant;
|
|
37
39
|
/** Whether to show print/download actions */
|
|
38
40
|
showActions?: boolean;
|
|
39
41
|
/** Called when print is triggered */
|
|
40
42
|
onPrint?: () => void;
|
|
41
43
|
/** Called when download is triggered */
|
|
42
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;
|
|
43
51
|
/** CSS class name for the root element */
|
|
44
52
|
className?: string;
|
|
45
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,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, 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;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { QuestionData, SessionAnswer } from '../../questions/types';
|
|
2
|
+
import { QuestionData, QuestionMaterial, SessionAnswer } from '../../questions/types';
|
|
3
3
|
/**
|
|
4
4
|
* ExamSession section — a formal timed exam experience.
|
|
5
5
|
*
|
|
@@ -43,8 +43,19 @@ export interface ExamSessionProps {
|
|
|
43
43
|
instructions?: ReactNode;
|
|
44
44
|
/** Whether the submit action is in flight */
|
|
45
45
|
isSubmitting?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Related materials keyed by question UID. When provided, a "Materials"
|
|
48
|
+
* button appears in the question header, opening a drawer with content blocks.
|
|
49
|
+
*/
|
|
50
|
+
questionMaterials?: QuestionMaterial[];
|
|
46
51
|
/** When true, all inputs are disabled */
|
|
47
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;
|
|
48
59
|
/** CSS class name for the root element */
|
|
49
60
|
className?: string;
|
|
50
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 */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ForumBoardProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* ForumBoard — a topic listing view for a discussion forum.
|
|
4
|
+
*
|
|
5
|
+
* Displays a searchable, sortable list of discussion topics with author info,
|
|
6
|
+
* reply/like counts, timestamps, and new topic creation.
|
|
7
|
+
*/
|
|
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;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { DiscussionUser } from '../DiscussionThread/types';
|
|
2
|
+
export type ForumSortOrder = "newest" | "oldest" | "most_replies" | "most_liked";
|
|
3
|
+
/**
|
|
4
|
+
* ForumBoard section — a topic listing view for a discussion forum.
|
|
5
|
+
*
|
|
6
|
+
* Displays a searchable, sortable list of discussion topics with author info,
|
|
7
|
+
* reply/like counts, and timestamps. Supports creating new topics inline.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <ForumBoard
|
|
11
|
+
* title="Class Discussion"
|
|
12
|
+
* topics={topics}
|
|
13
|
+
* onTopicClick={(uid) => openThread(uid)}
|
|
14
|
+
* onCreateTopic={(title, content) => createTopic(title, content)}
|
|
15
|
+
* />
|
|
16
|
+
*/
|
|
17
|
+
export interface ForumBoardProps {
|
|
18
|
+
/** Forum title */
|
|
19
|
+
title?: string;
|
|
20
|
+
/** List of discussion topics */
|
|
21
|
+
topics: ForumTopic[];
|
|
22
|
+
/** The currently authenticated user (reserved for future use) */
|
|
23
|
+
currentUser?: DiscussionUser;
|
|
24
|
+
/** Called when a topic is clicked */
|
|
25
|
+
onTopicClick: (topicUid: string) => void;
|
|
26
|
+
/** Called when a new topic is created */
|
|
27
|
+
onCreateTopic?: (title: string, content: string) => void;
|
|
28
|
+
/** Current sort order */
|
|
29
|
+
sortOrder?: ForumSortOrder;
|
|
30
|
+
/** Called when sort order changes */
|
|
31
|
+
onSortChange?: (sort: ForumSortOrder) => void;
|
|
32
|
+
/** Current search query (controlled) */
|
|
33
|
+
searchQuery?: string;
|
|
34
|
+
/** Called when search query changes */
|
|
35
|
+
onSearchChange?: (query: string) => void;
|
|
36
|
+
/** When true, disables create and interactions */
|
|
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;
|
|
52
|
+
/** CSS class name for the root element */
|
|
53
|
+
className?: string;
|
|
54
|
+
/** Inline styles for the root element */
|
|
55
|
+
style?: React.CSSProperties;
|
|
56
|
+
}
|
|
57
|
+
export interface ForumTopic {
|
|
58
|
+
/** Unique identifier */
|
|
59
|
+
uid: string;
|
|
60
|
+
/** Topic title */
|
|
61
|
+
title: string;
|
|
62
|
+
/** Topic author */
|
|
63
|
+
author: DiscussionUser;
|
|
64
|
+
/** Creation timestamp */
|
|
65
|
+
createdAt: string;
|
|
66
|
+
/** Number of replies */
|
|
67
|
+
replyCount: number;
|
|
68
|
+
/** Number of likes */
|
|
69
|
+
likeCount: number;
|
|
70
|
+
/** Timestamp of the most recent reply */
|
|
71
|
+
lastReplyAt?: string;
|
|
72
|
+
/** Whether this topic is pinned to the top */
|
|
73
|
+
isPinned?: boolean;
|
|
74
|
+
/** Whether this topic has a marked answer */
|
|
75
|
+
isAnswered?: boolean;
|
|
76
|
+
/** Preview text (first ~100 chars of content) */
|
|
77
|
+
preview?: string;
|
|
78
|
+
}
|
|
@@ -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;
|
|
@@ -33,6 +33,12 @@ export interface LessonPageProps {
|
|
|
33
33
|
showDuration?: boolean;
|
|
34
34
|
/** When true, disables interactive elements */
|
|
35
35
|
readOnly?: 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 { PracticeQuizProps } from './types';
|
|
2
|
-
export declare function PracticeQuiz({ questions: questionsProp, instantFeedback, allowRetry, onComplete, shuffled, readOnly, className, style, }: PracticeQuizProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function PracticeQuiz({ questions: questionsProp, instantFeedback, allowRetry, onComplete, shuffled, readOnly, isLoading, error, onRetry, className, style, }: PracticeQuizProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -27,6 +27,12 @@ export interface PracticeQuizProps {
|
|
|
27
27
|
shuffled?: boolean;
|
|
28
28
|
/** When true, all inputs are disabled */
|
|
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 */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ProgressDashboardProps } from './types';
|
|
2
|
-
export declare function ProgressDashboard({ overallProgress, totalTimeSpent, modules, recentActivity, streak, achievements, recentActivityLimit, onModuleClick, className, style, }: ProgressDashboardProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function ProgressDashboard({ overallProgress, totalTimeSpent, modules, recentActivity, streak, achievements, recentActivityLimit, onModuleClick, isLoading, error, onRetry, className, style, }: ProgressDashboardProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -32,6 +32,12 @@ export interface ProgressDashboardProps {
|
|
|
32
32
|
recentActivityLimit?: number;
|
|
33
33
|
/** Called when the user clicks a module */
|
|
34
34
|
onModuleClick?: (moduleUid: string) => void;
|
|
35
|
+
/** Render skeleton placeholders instead of content */
|
|
36
|
+
isLoading?: boolean;
|
|
37
|
+
/** Error message — renders an error state with optional retry */
|
|
38
|
+
error?: string | null;
|
|
39
|
+
/** Called when the user clicks retry in the error state */
|
|
40
|
+
onRetry?: () => void;
|
|
35
41
|
/** CSS class name for the root element */
|
|
36
42
|
className?: string;
|
|
37
43
|
/** Inline styles for the root element */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { QuizSessionProps } from './types';
|
|
2
|
-
export declare function QuizSession({ questions, initialAnswers, onSubmit, onAnswerChange, timeElapsedSeconds, timeLimitSeconds, isSubmitting, readOnly, className, style, }: QuizSessionProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function QuizSession({ questions, initialAnswers, onSubmit, onAnswerChange, timeElapsedSeconds, timeLimitSeconds, questionMaterials, isSubmitting, readOnly, isLoading, error, onRetry, className, style, }: QuizSessionProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { QuestionData, SessionAnswer } from '../../questions/types';
|
|
1
|
+
import { QuestionData, QuestionMaterial, SessionAnswer } from '../../questions/types';
|
|
2
2
|
/**
|
|
3
3
|
* QuizSession section — a complete assessment session experience.
|
|
4
4
|
*
|
|
@@ -37,8 +37,19 @@ export interface QuizSessionProps {
|
|
|
37
37
|
timeLimitSeconds?: number;
|
|
38
38
|
/** Whether the submit action is currently in flight */
|
|
39
39
|
isSubmitting?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Related materials keyed by question UID. When provided, a "Materials"
|
|
42
|
+
* button appears in the question header, opening a drawer with content blocks.
|
|
43
|
+
*/
|
|
44
|
+
questionMaterials?: QuestionMaterial[];
|
|
40
45
|
/** When true, all inputs are disabled (e.g. after submission) */
|
|
41
46
|
readOnly?: boolean;
|
|
47
|
+
/** Render skeleton placeholders instead of content */
|
|
48
|
+
isLoading?: boolean;
|
|
49
|
+
/** Error message — renders an error state with optional retry */
|
|
50
|
+
error?: string | null;
|
|
51
|
+
/** Called when the user clicks retry in the error state */
|
|
52
|
+
onRetry?: () => void;
|
|
42
53
|
/** CSS class name for the root element */
|
|
43
54
|
className?: string;
|
|
44
55
|
/** Inline styles for the root element */
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RequirementsChecklistProps } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* RequirementsChecklist — shows completion requirements with checked/unchecked status.
|
|
4
|
+
*
|
|
5
|
+
* Displays a vertical list of requirements with an overall progress bar.
|
|
6
|
+
* Incomplete items can be clicked to navigate to the relevant content.
|
|
7
|
+
*/
|
|
8
|
+
export declare function RequirementsChecklist({ title, requirements, onRequirementClick, isLoading, error, onRetry, className, style, }: RequirementsChecklistProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RequirementsChecklist section — shows completion requirements with progress tracking.
|
|
3
|
+
*
|
|
4
|
+
* Displays a list of requirements with checked/unchecked status and an overall
|
|
5
|
+
* progress bar. Incomplete items can be clicked to navigate to the relevant content.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* <RequirementsChecklist
|
|
9
|
+
* title="Certificate Requirements"
|
|
10
|
+
* requirements={requirements}
|
|
11
|
+
* onRequirementClick={(uid) => navigateTo(uid)}
|
|
12
|
+
* />
|
|
13
|
+
*/
|
|
14
|
+
export interface RequirementsChecklistProps {
|
|
15
|
+
/** Section title */
|
|
16
|
+
title?: string;
|
|
17
|
+
/** List of requirements to display */
|
|
18
|
+
requirements: Requirement[];
|
|
19
|
+
/** Called when the user clicks an incomplete requirement */
|
|
20
|
+
onRequirementClick?: (uid: string) => void;
|
|
21
|
+
/** Render skeleton placeholders instead of content */
|
|
22
|
+
isLoading?: boolean;
|
|
23
|
+
/** Error message — renders an error state with optional retry */
|
|
24
|
+
error?: string | null;
|
|
25
|
+
/** Called when the user clicks retry in the error state */
|
|
26
|
+
onRetry?: () => void;
|
|
27
|
+
/** CSS class name for the root element */
|
|
28
|
+
className?: string;
|
|
29
|
+
/** Inline styles for the root element */
|
|
30
|
+
style?: React.CSSProperties;
|
|
31
|
+
}
|
|
32
|
+
export interface Requirement {
|
|
33
|
+
/** Unique identifier */
|
|
34
|
+
uid: string;
|
|
35
|
+
/** Requirement label */
|
|
36
|
+
label: string;
|
|
37
|
+
/** Optional description */
|
|
38
|
+
description?: string;
|
|
39
|
+
/** Whether this requirement has been completed */
|
|
40
|
+
completed: boolean;
|
|
41
|
+
/** Optional action label for clickable items */
|
|
42
|
+
actionLabel?: string;
|
|
43
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ResourceLibraryProps } from './types';
|
|
2
|
-
export declare function ResourceLibrary({ resources, categories, onResourceClick, onDownload, viewMode: initialViewMode, allowViewToggle, showSearch, emptyMessage, readOnly, className, style, }: ResourceLibraryProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function ResourceLibrary({ resources, categories, onResourceClick, onDownload, viewMode: initialViewMode, allowViewToggle, showSearch, emptyMessage, readOnly, isLoading, error, onRetry, pageSize, currentPage, totalItems, onPageChange, className, style, }: ResourceLibraryProps): import("react/jsx-runtime").JSX.Element;
|