MCPcopy Create free account

hub / github.com/AlliotTech/ham-exam-web / functions

Functions208 in github.com/AlliotTech/ham-exam-web

↓ 41 callersFunctioncn
(...inputs: ClassValue[])
src/lib/utils.ts:4
↓ 16 callersMethoderror
(message: string, data?: unknown)
src/lib/logger.ts:43
↓ 12 callersMethodinfo
(message: string, data?: unknown)
src/lib/logger.ts:35
↓ 10 callersMethodlog
(level: LogLevel, message: string, data?: unknown)
src/lib/logger.ts:6
↓ 6 callersMethoddebug
(message: string, data?: unknown)
src/lib/logger.ts:31
↓ 6 callersFunctionnoResumeKey
(bank: string | null, versionId?: string)
src/lib/practice-storage.ts:112
↓ 6 callersFunctionsorted
(arr: T[])
src/lib/utils.ts:8
↓ 6 callersMethodwarn
(message: string, data?: unknown)
src/lib/logger.ts:39
↓ 5 callersMethodgetAllVersions
(forceRefresh = false)
src/lib/question-bank-manager.ts:84
↓ 5 callersFunctionhandleError
(error: unknown, context?: string)
src/lib/error-handler.ts:36
↓ 5 callersFunctionshuffle
(arr: T[], rng = Math.random)
src/lib/load-questions.ts:124
↓ 5 callersFunctionstorageKey
(bank: string | null, versionId?: string)
src/lib/exam-storage.ts:21
↓ 5 callersFunctionstorageKey
(bank: string | null, versionId?: string)
src/lib/practice-storage.ts:19
↓ 4 callersFunctiongetKeyByStrategy
(q: QuestionItem | undefined, pos: number)
src/app/practice/page.tsx:35
↓ 4 callersFunctiongetKeyByStrategy
(q: QuestionItem | undefined, pos: number)
src/app/exam/page.tsx:40
↓ 4 callersMethodgetVersionStatus
* 获取版本状态,支持缓存
src/lib/version-status-manager.ts:36
↓ 4 callersMethodloadConfig
(forceRefresh = false)
src/lib/question-bank-manager.ts:9
↓ 4 callersFunctionprocessBank
(bankKey)
scripts/build-dataset.mjs:144
↓ 4 callersFunctionresolveQuestionsUrl
(bank?: QuestionBank)
src/lib/load-questions.ts:11
↓ 4 callersFunctionsanitizeOptionText
(s)
scripts/build-dataset.mjs:31
↓ 3 callersFunctionapplyTheme
(theme: Theme)
src/components/common/theme-provider.tsx:25
↓ 3 callersFunctionarraysEqual
(a: T[], b: T[])
src/lib/utils.ts:12
↓ 3 callersMethodcheckBankAvailable
(versionId: QuestionVersionId, bank: QuestionBankType)
src/lib/question-bank-manager.ts:120
↓ 3 callersFunctionensureDir
(dir)
scripts/build-dataset.mjs:122
↓ 3 callersMethodgetLatestVersion
()
src/lib/question-bank-manager.ts:74
↓ 3 callersFunctionhandleSetCurrentAnswer
(newAnswer: string[])
src/app/practice/page.tsx:144
↓ 3 callersFunctionloadNoResumeWithVersion
(bank: string | null, versionId?: QuestionVersionId)
src/lib/practice-storage.ts:132
↓ 3 callersFunctionsetCurrentAnswer
(newAnswer: string[])
src/app/exam/page.tsx:190
↓ 2 callersFunctionbankAvailable
(bank: QuestionBank)
src/lib/load-questions.ts:37
↓ 2 callersFunctionclearExamSavedStateWithVersion
(bank: string | null, versionId?: QuestionVersionId)
src/lib/exam-storage.ts:86
↓ 2 callersFunctionexists
(p)
scripts/build-dataset.mjs:22
↓ 2 callersFunctionformatMs
(ms: number)
src/lib/utils.ts:18
↓ 2 callersFunctiongetVersionStatusIcon
(version: VersionWithStatus)
src/components/common/QuestionBankSelector.tsx:229
↓ 2 callersFunctionhandleSubmit
()
src/app/exam/page.tsx:175
↓ 2 callersFunctionheaderIndex
(header)
scripts/build-dataset.mjs:93
↓ 2 callersFunctionlastModeKey
()
src/lib/practice-storage.ts:87
↓ 2 callersFunctionloadLastMode
()
src/lib/practice-storage.ts:91
↓ 2 callersFunctionloadQuestionsWithVersion
( versionId: QuestionVersionId | undefined, bank: QuestionBankType, opts?: { strict?: boolean; forceRefr
src/lib/load-questions.ts:85
↓ 2 callersFunctionloadSavedState
(bank: string | null)
src/lib/practice-storage.ts:29
↓ 2 callersFunctionloadSavedStateWithVersion
(bank: string | null, versionId?: QuestionVersionId)
src/lib/practice-storage.ts:43
↓ 2 callersFunctionparseCsv
(text)
scripts/build-dataset.mjs:37
↓ 2 callersFunctionreadTextLocalOrRemote
(rel)
scripts/build-dataset.mjs:99
↓ 2 callersMethodrefreshVersionStatus
* 刷新版本状态
src/lib/version-status-manager.ts:112
↓ 2 callersMethodresolveQuestionsUrl
(versionId: QuestionVersionId, bank: QuestionBankType)
src/lib/question-bank-manager.ts:91
↓ 2 callersFunctionsaveNoResumeWithVersion
(bank: string | null, value: boolean, versionId?: QuestionVersionId)
src/lib/practice-storage.ts:153
↓ 2 callersFunctionshouldResume
(saved: SavedState)
src/lib/practice-storage.ts:167
↓ 2 callersFunctionshowWarn
(msg: string)
src/app/page.tsx:51
↓ 2 callersFunctionuseNoSiteFooter
()
src/hooks/useNoSiteFooter.ts:3
↓ 2 callersFunctionuseQuestionShortcuts
(opts: QuestionShortcutsOptions)
src/hooks/useQuestionShortcuts.ts:21
↓ 2 callersFunctionvalidateFileType
(file: File)
src/lib/photo-processor.ts:54
↓ 1 callersFunctionbankAvailableWithVersion
( versionId: QuestionVersionId | undefined, bank: QuestionBankType )
src/lib/load-questions.ts:50
↓ 1 callersFunctionbuild
()
scripts/build-dataset.mjs:126
↓ 1 callersFunctioncalculateScore
( questions: QuestionItem[], answers: Record<string, string[]>, getKeyByStrategy: GetKeyFn, )
src/lib/exam.ts:6
↓ 1 callersMethodcheckVersionStatus
* 实际检测版本状态
src/lib/version-status-manager.ts:138
↓ 1 callersMethodclearCache
* 清理缓存
src/lib/version-status-manager.ts:130
↓ 1 callersMethodclearRelatedCache
()
src/lib/question-bank-manager.ts:52
↓ 1 callersFunctionclearSavedStateWithVersion
(bank: string | null, versionId?: QuestionVersionId)
src/lib/practice-storage.ts:77
↓ 1 callersFunctiondownloadPhoto
(result: PhotoResult, originalName: string)
src/lib/photo-processor.ts:72
↓ 1 callersFunctionfirstUnansweredIndex
()
src/components/exam/answer-card-sheet.tsx:60
↓ 1 callersFunctionformatFileSize
(bytes: number)
src/lib/photo-processor.ts:63
↓ 1 callersFunctiongenerateIcons
()
scripts/generate-pwa-icons.mjs:6
↓ 1 callersMethodgetAllVersionStatuses
* 批量获取版本状态
src/lib/version-status-manager.ts:75
↓ 1 callersFunctiongetButtonVariant
()
src/components/common/QuestionBankSelector.tsx:300
↓ 1 callersFunctiongetRefreshButtonContent
()
src/components/common/QuestionBankSelector.tsx:262
↓ 1 callersFunctiongetRule
(bank: QuestionBank)
src/lib/exam-rules.ts:17
↓ 1 callersFunctiongetSystemTheme
()
src/components/common/theme-provider.tsx:17
↓ 1 callersMethodgetVersion
(versionId: QuestionVersionId, forceRefresh = false)
src/lib/question-bank-manager.ts:79
↓ 1 callersFunctiongetVersionStatusText
(version: VersionWithStatus)
src/components/common/QuestionBankSelector.tsx:245
↓ 1 callersFunctionisPassed
(correct: number, passLine: number)
src/lib/exam.ts:21
↓ 1 callersFunctionloadExamSavedStateWithVersion
( bank: string | null, versionId?: QuestionVersionId )
src/lib/exam-storage.ts:47
↓ 1 callersFunctionloadQuestions
()
src/app/practice/page.tsx:86
↓ 1 callersFunctionmigrateExamStorage
()
src/lib/storage-migration.ts:39
↓ 1 callersFunctionmigratePracticeStorage
()
src/lib/storage-migration.ts:101
↓ 1 callersFunctionmigratePreferenceStorage
()
src/lib/storage-migration.ts:168
↓ 1 callersFunctionnextFlaggedIndex
(from: number)
src/components/exam/answer-card-sheet.tsx:76
↓ 1 callersFunctionnextUnansweredIndex
(from: number)
src/components/exam/answer-card-sheet.tsx:68
↓ 1 callersFunctionnormalizeJ
(input: string)
src/lib/practice-storage.ts:178
↓ 1 callersFunctionperformLoad
()
src/components/common/QuestionBankSelector.tsx:65
↓ 1 callersFunctionperformRefresh
()
src/components/common/QuestionBankSelector.tsx:143
↓ 1 callersFunctionprocessPhoto
(type: PhotoType, file: File)
src/lib/photo-processor.ts:11
↓ 1 callersFunctionreadBinaryLocalOrRemote
(rel)
scripts/build-dataset.mjs:110
↓ 1 callersFunctionreconstructPickedQuestions
(all: QuestionItem[], saved: ExamSavedState)
src/app/exam/page.tsx:161
↓ 1 callersMethodrefreshConfig
()
src/lib/question-bank-manager.ts:65
↓ 1 callersFunctionresolveQuestionsUrlWithVersion
( versionId: QuestionVersionId | undefined, bank: QuestionBankType )
src/lib/load-questions.ts:18
↓ 1 callersFunctionsaveExamState
(state: ExamSavedState)
src/lib/exam-storage.ts:66
↓ 1 callersFunctionsaveLastMode
(mode: "sequential" | "random")
src/lib/practice-storage.ts:102
↓ 1 callersFunctionsaveState
(state: SavedState)
src/lib/practice-storage.ts:57
↓ 1 callersFunctionsetTheme
(nextTheme: Theme)
src/components/common/theme-provider.tsx:57
↓ 1 callersFunctionshouldResumeExam
(saved: ExamSavedState)
src/lib/exam-storage.ts:95
↓ 1 callersFunctionuseCountdown
(endAtMs: number | null, onElapsed?: () => void)
src/hooks/useCountdown.ts:3
↓ 1 callersFunctionuseTheme
()
src/components/common/theme-provider.tsx:85
FunctionAlert
({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants>)
src/components/ui/alert.tsx:22
FunctionAlertDescription
({ className, ...props }: React.ComponentProps<"div">)
src/components/ui/alert.tsx:47
FunctionAlertTitle
({ className, ...props }: React.ComponentProps<"div">)
src/components/ui/alert.tsx:37
FunctionAnswerCardSheet
({ open, onOpenChange, questions, answers, flags, finished, filter, onChangeFilter, onJumpTo
src/components/exam/answer-card-sheet.tsx:30
FunctionBadge
({ className, variant, asChild = false, ...props }: React.ComponentProps<"span"> & VariantProps<typeof
src/components/ui/badge.tsx:26
FunctionBottomBar
({ statsNode, answeredCount, total, left, right, center, mobileTop, mobileBottom, }: Props)
src/components/exam/bottom-bar.tsx:20
FunctionBubble
({ open, onOpenChange, children, className, autoHideMs = 2000 }: BubbleProps)
src/components/common/Bubble.tsx:15
FunctionButton
({ className, variant, size, asChild = false, ...props }: React.ComponentProps<"button"> & Variant
src/components/ui/button.tsx:35
FunctionCard
({ className, ...props }: React.ComponentProps<"div">)
src/components/ui/card.tsx:5
next →1–100 of 208, ranked by callers