├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── .tool-versions ├── README.md ├── components.json ├── eslint.config.mjs ├── next.config.ts ├── package.json ├── postcss.config.mjs ├── public ├── apple-touch-icon-precomposed.png ├── apple-touch-icon.png ├── manifest.json ├── pwa-icon-192.png ├── pwa-icon-512.png ├── pwa-icon.svg └── questions │ ├── A.json │ ├── B.json │ ├── C.json │ ├── config.json │ ├── full.json │ └── images │ ├── 0.jpg │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 16.jpg │ ├── 17.jpg │ ├── 18.jpg │ ├── 19.jpg │ ├── 2.jpg │ ├── 20.jpg │ ├── 21.jpg │ ├── 22.jpg │ ├── 23.jpg │ ├── 24.jpg │ ├── 25.jpg │ ├── 26.jpg │ ├── 27.jpg │ ├── 28.jpg │ ├── 29.jpg │ ├── 3.jpg │ ├── 30.jpg │ ├── 31.jpg │ ├── 32.jpg │ ├── 33.jpg │ ├── 34.jpg │ ├── 35.jpg │ ├── 36.jpg │ ├── 37.jpg │ ├── 38.jpg │ ├── 39.jpg │ ├── 4.jpg │ ├── 40.jpg │ ├── 41.jpg │ ├── 42.jpg │ ├── 43.jpg │ ├── 44.jpg │ ├── 45.jpg │ ├── 46.jpg │ ├── 47.jpg │ ├── 48.jpg │ ├── 49.jpg │ ├── 5.jpg │ ├── 50.jpg │ ├── 51.jpg │ ├── 52.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ └── 9.jpg ├── scripts ├── build-dataset.mjs └── generate-pwa-icons.mjs ├── src ├── app │ ├── error.tsx │ ├── exam │ │ └── page.tsx │ ├── favicon.ico │ ├── globals.css │ ├── icon.svg │ ├── layout.tsx │ ├── not-found.tsx │ ├── page.tsx │ ├── photo-processor │ │ └── page.tsx │ ├── practice │ │ └── page.tsx │ └── sitemap.ts ├── components │ ├── common │ │ ├── Bubble.tsx │ │ ├── ConditionalNavigation.tsx │ │ ├── ExplanationCard.tsx │ │ ├── MessageDialog.tsx │ │ ├── Navigation.tsx │ │ ├── PWAUpdatePrompt.tsx │ │ ├── PreviewableImage.tsx │ │ ├── QuestionBankSelector.tsx │ │ └── question-progress-header.tsx │ ├── exam │ │ ├── ExamResultDialog.tsx │ │ ├── ExamResumeDialog.tsx │ │ ├── ExamSettingsDialog.tsx │ │ ├── ExamSubmitConfirmDialog.tsx │ │ ├── answer-card-sheet.tsx │ │ ├── bottom-bar.tsx │ │ └── question-card.tsx │ ├── photo-processor │ │ ├── PhotoProcessor.tsx │ │ ├── PhotoResult.tsx │ │ └── PhotoUploader.tsx │ ├── practice │ │ ├── PracticeResumeDialog.tsx │ │ ├── PracticeSearchDialog.tsx │ │ └── PracticeSettingsDialog.tsx │ └── ui │ │ ├── alert.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── dialog.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── progress.tsx │ │ ├── radio-group.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ └── sheet.tsx ├── hooks │ ├── useCountdown.ts │ ├── useNoSiteFooter.ts │ ├── useQuestionNavigator.ts │ └── useQuestionShortcuts.ts ├── lib │ ├── error-handler.ts │ ├── exam-rules.ts │ ├── exam-storage.ts │ ├── exam.ts │ ├── load-questions.ts │ ├── logger.ts │ ├── photo-processor.ts │ ├── practice-storage.ts │ ├── question-bank-manager.ts │ ├── storage-migration.ts │ ├── utils.ts │ └── version-status-manager.ts ├── store │ ├── exam.ts │ └── practice.ts └── types │ ├── compressorjs.d.ts │ ├── ducanh-next-pwa.d.ts │ ├── next-pwa.d.ts │ ├── photo.ts │ ├── question-bank.ts │ └── question.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/.gitignore -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/.prettierignore -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/.prettierrc.json -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | nodejs 22.14.0 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/README.md -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/components.json -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/eslint.config.mjs -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/next.config.ts -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/package.json -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/postcss.config.mjs -------------------------------------------------------------------------------- /public/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/manifest.json -------------------------------------------------------------------------------- /public/pwa-icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/pwa-icon-192.png -------------------------------------------------------------------------------- /public/pwa-icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/pwa-icon-512.png -------------------------------------------------------------------------------- /public/pwa-icon.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/pwa-icon.svg -------------------------------------------------------------------------------- /public/questions/A.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/A.json -------------------------------------------------------------------------------- /public/questions/B.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/B.json -------------------------------------------------------------------------------- /public/questions/C.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/C.json -------------------------------------------------------------------------------- /public/questions/config.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/config.json -------------------------------------------------------------------------------- /public/questions/full.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/full.json -------------------------------------------------------------------------------- /public/questions/images/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/0.jpg -------------------------------------------------------------------------------- /public/questions/images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/1.jpg -------------------------------------------------------------------------------- /public/questions/images/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/10.jpg -------------------------------------------------------------------------------- /public/questions/images/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/11.jpg -------------------------------------------------------------------------------- /public/questions/images/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/12.jpg -------------------------------------------------------------------------------- /public/questions/images/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/13.jpg -------------------------------------------------------------------------------- /public/questions/images/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/14.jpg -------------------------------------------------------------------------------- /public/questions/images/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/15.jpg -------------------------------------------------------------------------------- /public/questions/images/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/16.jpg -------------------------------------------------------------------------------- /public/questions/images/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/17.jpg -------------------------------------------------------------------------------- /public/questions/images/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/18.jpg -------------------------------------------------------------------------------- /public/questions/images/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/19.jpg -------------------------------------------------------------------------------- /public/questions/images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/2.jpg -------------------------------------------------------------------------------- /public/questions/images/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/20.jpg -------------------------------------------------------------------------------- /public/questions/images/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/21.jpg -------------------------------------------------------------------------------- /public/questions/images/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/22.jpg -------------------------------------------------------------------------------- /public/questions/images/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/23.jpg -------------------------------------------------------------------------------- /public/questions/images/24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/24.jpg -------------------------------------------------------------------------------- /public/questions/images/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/25.jpg -------------------------------------------------------------------------------- /public/questions/images/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/26.jpg -------------------------------------------------------------------------------- /public/questions/images/27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/27.jpg -------------------------------------------------------------------------------- /public/questions/images/28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/28.jpg -------------------------------------------------------------------------------- /public/questions/images/29.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/29.jpg -------------------------------------------------------------------------------- /public/questions/images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/3.jpg -------------------------------------------------------------------------------- /public/questions/images/30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/30.jpg -------------------------------------------------------------------------------- /public/questions/images/31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/31.jpg -------------------------------------------------------------------------------- /public/questions/images/32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/32.jpg -------------------------------------------------------------------------------- /public/questions/images/33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/33.jpg -------------------------------------------------------------------------------- /public/questions/images/34.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/34.jpg -------------------------------------------------------------------------------- /public/questions/images/35.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/35.jpg -------------------------------------------------------------------------------- /public/questions/images/36.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/36.jpg -------------------------------------------------------------------------------- /public/questions/images/37.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/37.jpg -------------------------------------------------------------------------------- /public/questions/images/38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/38.jpg -------------------------------------------------------------------------------- /public/questions/images/39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/39.jpg -------------------------------------------------------------------------------- /public/questions/images/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/4.jpg -------------------------------------------------------------------------------- /public/questions/images/40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/40.jpg -------------------------------------------------------------------------------- /public/questions/images/41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/41.jpg -------------------------------------------------------------------------------- /public/questions/images/42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/42.jpg -------------------------------------------------------------------------------- /public/questions/images/43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/43.jpg -------------------------------------------------------------------------------- /public/questions/images/44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/44.jpg -------------------------------------------------------------------------------- /public/questions/images/45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/45.jpg -------------------------------------------------------------------------------- /public/questions/images/46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/46.jpg -------------------------------------------------------------------------------- /public/questions/images/47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/47.jpg -------------------------------------------------------------------------------- /public/questions/images/48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/48.jpg -------------------------------------------------------------------------------- /public/questions/images/49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/49.jpg -------------------------------------------------------------------------------- /public/questions/images/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/5.jpg -------------------------------------------------------------------------------- /public/questions/images/50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/50.jpg -------------------------------------------------------------------------------- /public/questions/images/51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/51.jpg -------------------------------------------------------------------------------- /public/questions/images/52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/52.jpg -------------------------------------------------------------------------------- /public/questions/images/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/6.jpg -------------------------------------------------------------------------------- /public/questions/images/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/7.jpg -------------------------------------------------------------------------------- /public/questions/images/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/8.jpg -------------------------------------------------------------------------------- /public/questions/images/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/public/questions/images/9.jpg -------------------------------------------------------------------------------- /scripts/build-dataset.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/scripts/build-dataset.mjs -------------------------------------------------------------------------------- /scripts/generate-pwa-icons.mjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/scripts/generate-pwa-icons.mjs -------------------------------------------------------------------------------- /src/app/error.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/error.tsx -------------------------------------------------------------------------------- /src/app/exam/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/exam/page.tsx -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/globals.css -------------------------------------------------------------------------------- /src/app/icon.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/icon.svg -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/layout.tsx -------------------------------------------------------------------------------- /src/app/not-found.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/not-found.tsx -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/page.tsx -------------------------------------------------------------------------------- /src/app/photo-processor/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/photo-processor/page.tsx -------------------------------------------------------------------------------- /src/app/practice/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/practice/page.tsx -------------------------------------------------------------------------------- /src/app/sitemap.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/app/sitemap.ts -------------------------------------------------------------------------------- /src/components/common/Bubble.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/Bubble.tsx -------------------------------------------------------------------------------- /src/components/common/ConditionalNavigation.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/ConditionalNavigation.tsx -------------------------------------------------------------------------------- /src/components/common/ExplanationCard.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/ExplanationCard.tsx -------------------------------------------------------------------------------- /src/components/common/MessageDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/MessageDialog.tsx -------------------------------------------------------------------------------- /src/components/common/Navigation.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/Navigation.tsx -------------------------------------------------------------------------------- /src/components/common/PWAUpdatePrompt.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/PWAUpdatePrompt.tsx -------------------------------------------------------------------------------- /src/components/common/PreviewableImage.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/PreviewableImage.tsx -------------------------------------------------------------------------------- /src/components/common/QuestionBankSelector.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/QuestionBankSelector.tsx -------------------------------------------------------------------------------- /src/components/common/question-progress-header.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/common/question-progress-header.tsx -------------------------------------------------------------------------------- /src/components/exam/ExamResultDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/ExamResultDialog.tsx -------------------------------------------------------------------------------- /src/components/exam/ExamResumeDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/ExamResumeDialog.tsx -------------------------------------------------------------------------------- /src/components/exam/ExamSettingsDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/ExamSettingsDialog.tsx -------------------------------------------------------------------------------- /src/components/exam/ExamSubmitConfirmDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/ExamSubmitConfirmDialog.tsx -------------------------------------------------------------------------------- /src/components/exam/answer-card-sheet.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/answer-card-sheet.tsx -------------------------------------------------------------------------------- /src/components/exam/bottom-bar.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/bottom-bar.tsx -------------------------------------------------------------------------------- /src/components/exam/question-card.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/exam/question-card.tsx -------------------------------------------------------------------------------- /src/components/photo-processor/PhotoProcessor.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/photo-processor/PhotoProcessor.tsx -------------------------------------------------------------------------------- /src/components/photo-processor/PhotoResult.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/photo-processor/PhotoResult.tsx -------------------------------------------------------------------------------- /src/components/photo-processor/PhotoUploader.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/photo-processor/PhotoUploader.tsx -------------------------------------------------------------------------------- /src/components/practice/PracticeResumeDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/practice/PracticeResumeDialog.tsx -------------------------------------------------------------------------------- /src/components/practice/PracticeSearchDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/practice/PracticeSearchDialog.tsx -------------------------------------------------------------------------------- /src/components/practice/PracticeSettingsDialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/practice/PracticeSettingsDialog.tsx -------------------------------------------------------------------------------- /src/components/ui/alert.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/alert.tsx -------------------------------------------------------------------------------- /src/components/ui/badge.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/badge.tsx -------------------------------------------------------------------------------- /src/components/ui/button.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/button.tsx -------------------------------------------------------------------------------- /src/components/ui/card.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/card.tsx -------------------------------------------------------------------------------- /src/components/ui/checkbox.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/checkbox.tsx -------------------------------------------------------------------------------- /src/components/ui/dialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/dialog.tsx -------------------------------------------------------------------------------- /src/components/ui/input.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/input.tsx -------------------------------------------------------------------------------- /src/components/ui/label.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/label.tsx -------------------------------------------------------------------------------- /src/components/ui/progress.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/progress.tsx -------------------------------------------------------------------------------- /src/components/ui/radio-group.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/radio-group.tsx -------------------------------------------------------------------------------- /src/components/ui/select.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/select.tsx -------------------------------------------------------------------------------- /src/components/ui/separator.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/separator.tsx -------------------------------------------------------------------------------- /src/components/ui/sheet.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/components/ui/sheet.tsx -------------------------------------------------------------------------------- /src/hooks/useCountdown.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/hooks/useCountdown.ts -------------------------------------------------------------------------------- /src/hooks/useNoSiteFooter.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/hooks/useNoSiteFooter.ts -------------------------------------------------------------------------------- /src/hooks/useQuestionNavigator.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/hooks/useQuestionNavigator.ts -------------------------------------------------------------------------------- /src/hooks/useQuestionShortcuts.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/hooks/useQuestionShortcuts.ts -------------------------------------------------------------------------------- /src/lib/error-handler.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/error-handler.ts -------------------------------------------------------------------------------- /src/lib/exam-rules.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/exam-rules.ts -------------------------------------------------------------------------------- /src/lib/exam-storage.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/exam-storage.ts -------------------------------------------------------------------------------- /src/lib/exam.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/exam.ts -------------------------------------------------------------------------------- /src/lib/load-questions.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/load-questions.ts -------------------------------------------------------------------------------- /src/lib/logger.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/logger.ts -------------------------------------------------------------------------------- /src/lib/photo-processor.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/photo-processor.ts -------------------------------------------------------------------------------- /src/lib/practice-storage.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/practice-storage.ts -------------------------------------------------------------------------------- /src/lib/question-bank-manager.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/question-bank-manager.ts -------------------------------------------------------------------------------- /src/lib/storage-migration.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/storage-migration.ts -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/utils.ts -------------------------------------------------------------------------------- /src/lib/version-status-manager.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/lib/version-status-manager.ts -------------------------------------------------------------------------------- /src/store/exam.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/store/exam.ts -------------------------------------------------------------------------------- /src/store/practice.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/store/practice.ts -------------------------------------------------------------------------------- /src/types/compressorjs.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/compressorjs.d.ts -------------------------------------------------------------------------------- /src/types/ducanh-next-pwa.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/ducanh-next-pwa.d.ts -------------------------------------------------------------------------------- /src/types/next-pwa.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/next-pwa.d.ts -------------------------------------------------------------------------------- /src/types/photo.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/photo.ts -------------------------------------------------------------------------------- /src/types/question-bank.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/question-bank.ts -------------------------------------------------------------------------------- /src/types/question.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/src/types/question.ts -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AlliotTech/ham-exam-web/HEAD/tsconfig.json --------------------------------------------------------------------------------