feat(shared): add UI components, hooks, form fields, and action utils

- Add UI components: confirm-delete-dialog, empty-table-row, list-pagination, pagination, status-badge

- Add form-fields directory for reusable form field components

- Add hooks: use-action-mutation, use-action-query for server action integration

- Add action-utils lib for action state helpers

- Update a11y components, charts, global-search, onboarding-gate, question components

- Update UI components: chip-nav, filter-bar, page-header, stat-card, stat-item, switch, table

- Update hooks: use-action-with-toast, use-aria-live, use-debounce, use-local-storage, use-media-query, use-permission

- Update lib: a11y, ai, audit-logger, auth-guard, bcrypt-utils, change-logger, download, excel, file-storage, http-utils, login-logger, password-policy, password-security-service, permissions, rate-limit, role-utils, search-params, session, storage-provider

- Update types: action-state, permissions

- Update i18n messages (en, zh-CN) for dashboard, diagnostic, grades, lesson-preparation, settings
This commit is contained in:
SpecialX
2026-06-23 17:38:14 +08:00
parent 9ceb2b7b67
commit c4d3433cc9
25 changed files with 1986 additions and 28 deletions

View File

@@ -34,9 +34,17 @@
"chart": {
"radarTitle": "Knowledge Point Mastery",
"radarDescription": "Radar chart of mastery level (student vs class average)",
"radarDescriptionNonEmpty": "Radar chart of mastery level (0-100) across knowledge points.",
"heatmapTitle": "Knowledge Point Mastery Heatmap",
"rankingTitle": "Knowledge Point Ranking",
"noMasteryData": "No knowledge point mastery records found."
"noMasteryData": "No knowledge point mastery records found.",
"noMasteryDataForStudent": "No knowledge point mastery records found for this student.",
"radarEmptyTitle": "No mastery data",
"radarAriaLabelEmpty": "Knowledge point mastery radar chart: no data",
"radarAriaLabelNonEmpty": "Knowledge point mastery radar chart: {count} knowledge points{withClassAverage}",
"withClassAverage": " (with class average comparison)",
"studentSeries": "Student",
"classAvgSeries": "Class Avg"
},
"report": {
"generate": "Generate Diagnostic Report",
@@ -44,6 +52,7 @@
"generateClass": "Generate Class Diagnostic Report",
"publish": "Publish",
"delete": "Delete",
"export": "Export",
"publishTitle": "Publish Report",
"publishConfirmation": "Are you sure you want to publish this report? It will be visible to relevant users.",
"deleteTitle": "Delete Report",
@@ -82,6 +91,99 @@
"publishFailed": "Failed to publish",
"deleteFailed": "Failed to delete",
"loadFailed": "Failed to load",
"exportFailed": "Export failed",
"retry": "Retry"
},
"classDiagnostic": {
"noClassDataTitle": "No class data",
"heatmapDescription": "Average mastery level per knowledge point (green >=80%, yellow 60-79%, orange 40-59%, red <40%).",
"noKnowledgePointData": "No knowledge point data available.",
"heatmapAriaLabel": "Knowledge point mastery heatmap, {count} knowledge points. Color indicates mastery level: green >=80% excellent, yellow 60-79% good, orange 40-59% needs improvement, red <40% weak",
"masteryLevelExcellent": "Excellent",
"masteryLevelGood": "Good",
"masteryLevelNeedsImprovement": "Needs Improvement",
"masteryLevelWeak": "Weak",
"legendLabel": "Color Legend",
"noRankingData": "No data.",
"knowledgePointColumn": "Knowledge Point",
"avgMasteryColumn": "Avg Mastery",
"masteredColumn": "Mastered (≥80%)",
"notMasteredColumn": "Not Mastered (<60%)",
"studentsNeedingAttentionTitle": "Students Needing Attention (avg <60%)",
"studentsNeedingAttentionDescription": "Students with low overall mastery.",
"allStudentsAboveThreshold": "All students are above the attention threshold.",
"weakPointsColumn": "Weak Points",
"viewAction": "View",
"viewAriaLabel": "View {studentName}'s diagnostic details",
"filterByKpTitle": "Filter Students by Knowledge Point",
"filterByKpDescription": "Select a knowledge point to view all students' mastery levels for targeted tutoring.",
"kpFilterLabel": "Select knowledge point",
"kpFilterPlaceholder": "Select a knowledge point",
"kpFilterAll": "All knowledge points",
"filtering": "Filtering...",
"totalQuestionsColumn": "Total Questions",
"correctQuestionsColumn": "Correct",
"statusColumn": "Status",
"needsAttention": "Needs Attention",
"mastered": "Mastered",
"noStudentsForKp": "No mastery data available for this knowledge point.",
"generateDescription": "Generate a class-level diagnostic report with aggregated analysis.",
"periodLabel": "Period (YYYY-MM)",
"generating": "Generating...",
"generateButton": "Generate Class Report"
},
"reportList": {
"caption": "Diagnostic reports list",
"typeColumn": "Type",
"studentTargetColumn": "Student / Target",
"periodColumn": "Period",
"scoreColumn": "Score",
"statusColumn": "Status",
"generatedByColumn": "Generated By",
"dateColumn": "Date",
"actionsColumn": "Actions",
"classReportPlaceholder": "(Class report)",
"gradeReportPlaceholder": "(Grade report)",
"noReportsDescription": "Generate diagnostic reports to see them here.",
"publishConfirmation": "Once published, the report will be visible to students. Continue?",
"publishAriaLabel": "Publish report {studentName}",
"deleteAriaLabel": "Delete report {studentName}",
"exportAriaLabel": "Export report {studentName}",
"exportSuccess": "Report exported",
"share": "Share",
"shareAriaLabel": "Share report {studentName}",
"shareTitle": "Share Report",
"shareDescription": "Copy the report link to share with students or parents.",
"shareLinkLabel": "Report Link",
"copyLink": "Copy Link",
"copyLinkSuccess": "Link copied",
"copyLinkFailed": "Failed to copy link",
"shareLinkAriaLabel": "Report share link",
"confidenceColumn": "Confidence",
"confidenceHigh": "High",
"confidenceMedium": "Medium",
"confidenceLow": "Low",
"confidenceInsufficient": "Insufficient Data",
"confidenceHighHint": "Sufficient data, conclusions are reliable",
"confidenceMediumHint": "Limited data, consider with other information",
"confidenceLowHint": "Little data, conclusions are for reference only",
"confidenceAriaLabel": "Data confidence: {level}"
},
"studentDiagnostic": {
"noDataDescription": "Unable to load student mastery data.",
"strengthsDescription": "Knowledge points with high mastery.",
"weaknessesDescription": "Knowledge points needing attention.",
"diagnosticReportTitle": "Diagnostic Report",
"overallLabel": "Overall",
"historyDescription": "Past diagnostic reports (newest first).",
"untitledPeriod": "Untitled period",
"strengthsListAriaLabel": "Strengths knowledge points list",
"weaknessesListAriaLabel": "Weaknesses knowledge points list",
"recommendationsListAriaLabel": "Recommendations list",
"practiceAriaLabel": "Practice knowledge point: {name}",
"noStrengths": "No strengths identified yet.",
"noWeaknesses": "No weaknesses identified.",
"reportMeta": "Period: {period} · Overall: {score}%",
"historyReportMeta": "{date} · Overall: {score}%"
}
}