sa2kit 1.6.85 → 1.6.89
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/boothVaultService-Cn4WPhjg.d.mts +83 -0
- package/dist/boothVaultService-Cn4WPhjg.d.ts +83 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +366 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +358 -2
- package/dist/index.mjs.map +1 -1
- package/dist/vocaloidBooth/index.d.mts +64 -0
- package/dist/vocaloidBooth/index.d.ts +64 -0
- package/dist/vocaloidBooth/index.js +376 -0
- package/dist/vocaloidBooth/index.js.map +1 -0
- package/dist/vocaloidBooth/index.mjs +362 -0
- package/dist/vocaloidBooth/index.mjs.map +1 -0
- package/dist/vocaloidBooth/server/index.d.mts +110 -0
- package/dist/vocaloidBooth/server/index.d.ts +110 -0
- package/dist/vocaloidBooth/server/index.js +247 -0
- package/dist/vocaloidBooth/server/index.js.map +1 -0
- package/dist/vocaloidBooth/server/index.mjs +237 -0
- package/dist/vocaloidBooth/server/index.mjs.map +1 -0
- package/dist/vocaloidBooth/web/index.d.mts +3 -0
- package/dist/vocaloidBooth/web/index.d.ts +3 -0
- package/dist/vocaloidBooth/web/index.js +376 -0
- package/dist/vocaloidBooth/web/index.js.map +1 -0
- package/dist/vocaloidBooth/web/index.mjs +362 -0
- package/dist/vocaloidBooth/web/index.mjs.map +1 -0
- package/package.json +16 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/logger/types.ts","../src/logger/console-adapter.ts","../src/logger/Logger.ts","../src/ai/ocr/hooks/useOCR.ts","../src/ai/ocr/components/OCRScanner.tsx","../src/ai/background-removal/hooks/useBackgroundRemoval.ts","../src/ai/background-removal/components/BackgroundRemover.tsx","../src/ai/sentiment-analysis/hooks/useSentimentAnalysis.ts","../src/ai/sentiment-analysis/components/SentimentAnalyzer.tsx","../src/ai/text-generation/hooks/useTextGeneration.ts","../src/ai/text-generation/components/SmartAssistant.tsx","../src/ai/llm/client/request.ts","../src/ai/llm/providers/openai-compatible.ts","../src/ai/llm/client/createAiClient.ts","../src/ai/llm/prompt/variables.ts","../src/ai/llm/prompt/template.ts","../src/ai/llm/client/createChatSession.ts","../src/ai/llm/hooks/useAiChat.ts","../src/ai/llm/skills/registry.ts","../src/utils/time.ts","../src/utils/japanese.ts","../src/utils/validators.ts","../src/utils/file.ts","../src/utils/array.ts","../src/utils/string.ts","../src/utils/debug.ts","../src/utils/error.ts","../src/utils/cn.ts","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Input.tsx","../src/components/Label.tsx","../src/components/internal/ui-core.tsx","../src/components/Tabs.tsx","../src/components/Dialog.tsx","../src/components/AlertDialog.tsx","../src/components/DropdownMenu.tsx","../src/components/Popover.tsx","../src/components/Progress.tsx","../src/components/ScrollArea.tsx","../src/components/Select.tsx","../src/components/Separator.tsx","../src/components/Sheet.tsx","../src/components/Textarea.tsx","../src/components/Tooltip.tsx","../src/components/Avatar.tsx","../src/components/Grid.tsx","../src/components/SearchBox.tsx","../src/components/Timeline.tsx","../src/components/CollisionBalls.tsx","../src/components/GenericOrderManager.tsx","../src/components/BackButton.tsx","../src/components/FilterButtonGroup.tsx","../src/components/SearchResultHint.tsx","../src/components/PopWindow.tsx","../src/components/ImageMappingPanel.tsx","../src/storage/hooks/useStorage.ts","../src/storage/adapters/web-adapter.ts","../src/storage/hooks/useLocalStorage.ts","../src/components/LocalImageMappingPanel.tsx","../src/profile/ProfileModal.tsx","../src/profile/internal/BadgeList.tsx","../src/profile/internal/Stat.tsx","../src/profile/internal/StatList.tsx","../src/profile/ProfileButton.tsx","../src/profile/AutoOpenModal.tsx","../src/profile/EnhancedAvatar.tsx","../src/portfolio/About.tsx","../src/portfolio/Contact.tsx","../src/portfolio/Home.tsx","../src/portfolio/ExperimentCard.tsx","../src/portfolio/ProjectCarousel.tsx","../src/navigation/NavigationItem.tsx","../src/navigation/Navigation.tsx","../src/navigation/NavigationToggle.tsx","../src/navigation/FloatingMenu.tsx","../src/navigation/FloatingMenuExample.tsx","../src/testField/utils/index.ts","../src/testField/components/CategoryFilter.tsx","../src/testField/components/CompletionFilter.tsx","../src/testField/components/PageHeader.tsx","../src/testField/components/ExperimentGrid.tsx","../src/testField/components/EmptyState.tsx","../src/testField/components/SortControl.tsx","../src/testField/components/SortModeToggle.tsx","../src/testField/components/SortableExperimentItem.tsx","../src/testField/components/DraggableExperimentGrid.tsx","../src/auth/schema/enums.ts","../src/auth/schema/user.ts","../src/auth/schema/session.ts","../src/auth/schema/account.ts","../src/auth/schema/verification.ts","../src/auth/schema/relations.ts","../src/auth/hooks/useAuth.ts","../src/testField/components/PermissionGuard.tsx","../src/testField/components/UserInfoBar.tsx","../src/mikuFireworks3D/components/DanmakuPanel.tsx","../src/mikuFireworks3D/components/FireworksCanvas.tsx","../src/mikuFireworks3D/constants.ts","../src/mikuFireworks3D/components/FireworksControlPanel.tsx","../src/mikuFireworks3D/hooks/useDanmakuController.ts","../src/mikuFireworks3D/utils/textureFactory.ts","../src/mikuFireworks3D/utils/colorPalettes.ts","../src/mikuFireworks3D/utils/avatarSprite.ts","../src/mikuFireworks3D/engine/patterns/avatar.ts","../src/mikuFireworks3D/engine/patterns/miku.ts","../src/mikuFireworks3D/engine/patterns/normal.ts","../src/mikuFireworks3D/engine/emitters.ts","../src/mikuFireworks3D/engine/particlePool.ts","../src/mikuFireworks3D/engine/postfx.ts","../src/mikuFireworks3D/engine/FireworksEngine.ts","../src/mikuFireworks3D/hooks/useFireworksEngine.ts","../src/mikuFireworks3D/client/WebSocketTransport.ts","../src/mikuFireworks3D/hooks/useFireworksRealtime.ts","../src/mikuFireworks3D/components/MikuFireworks3D.tsx","../src/screenReceiver/useScreenReceiver.ts","../src/screenReceiver/signalUrl.ts","../src/screenReceiver/ScreenReceiverPanel.tsx","../src/festivalCard/core/defaults.ts","../src/festivalCard/core/normalize.ts","../src/festivalCard/hooks/useFestivalCardConfig.ts","../src/festivalCard/components/FestivalCardPageRenderer.tsx","../src/festivalCard/components/FestivalCardBook3D.tsx","../src/festivalCard/components/FestivalCardConfigEditor.tsx","../src/festivalCard/components/FestivalCardStudio.tsx","../src/festivalCard/components/FestivalCardConfigPage.tsx","../src/festivalCard/components/FestivalCardManagedPage.tsx","../src/festivalCard/server/db.ts","../src/festivalCard/services/festivalCardService.ts","../src/storage/adapters/react-native-adapter.ts","../src/storage/hooks/useAsyncStorage.ts","../src/storage/adapters/miniapp-adapter.ts","../src/storage/hooks/useTaroStorage.ts","../src/storage/adapters/electron-adapter.ts","../src/storage/hooks/useElectronStorage.ts"],"names":["LogLevel","timestamp","useState","useRef","React","useCallback","useEffect","clsx","Loader2","X","text","Send","buildBaseMessages","React6","React7","cva","React8","React9","React10","React11","React12","React13","React14","React15","React16","React17","React18","React19","Check","React20","React21","React22","React23","React24","draggedBall","width","height","mousePos","ChevronUp","ChevronDown","createPortal","pgTable","sql","uniqueIndex","foreignKey","user","User","THREE","useMemo","parseListResponse","parseConfigResponse"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4, // 禁用所有日志\n}\n\n/**\n * 日志条目\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: any;\n context?: string;\n error?: Error;\n}\n\n/**\n * 日志适配器接口\n * 不同平台实现不同的日志输出方式\n */\nexport interface LoggerAdapter {\n /**\n * 输出日志\n */\n log(entry: LogEntry): void;\n\n /**\n * 批量输出日志(可选)\n */\n logBatch?(entries: LogEntry[]): void;\n}\n\n/**\n * 日志配置\n */\nexport interface LoggerConfig {\n /**\n * 最小日志级别\n * 只有大于等于此级别的日志才会输出\n */\n minLevel: LogLevel;\n\n /**\n * 是否启用时间戳\n */\n enableTimestamp?: boolean;\n\n /**\n * 是否启用上下文(模块名)\n */\n enableContext?: boolean;\n\n /**\n * 环境(development/production)\n */\n environment?: 'development' | 'production';\n\n /**\n * 自定义适配器\n */\n adapter?: LoggerAdapter;\n}\n\n","import type { LoggerAdapter, LogEntry, LogLevel } from './types';\n\n/**\n * 控制台日志适配器\n * 使用 console.info/warn/error 输出日志\n */\nexport class ConsoleLoggerAdapter implements LoggerAdapter {\n private readonly colors = {\n DEBUG: '\\x1b[36m', // Cyan\n INFO: '\\x1b[32m', // Green\n WARN: '\\x1b[33m', // Yellow\n ERROR: '\\x1b[31m', // Red\n RESET: '\\x1b[0m',\n };\n\n log(entry: LogEntry): void {\n const { level, message, timestamp, data, context, error } = entry;\n\n // 构建日志消息\n let logMessage = '';\n\n // 添加时间戳\n if (timestamp) {\n logMessage += '[' + (this.formatTimestamp(timestamp)) + '] ';\n }\n\n // 添加日志级别\n const levelName = this.getLevelName(level);\n logMessage += (levelName) + ': ';\n\n // 添加上下文\n if (context) {\n logMessage += '[' + (context) + '] ';\n }\n\n // 添加消息\n logMessage += message;\n\n // 根据日志级别选择输出方式\n switch (level) {\n case 0: // DEBUG\n console.debug(this.colorize(logMessage, 'DEBUG'), data || '');\n break;\n case 1: // INFO\n console.info(this.colorize(logMessage, 'INFO'), data || '');\n break;\n case 2: // WARN\n console.warn(this.colorize(logMessage, 'WARN'), data || '');\n break;\n case 3: // ERROR\n console.error(this.colorize(logMessage, 'ERROR'), data || '');\n if (error) {\n console.error(error);\n }\n break;\n }\n }\n\n private formatTimestamp(date: Date): string {\n return date.toISOString();\n }\n\n private getLevelName(level: LogLevel): string {\n const names = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'];\n return names[level] || 'UNKNOWN';\n }\n\n private colorize(message: string, level: keyof typeof this.colors): string {\n // 只在支持颜色的环境中使用颜色\n if (typeof process !== 'undefined' && process.stdout?.isTTY) {\n return (this.colors[level]) + (message) + (this.colors.RESET);\n }\n return message;\n }\n}\n\n","import type { LogLevel, LogEntry, LoggerConfig, LoggerAdapter } from './types';\nimport { ConsoleLoggerAdapter } from './console-adapter';\n\n/**\n * 统一日志管理类\n */\nexport class Logger {\n private config: Required<LoggerConfig>;\n private adapter: LoggerAdapter;\n private context?: string;\n\n constructor(config?: Partial<LoggerConfig>, context?: string) {\n const isProduction =\n typeof process !== 'undefined' ? process.env.NODE_ENV === 'production' : false;\n\n this.config = {\n minLevel: config?.minLevel ?? (isProduction ? 1 : 0), // INFO in prod, DEBUG in dev\n enableTimestamp: config?.enableTimestamp ?? true,\n enableContext: config?.enableContext ?? true,\n environment: config?.environment ?? (isProduction ? 'production' : 'development'),\n adapter: config?.adapter ?? new ConsoleLoggerAdapter(),\n };\n this.adapter = this.config.adapter;\n this.context = context;\n }\n\n /**\n * 创建带上下文的子 Logger\n */\n createChild(context: string): Logger {\n return new Logger(this.config, context);\n }\n\n /**\n * 调试日志\n */\n debug(message: string, data?: any): void {\n this.log(0, message, data); // LogLevel.DEBUG\n }\n\n /**\n * 信息日志\n */\n info(message: string, data?: any): void {\n this.log(1, message, data); // LogLevel.INFO\n }\n\n /**\n * 警告日志\n */\n warn(message: string, data?: any): void {\n this.log(2, message, data); // LogLevel.WARN\n }\n\n /**\n * 错误日志\n */\n error(message: string, error?: Error | any): void {\n this.log(\n 3, // LogLevel.ERROR\n message,\n error instanceof Error ? undefined : error,\n error instanceof Error ? error : undefined\n );\n }\n\n /**\n * 核心日志方法\n */\n private log(level: LogLevel, message: string, data?: any, error?: Error): void {\n // 检查日志级别\n if (level < this.config.minLevel) {\n return;\n }\n\n // 检查动态调试配置(仅在浏览器环境)\n if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n const loggerDebug = localStorage.getItem('logger-debug');\n // 如果明确设置为 false,则不输出(但 Error 级别始终输出)\n if (loggerDebug === 'false' && level < 3) {\n // level < ERROR\n return;\n }\n }\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: this.config.enableTimestamp ? new Date() : (undefined as any),\n data,\n context: this.config.enableContext ? this.context : undefined,\n error,\n };\n\n this.adapter.log(entry);\n }\n\n /**\n * 设置日志级别\n */\n setLevel(level: LogLevel): void {\n this.config.minLevel = level;\n }\n\n /**\n * 获取当前日志级别\n */\n getLevel(): LogLevel {\n return this.config.minLevel;\n }\n}\n\n/**\n * 默认全局 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带上下文的 Logger\n */\nexport function createLogger(context: string, config?: Partial<LoggerConfig>): Logger {\n return new Logger(config, context);\n}\n\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { createWorker, Worker } from 'tesseract.js';\nimport { OCRResult, OCROptions, OCRState } from '../types';\n\nexport const useOCR = (options: OCROptions = {}) => {\n const [state, setState] = useState<OCRState>({\n isProcessing: false,\n progress: 0,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const workerRef = useRef<Worker | null>(null);\n\n const cleanup = useCallback(async () => {\n if (workerRef.current) {\n await workerRef.current.terminate();\n workerRef.current = null;\n }\n }, []);\n\n const recognize = useCallback(\n async (image: string | File | Blob | HTMLImageElement | HTMLCanvasElement) => {\n setState((prev) => ({\n ...prev,\n isProcessing: true,\n error: null,\n progress: 0,\n status: 'initializing',\n }));\n\n try {\n const worker = await createWorker(options.language || 'eng', 1, {\n logger: (m) => {\n if (m.status === 'recognizing text') {\n setState((prev) => ({\n ...prev,\n status: 'recognizing',\n progress: m.progress,\n }));\n }\n options.logger?.(m);\n },\n });\n\n workerRef.current = worker;\n\n const { data } = await worker.recognize(image);\n\n // In some versions of tesseract.js, words and lines are not directly on data\n // We extract them from blocks if needed\n const words = (data as any).words || data.blocks?.flatMap(b => b.paragraphs.flatMap(p => p.lines.flatMap(l => l.words))) || [];\n const lines = (data as any).lines || data.blocks?.flatMap(b => b.paragraphs.flatMap(p => p.lines)) || [];\n\n const result: OCRResult = {\n text: data.text,\n confidence: data.confidence,\n words: words.map((w: any) => ({\n text: w.text,\n confidence: w.confidence,\n bbox: w.bbox,\n })),\n lines: lines.map((l: any) => l.text),\n };\n\n setState((prev) => ({\n ...prev,\n isProcessing: false,\n progress: 1,\n status: 'completed',\n result,\n }));\n\n await worker.terminate();\n workerRef.current = null;\n\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setState((prev) => ({\n ...prev,\n isProcessing: false,\n status: 'error',\n error,\n }));\n throw error;\n }\n },\n [options]\n );\n\n useEffect(() => {\n return () => {\n cleanup();\n };\n }, [cleanup]);\n\n return {\n ...state,\n recognize,\n cleanup,\n };\n};\n\n\n\n\n\n\n\n\n\n","import React, { useState, useRef } from 'react';\nimport { useOCR } from '../hooks/useOCR';\nimport { Loader2, Upload, FileText, Image as ImageIcon, X } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface OCRScannerProps {\n onResult?: (text: string) => void;\n className?: string;\n language?: string;\n}\n\nexport const OCRScanner: React.FC<OCRScannerProps> = ({\n onResult,\n className = '',\n language = 'eng',\n}) => {\n const [imagePreview, setImagePreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n \n const { recognize, isProcessing, progress, status, result, error } = useOCR({\n language,\n });\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n // Create preview\n const reader = new FileReader();\n reader.onload = (event) => {\n setImagePreview(event.target?.result as string);\n };\n reader.readAsDataURL(file);\n\n try {\n const ocrResult = await recognize(file);\n onResult?.(ocrResult.text);\n } catch (err) {\n console.error('OCR Error:', err);\n }\n };\n\n const reset = () => {\n setImagePreview(null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n \n const file = e.dataTransfer.files?.[0];\n if (file && file.type.startsWith('image/')) {\n const mockEvent = { target: { files: [file] } } as unknown as React.ChangeEvent<HTMLInputElement>;\n handleFileChange(mockEvent);\n }\n };\n\n return (\n <div \n className={clsx('p-6 border-2 border-dashed rounded-xl transition-all', isProcessing ? 'border-blue-400 bg-blue-50/10' : 'border-gray-200 hover:border-blue-400', className)}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {!imagePreview ? (\n <div \n className=\"flex flex-col items-center justify-center cursor-pointer space-y-4\"\n onClick={() => fileInputRef.current?.click()}\n >\n <div className=\"p-4 bg-blue-50 rounded-full text-blue-500\">\n <Upload size={32} />\n </div>\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-700\">点击或拖拽图片进行 OCR 识别</p>\n <p className=\"text-sm text-gray-500\">支持 JPG, PNG, WebP</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"relative group rounded-lg overflow-hidden border border-gray-200\">\n <img \n src={imagePreview} \n alt=\"Preview\" \n className={clsx('max-h-64 mx-auto object-contain transition-opacity', isProcessing ? 'opacity-50' : 'opacity-100')}\n />\n {!isProcessing && (\n <button \n onClick={reset}\n className=\"absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm\"\n >\n <X size={18} />\n </button>\n )}\n \n {isProcessing && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/5\">\n <Loader2 className=\"animate-spin text-blue-500 mb-2\" size={32} />\n <div className=\"w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden\">\n <div \n className=\"bg-blue-500 h-full transition-all duration-300\"\n style={{ width: (progress * 100) + '%' }}\n />\n </div>\n <p className=\"text-xs font-medium text-blue-600 mt-2\">\n {status === 'initializing' ? '正在加载引擎...' : '识别中 ' + (Math.round(progress * 100)) + '%'}\n </p>\n </div>\n )}\n </div>\n\n {result && !isProcessing && (\n <div className=\"bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2\">\n <div className=\"flex items-center gap-2 mb-2 text-gray-600 font-medium\">\n <FileText size={18} />\n <span>识别结果 (置信度: {Math.round(result.confidence)}%)</span>\n </div>\n <pre className=\"text-sm text-gray-800 whitespace-pre-wrap font-sans\">\n {result.text}\n </pre>\n </div>\n )}\n\n {error && (\n <div className=\"p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 识别失败: {error.message}\n </div>\n )}\n </div>\n )}\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={isProcessing}\n />\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useEffect } from 'react';\nimport { BackgroundRemovalOptions, BackgroundRemovalState } from '../types';\n\nexport const useBackgroundRemoval = (options: BackgroundRemovalOptions = {}) => {\n const [state, setState] = useState<BackgroundRemovalState>({\n isProcessing: false,\n progress: 0,\n status: 'idle',\n error: null,\n resultBlob: null,\n resultUrl: null,\n });\n\n const remove = useCallback(async (image: string | File | Blob | HTMLImageElement | URL) => {\n setState(prev => ({\n ...prev,\n isProcessing: true,\n error: null,\n progress: 0,\n status: 'initializing',\n }));\n\n try {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n let backgroundRemoval;\n\n try {\n // 环境盾牌:防止库初始化时 Object.keys(null) 崩溃\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' } },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n \n backgroundRemoval = await import('@imgly/background-removal');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', {\n value: originalProcess,\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n }\n\n const { removeBackground } = backgroundRemoval;\n\n const config: any = {\n progress: (status: string, progress: number) => {\n setState(prev => ({\n ...prev,\n status,\n progress,\n }));\n options.progress?.(status, progress);\n },\n model: options.model || 'small',\n publicPath: options.publicPath,\n fetchArgs: options.fetchArgs,\n };\n\n const blob = await removeBackground(image, config);\n const url = URL.createObjectURL(blob);\n\n setState(prev => ({\n ...prev,\n isProcessing: false,\n progress: 1,\n status: 'completed',\n resultBlob: blob,\n resultUrl: url,\n }));\n\n return { blob, url };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('AI Background Removal Error:', msg);\n setState(prev => ({\n ...prev,\n isProcessing: false,\n status: 'error',\n error: new Error(msg),\n }));\n throw err;\n }\n }, [options]);\n\n const cleanup = useCallback(() => {\n if (state.resultUrl) {\n URL.revokeObjectURL(state.resultUrl);\n }\n }, [state.resultUrl]);\n\n useEffect(() => {\n return () => cleanup();\n }, [cleanup]);\n\n return {\n ...state,\n remove,\n cleanup,\n };\n};\n","import React, { useState, useRef } from 'react';\nimport { useBackgroundRemoval } from '../hooks/useBackgroundRemoval';\nimport { Loader2, Upload, Download, Image as ImageIcon, X, Eraser } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface BackgroundRemoverProps {\n onResult?: (blob: Blob, url: string) => void;\n className?: string;\n}\n\nexport const BackgroundRemover: React.FC<BackgroundRemoverProps> = ({\n onResult,\n className = '',\n}) => {\n const [imagePreview, setImagePreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n \n const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (event) => {\n setImagePreview(event.target?.result as string);\n };\n reader.readAsDataURL(file);\n\n try {\n const { blob, url } = await remove(file);\n onResult?.(blob, url);\n } catch (err) {\n console.error('Background Removal Error:', err);\n }\n };\n\n const reset = () => {\n setImagePreview(null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const downloadResult = () => {\n if (!resultUrl) return;\n const a = document.createElement('a');\n a.href = resultUrl;\n a.download = 'removed_background.png';\n a.click();\n };\n\n return (\n <div className={clsx('p-6 border-2 border-dashed rounded-xl transition-all', isProcessing ? 'border-purple-400 bg-purple-50/10' : 'border-gray-200 hover:border-purple-400', className)}>\n {!imagePreview ? (\n <div \n className=\"flex flex-col items-center justify-center cursor-pointer space-y-4\"\n onClick={() => fileInputRef.current?.click()}\n >\n <div className=\"p-4 bg-purple-50 rounded-full text-purple-500\">\n <Eraser size={32} />\n </div>\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-700\">上传图片移除背景</p>\n <p className=\"text-sm text-gray-500\">建议使用主体明确的图片</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium text-gray-500 uppercase tracking-wider\">原图</p>\n <div className=\"relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50\">\n <img src={imagePreview} alt=\"Original\" className=\"max-h-64 mx-auto object-contain\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium text-gray-500 uppercase tracking-wider\">处理结果</p>\n <div className=\"relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]\">\n {resultUrl ? (\n <img src={resultUrl} alt=\"Result\" className=\"max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500\" />\n ) : (\n <div className=\"h-64 flex flex-col items-center justify-center text-gray-400\">\n {isProcessing ? (\n <>\n <Loader2 className=\"animate-spin text-purple-500 mb-2\" size={32} />\n <div className=\"w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden\">\n <div \n className=\"bg-purple-500 h-full transition-all duration-300\"\n style={{ width: (progress * 100) + '%' }}\n />\n </div>\n <p className=\"text-[10px] mt-2 font-mono uppercase\">{status.replace(/-/g, ' ')}</p>\n </>\n ) : (\n <span className=\"text-sm italic\">等待处理...</span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-center pt-2\">\n {!isProcessing && (\n <button \n onClick={reset}\n className=\"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors\"\n >\n <X size={16} />\n 重新开始\n </button>\n )}\n \n {resultUrl && !isProcessing && (\n <button \n onClick={downloadResult}\n className=\"flex items-center gap-2 px-6 py-2 bg-purple-600 hover:bg-purple-700 text-white rounded-lg shadow-sm transition-all\"\n >\n <Download size={16} />\n 下载 PNG\n </button>\n )}\n </div>\n\n {error && (\n <div className=\"p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 处理失败: {error.message}\n </div>\n )}\n </div>\n )}\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={isProcessing}\n />\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useRef } from 'react';\nimport { SentimentResult, SentimentOptions, SentimentState } from '../types';\n\nexport const useSentimentAnalysis = (options: SentimentOptions = {}) => {\n const [state, setState] = useState<SentimentState>({\n isProcessing: false,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const pipelineRef = useRef<any | null>(null);\n\n const analyze = useCallback(async (text: string) => {\n setState(prev => ({\n ...prev,\n isProcessing: true,\n error: null,\n status: 'loading model',\n }));\n\n try {\n if (!pipelineRef.current) {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n\n let transformers;\n try {\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' }, nextTick: (cb: any) => setTimeout(cb, 0) },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n transformers = await import('@xenova/transformers');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', { value: originalProcess, configurable: true, writable: true });\n } catch (e) {}\n }\n }\n\n const { pipeline, env } = transformers;\n env.allowLocalModels = false;\n if (env.backends?.onnx) {\n env.backends.onnx.wasm.proxy = true;\n }\n\n const defaultModel = 'Xenova/distilbert-base-multilingual-cased-sentiments-student';\n \n pipelineRef.current = await pipeline('sentiment-analysis', options.model || defaultModel);\n }\n\n setState(prev => ({ ...prev, status: 'analyzing' }));\n \n const output = await pipelineRef.current(text);\n const resultData = output[0];\n\n const label = resultData.label.toLowerCase();\n let sentiment: 'positive' | 'negative' | 'neutral' = 'neutral';\n \n // 增强逻辑:针对中文常见消极词汇进行本地加权\n const negativeKeywords = ['累', '惨', '绝望', '难受', '伤心', '差', '坏', '糟', '不行'];\n const hasNegativeKeyword = negativeKeywords.some(k => text.includes(k));\n\n if (label.includes('positive') && !hasNegativeKeyword) {\n sentiment = 'positive';\n } else if (label.includes('negative') || label.includes('0') || hasNegativeKeyword) {\n sentiment = 'negative';\n }\n\n const result: SentimentResult = {\n label: resultData.label,\n score: resultData.score,\n sentiment,\n };\n\n setState(prev => ({\n ...prev,\n isProcessing: false,\n status: 'completed',\n result,\n }));\n\n return result;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('AI Sentiment Error:', msg);\n setState(prev => ({ ...prev, isProcessing: false, status: 'error', error: new Error(msg) }));\n throw err;\n }\n }, [options.model]);\n\n return { ...state, analyze };\n};\n\n\n\n\n\n\n\n\n\n","import React, { useState } from 'react';\nimport { useSentimentAnalysis } from '../hooks/useSentimentAnalysis';\nimport { MessageSquare, Send, Loader2, Smile, Frown, Meh } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface SentimentAnalyzerProps {\n onResult?: (result: any) => void;\n className?: string;\n placeholder?: string;\n}\n\nexport const SentimentAnalyzer: React.FC<SentimentAnalyzerProps> = ({\n onResult,\n className = '',\n placeholder = '输入一段中文或英文,分析其情感倾向...',\n}) => {\n const [text, setText] = useState('');\n const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();\n\n const handleAnalyze = async () => {\n if (!text.trim() || isProcessing) return;\n try {\n const res = await analyze(text);\n onResult?.(res);\n } catch (err) {\n console.error('Sentiment Analysis Error:', err);\n }\n };\n\n const getSentimentIcon = () => {\n if (!result) return null;\n switch (result.sentiment) {\n case 'positive': return <Smile className=\"text-green-500\" size={24} />;\n case 'negative': return <Frown className=\"text-red-500\" size={24} />;\n default: return <Meh className=\"text-yellow-500\" size={24} />;\n }\n };\n\n const getSentimentColor = () => {\n if (!result) return '';\n switch (result.sentiment) {\n case 'positive': return 'bg-green-50 border-green-200 text-green-700';\n case 'negative': return 'bg-red-50 border-red-200 text-red-700';\n default: return 'bg-yellow-50 border-yellow-200 text-yellow-700';\n }\n };\n\n return (\n <div className={clsx('p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm', className)}>\n <div className=\"flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium\">\n <MessageSquare size={20} />\n <span>文本情感分析</span>\n </div>\n\n <div className=\"relative\">\n <textarea\n value={text}\n onChange={(e) => setText(e.target.value)}\n placeholder={placeholder}\n className=\"w-full h-32 p-4 bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all outline-none resize-none text-gray-800 dark:text-gray-200\"\n disabled={isProcessing}\n />\n <button\n onClick={handleAnalyze}\n disabled={!text.trim() || isProcessing}\n className=\"absolute bottom-3 right-3 p-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-md transition-colors shadow-sm\"\n >\n {isProcessing ? <Loader2 className=\"animate-spin\" size={18} /> : <Send size={18} />}\n </button>\n </div>\n\n {isProcessing && (\n <div className=\"mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse\">\n <Loader2 size={14} className=\"animate-spin\" />\n <span>正在分析 (首次运行将加载模型资源)...</span>\n </div>\n )}\n\n {result && !isProcessing && (\n <div className={clsx('mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2', getSentimentColor())}>\n <div className=\"p-2 bg-white rounded-full shadow-sm\">\n {getSentimentIcon()}\n </div>\n <div>\n <p className=\"font-bold text-lg capitalize\">{result.sentiment}</p>\n <p className=\"text-sm opacity-80\">\n 置信度: {(result.score * 100).toFixed(1)}% ({result.label})\n </p>\n </div>\n </div>\n )}\n\n {error && (\n <div className=\"mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 分析失败: {error.message}\n </div>\n )}\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useRef } from 'react';\nimport { TextGenerationOptions, TextGenerationState } from '../types';\n\nexport const useTextGeneration = (options: TextGenerationOptions = {}) => {\n const [state, setState] = useState<TextGenerationState>({\n isProcessing: false,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const pipelineRef = useRef<any | null>(null);\n\n const generate = useCallback(async (prompt: string) => {\n console.log('[AI] Generating for prompt:', prompt);\n \n setState((prev: TextGenerationState) => ({\n ...prev,\n isProcessing: true,\n error: null,\n status: 'initializing',\n }));\n\n try {\n if (!pipelineRef.current) {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n\n let transformers;\n try {\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' }, nextTick: (cb: any) => setTimeout(cb, 0), cwd: () => '/', browser: true },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n transformers = await import('@xenova/transformers');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', { value: originalProcess, configurable: true, writable: true });\n } catch (e) {}\n }\n }\n\n const { pipeline, env } = transformers;\n env.allowLocalModels = false;\n if (env.backends?.onnx) {\n env.backends.onnx.wasm.proxy = true;\n }\n\n const modelName = options.model || 'Xenova/LaMini-Flan-T5-77M';\n pipelineRef.current = await pipeline('text2text-generation', modelName, {\n progress_callback: (info: any) => {\n if (info.status === 'progress') {\n setState((prev: TextGenerationState) => ({ ...prev, status: 'loading model: ' + (Math.round(info.progress)) + '%' }));\n }\n }\n });\n }\n\n setState((prev: TextGenerationState) => ({ ...prev, status: 'thinking' }));\n \n // 优化生成参数,使其对小模型更友好\n const output = await pipelineRef.current(prompt, {\n max_new_tokens: options.max_new_tokens || 64,\n temperature: options.temperature || 0.5, // 稍微提高温度\n do_sample: true, // 开启采样,避免空输出\n top_k: 50,\n repetition_penalty: 1.1,\n });\n\n const result = output[0].generated_text || '';\n console.log('[AI] Raw result:', result);\n\n setState((prev: TextGenerationState) => ({\n ...prev,\n isProcessing: false,\n status: 'completed',\n result,\n }));\n\n return result;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('[AI] Error:', err);\n setState((prev: TextGenerationState) => ({ ...prev, isProcessing: false, status: 'error', error: new Error(msg) }));\n throw err;\n }\n }, [options.model, options.max_new_tokens, options.temperature]);\n\n return { ...state, generate };\n};\n\n\n","import React, { useState, useRef, useEffect } from 'react';\nimport { useTextGeneration } from '../hooks/useTextGeneration';\nimport { Bot, User, Send, Loader2 } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface SmartAssistantProps {\n className?: string;\n}\n\nexport const SmartAssistant: React.FC<SmartAssistantProps> = ({ className = '' }) => {\n const [input, setInput] = useState('');\n const [chatHistory, setChatHistory] = useState<Array<{ role: 'user' | 'assistant', content: string }>>([]);\n const scrollRef = useRef<HTMLDivElement>(null);\n \n const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [chatHistory, isGenerating]);\n\n const handleSend = async () => {\n if (!input.trim() || isGenerating) return;\n\n const userMessage = input.trim();\n setInput('');\n setChatHistory(prev => [...prev, { role: 'user', content: userMessage }]);\n\n // --- 1. 本地硬规则匹配 (意图识别) ---\n // 对于 77M 模型,某些固定回复由逻辑生成效果更好\n let finalContent = '';\n const lowerMessage = userMessage.toLowerCase();\n \n if (lowerMessage.includes('你好') || lowerMessage.includes('hello') || lowerMessage.includes('hi')) {\n finalContent = '你好呀!我是 sa2kit 的本地 AI 助手,很高兴能和你聊天。😊';\n } else if (lowerMessage.includes('谁') || lowerMessage.includes('who are you')) {\n finalContent = '我是一个完全运行在你浏览器本地的小型 AI 模型,我不需要服务器,非常保护你的隐私。';\n } else if (lowerMessage.includes('天气')) {\n finalContent = '虽然我看不见外面的阳光,但听你的语气,今天一定是个适合出门的好天气!☀️';\n } else if (lowerMessage.includes('累') || lowerMessage.includes('难过') || lowerMessage.includes('绝望')) {\n finalContent = '听起来你现在心情不太好... 抱抱你,我会一直在这里陪你聊天的。❤️';\n }\n\n // 如果命中了硬规则,直接显示并返回,不再调用模型\n if (finalContent) {\n // 模拟一点点思考时间,体验更自然\n setTimeout(() => {\n setChatHistory(prev => [...prev, { role: 'assistant', content: finalContent }]);\n }, 500);\n return;\n }\n\n // --- 2. 调用模型生成 (针对非固定意图) ---\n const prompt = `对话。\n人说:\"${userMessage}\"\nAI回应:\"`;\n\n try {\n const response = await generate(prompt);\n \n // 深度清理模型输出\n let modelOutput = response\n .replace(/^AI回应:|^AI:|^Assistant:|^回答:|^答:|^Answer:/i, '')\n .replace(/[. ]*Positive[. ]*|[. ]*Negative[. ]*|[. ]*Neutral[. ]*/gi, '') // 拦截情绪单词\n .replace(/^[\"'“]|[\"'”]$/g, '') // 去掉引号\n .trim();\n\n // --- 3. 结果质量检查 (Recovery) ---\n // 如果模型返回包含大量英文、或者是废话、或者太短\n const isEnglishTrash = /[a-zA-Z]{5,}/.test(modelOutput) && !/[一-龥]/.test(modelOutput);\n const isTooShort = modelOutput.length < 1;\n\n if (isEnglishTrash || isTooShort) {\n console.warn('[AI] Model failure, triggering smart recovery. Raw was:', response);\n modelOutput = '嗯嗯,我正在听。关于“' + userMessage.slice(0, 6) + '...”,你还有什么想分享的吗?';\n }\n\n setChatHistory(prev => [...prev, { role: 'assistant', content: modelOutput }]);\n } catch (err) {\n setChatHistory(prev => [...prev, { role: 'assistant', content: '(本地模型思考过度,暂时休息中...)' }]);\n }\n };\n\n return (\n <div className={clsx('flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden', className)}>\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50\">\n {chatHistory.length === 0 && (\n <div className=\"h-full flex flex-col items-center justify-center text-gray-400 space-y-2\">\n <Bot size={48} className=\"opacity-20\" />\n <p className=\"text-sm italic text-center px-8 text-gray-400 font-sans\">\n 你好!我是 100% 本地运行的 AI。<br/>\n 你可以和我聊聊天,我会尝试理解你的意思。\n </p>\n </div>\n )}\n {chatHistory.map((msg, i) => (\n <div key={i} className={clsx('flex', msg.role === 'user' ? 'justify-end' : 'justify-start', 'animate-in fade-in slide-in-from-bottom-2')}>\n <div className={clsx('flex gap-3 max-w-[85%]', msg.role === 'user' ? 'flex-row-reverse' : '')}>\n <div className={clsx('p-2 rounded-lg h-fit', msg.role === 'user' ? 'bg-blue-100 text-blue-600' : 'bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400')}>\n {msg.role === 'user' ? <User size={18} /> : <Bot size={18} />}\n </div>\n <div className={clsx('p-3 rounded-2xl shadow-sm text-sm', msg.role === 'user' \n ? 'bg-blue-600 text-white rounded-tr-none' \n : 'bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed')}>\n {msg.content}\n </div>\n </div>\n </div>\n ))}\n {isGenerating && (\n <div className=\"flex justify-start\">\n <div className=\"flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600\">\n <Loader2 className=\"animate-spin text-blue-500\" size={16} />\n <div className=\"flex flex-col\">\n <span className=\"text-xs text-gray-500 font-medium\">思考中...</span>\n <span className=\"text-[10px] text-blue-400 font-mono tracking-tighter\">{genStatus}</span>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700\">\n <div className=\"relative flex items-center gap-2\">\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleSend()}\n placeholder=\"输入文字...\"\n className=\"flex-1 bg-gray-50 dark:bg-gray-900 border-none rounded-full px-5 py-3 pr-12 text-sm focus:ring-2 focus:ring-blue-500 outline-none dark:text-white text-gray-800\"\n disabled={isGenerating}\n />\n <button\n onClick={handleSend}\n disabled={!input.trim() || isGenerating}\n className=\"absolute right-1 p-2.5 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-full transition-all shadow-md active:scale-95 flex items-center justify-center\"\n >\n <Send size={18} />\n </button>\n </div>\n </div>\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import type { RequestAdapter } from '../../../request';\n\nexport type JsonRequestOptions = {\n url: string;\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: Record<string, string>;\n body?: any;\n timeoutMs?: number;\n requestAdapter?: RequestAdapter;\n};\n\nexport const requestJson = async <T>(options: JsonRequestOptions): Promise<T> => {\n const { url, method = 'POST', headers = {}, body, timeoutMs, requestAdapter } = options;\n\n if (requestAdapter) {\n return requestAdapter.request<T>({\n url,\n method,\n headers,\n body,\n });\n }\n\n const controller = timeoutMs ? new AbortController() : undefined;\n const timeoutId = timeoutMs\n ? setTimeout(() => {\n controller?.abort();\n }, timeoutMs)\n : undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller?.signal,\n });\n\n const text = await response.text();\n let data: any = null;\n\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = text;\n }\n }\n\n if (!response.ok) {\n const errorMessage =\n data?.error?.message ||\n data?.error ||\n data?.message ||\n `Request failed with status ${response.status}`;\n const error = new Error(errorMessage);\n (error as any).status = response.status;\n (error as any).data = data;\n throw error;\n }\n\n return data as T;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n};\n","import type {\n AiChatRequest,\n AiChatResponse,\n AiMessage,\n AiToolCall,\n AiUsage,\n ResolvedAiClientConfig,\n} from '../types';\nimport type { AiProvider } from './types';\nimport { requestJson } from '../client/request';\n\nexport const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';\nexport const DEFAULT_OPENAI_MODEL = 'gpt-3.5-turbo';\n\ntype OpenAIToolCall = {\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n};\n\ntype OpenAIMessage = {\n role?: string;\n content?: string | null;\n tool_calls?: OpenAIToolCall[];\n};\n\ntype OpenAIChatResponse = {\n id: string;\n choices?: Array<{\n message?: OpenAIMessage;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n};\n\nconst joinUrl = (base: string, path: string): string => {\n const trimmedBase = base.replace(/\\/+$/, '');\n const trimmedPath = path.replace(/^\\/+/, '');\n return `${trimmedBase}/${trimmedPath}`;\n};\n\nconst normalizeToolCalls = (toolCalls?: OpenAIToolCall[]): AiToolCall[] | undefined => {\n if (!toolCalls || !toolCalls.length) {\n return undefined;\n }\n\n return toolCalls.map((call, index) => ({\n id: call?.id ?? String(index),\n type: 'function',\n function: {\n name: call?.function?.name ?? '',\n arguments: call?.function?.arguments ?? '',\n },\n }));\n};\n\nconst normalizeUsage = (usage?: OpenAIChatResponse['usage']): AiUsage | undefined => {\n if (!usage) {\n return undefined;\n }\n\n return {\n promptTokens: usage.prompt_tokens,\n completionTokens: usage.completion_tokens,\n totalTokens: usage.total_tokens,\n };\n};\n\nconst mapMessage = (message: AiMessage): Record<string, any> => {\n const mapped: Record<string, any> = {\n role: message.role,\n content: message.content,\n };\n\n if (message.name) {\n mapped.name = message.name;\n }\n if (message.toolCallId) {\n mapped.tool_call_id = message.toolCallId;\n }\n if (message.toolCalls?.length) {\n mapped.tool_calls = message.toolCalls.map((call) => ({\n id: call.id,\n type: call.type,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n }));\n }\n\n return mapped;\n};\n\nexport const createOpenAICompatibleProvider = (): AiProvider => {\n return {\n id: 'openai-compatible',\n sendChat: async (request: AiChatRequest, config: ResolvedAiClientConfig): Promise<AiChatResponse> => {\n if (request.stream) {\n throw new Error('Streaming is not supported in sendChat. Use streamChat when available.');\n }\n\n const model = request.model ?? config.model ?? DEFAULT_OPENAI_MODEL;\n if (!model) {\n throw new Error('Model is required for chat completion requests.');\n }\n\n const payload: Record<string, any> = {\n model,\n messages: request.messages.map(mapMessage),\n };\n\n if (request.temperature !== undefined) {\n payload.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n payload.max_tokens = request.maxTokens;\n }\n if (request.topP !== undefined) {\n payload.top_p = request.topP;\n }\n if (request.stop !== undefined) {\n payload.stop = request.stop;\n }\n if (request.tools) {\n payload.tools = request.tools;\n }\n if (request.toolChoice) {\n payload.tool_choice = request.toolChoice;\n }\n\n const url = joinUrl(config.baseUrl || DEFAULT_OPENAI_BASE_URL, 'chat/completions');\n const response = await requestJson<OpenAIChatResponse>({\n url,\n method: 'POST',\n headers: config.headers,\n body: payload,\n timeoutMs: config.timeoutMs,\n requestAdapter: config.requestAdapter,\n });\n\n const firstMessage = response.choices?.[0]?.message;\n const toolCalls = normalizeToolCalls(firstMessage?.tool_calls);\n const content = firstMessage?.content ?? '';\n const assistantMessage: AiMessage = {\n role: 'assistant',\n content,\n toolCalls,\n };\n\n return {\n id: response.id ?? '',\n content,\n message: assistantMessage,\n usage: normalizeUsage(response.usage),\n toolCalls,\n raw: response,\n };\n },\n };\n};\n","import type {\n AiChatRequest,\n AiChatRequestOptions,\n AiChatResponse,\n AiClient,\n AiClientConfig,\n AiMessage,\n ResolvedAiClientConfig,\n} from '../types';\nimport type { AiProvider } from '../providers/types';\nimport { createOpenAICompatibleProvider } from '../providers/openai-compatible';\n\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nconst resolveApiKey = async (config: AiClientConfig): Promise<string | undefined> => {\n if (config.apiKey) {\n return config.apiKey;\n }\n if (config.getApiKey) {\n return await config.getApiKey();\n }\n return undefined;\n};\n\nconst hasAuthorizationHeader = (headers: Record<string, string>): boolean => {\n return Object.keys(headers).some((key) => key.toLowerCase() === 'authorization');\n};\n\nconst resolveHeaders = async (config: AiClientConfig): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(config.headers ?? {}),\n };\n\n if (!hasAuthorizationHeader(headers)) {\n const apiKey = await resolveApiKey(config);\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`;\n }\n }\n\n return headers;\n};\n\nconst resolveClientConfig = async (config: AiClientConfig): Promise<ResolvedAiClientConfig> => {\n const headers = await resolveHeaders(config);\n\n return {\n ...config,\n baseUrl: config.baseUrl ?? 'https://api.openai.com/v1',\n headers,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n};\n\nconst resolveProvider = (provider?: AiProvider): AiProvider => {\n return provider ?? createOpenAICompatibleProvider();\n};\n\nexport const createAiClient = (config: AiClientConfig): AiClient => {\n const provider = resolveProvider(config.provider);\n\n const sendChat = async (request: AiChatRequest): Promise<AiChatResponse> => {\n const resolvedConfig = await resolveClientConfig(config);\n config.logger?.debug?.('ai.sendChat', {\n model: request.model ?? resolvedConfig.model,\n messageCount: request.messages.length,\n });\n try {\n return await provider.sendChat(request, resolvedConfig);\n } catch (error) {\n config.logger?.error?.('ai.sendChat.error', error);\n throw error;\n }\n };\n\n type SendMessageOptions = AiChatRequestOptions & { systemPrompt?: string };\n\n const sendMessage = async (\n content: string,\n options?: SendMessageOptions\n ): Promise<AiChatResponse> => {\n const resolvedOptions: SendMessageOptions = options ?? {};\n const { systemPrompt, ...requestOptions } = resolvedOptions;\n\n const messages: AiMessage[] = [];\n if (systemPrompt) {\n messages.push({ role: 'system', content: systemPrompt });\n }\n messages.push({ role: 'user', content });\n\n return sendChat({\n messages,\n ...requestOptions,\n });\n };\n\n return {\n sendChat,\n sendMessage,\n };\n};\n","export type PromptVariableValue = string | number | boolean | null | undefined;\n\nexport type PromptVariables = Record<string, PromptVariableValue>;\n\nexport const normalizePromptVariables = (\n variables: PromptVariables = {}\n): Record<string, string> => {\n const normalized: Record<string, string> = {};\n\n Object.entries(variables).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n normalized[key] = '';\n } else {\n normalized[key] = String(value);\n }\n });\n\n return normalized;\n};\n","import { normalizePromptVariables, PromptVariables } from './variables';\n\nexport interface PromptTemplateOptions {\n missingValue?: string;\n preserveUnknown?: boolean;\n}\n\nexport const applyPromptTemplate = (\n template: string,\n variables: PromptVariables = {},\n options: PromptTemplateOptions = {}\n): string => {\n if (!template) {\n return '';\n }\n\n const resolved = normalizePromptVariables(variables);\n const missingValue = options.missingValue ?? '';\n\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (_match, key: string) => {\n if (Object.prototype.hasOwnProperty.call(resolved, key)) {\n return resolved[key] ?? '';\n }\n\n return options.preserveUnknown ? `{{${key}}}` : missingValue;\n });\n};\n","import { applyPromptTemplate } from '../prompt/template';\nimport type { AiChatInputOptions, AiChatResponse, AiChatSession, AiChatSessionOptions, AiMessage } from '../types';\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const createChatSession = (options: AiChatSessionOptions): AiChatSession => {\n let systemPrompt = options.systemPrompt;\n let messages = buildBaseMessages(systemPrompt, options.initialMessages);\n\n const reset = () => {\n messages = buildBaseMessages(systemPrompt, options.initialMessages);\n };\n\n const setSystemPrompt = (prompt?: string) => {\n systemPrompt = prompt;\n reset();\n };\n\n const sendMessage = async (\n input: string,\n requestOptions: AiChatInputOptions = {}\n ): Promise<AiChatResponse> => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? options.template;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messages, userMessage];\n\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n\n messages = [...nextMessages, assistantMessage];\n\n return response;\n };\n\n return {\n getMessages: () => messages,\n setSystemPrompt,\n reset,\n sendMessage,\n };\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { applyPromptTemplate } from '../prompt/template';\nimport type {\n AiChatInputOptions,\n AiChatResponse,\n AiChatStatus,\n AiClient,\n AiMessage,\n} from '../types';\n\nexport interface UseAiChatOptions {\n client: AiClient;\n systemPrompt?: string;\n template?: string;\n initialMessages?: AiMessage[];\n}\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const useAiChat = (options: UseAiChatOptions) => {\n const systemPromptRef = useRef(options.systemPrompt);\n const templateRef = useRef(options.template);\n const [messages, setMessages] = useState<AiMessage[]>(() =>\n buildBaseMessages(systemPromptRef.current, options.initialMessages)\n );\n const messagesRef = useRef(messages);\n const [status, setStatus] = useState<AiChatStatus>('idle');\n const [error, setError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<AiChatResponse | null>(null);\n\n const syncMessages = (nextMessages: AiMessage[]) => {\n messagesRef.current = nextMessages;\n setMessages(nextMessages);\n };\n\n const reset = useCallback(() => {\n syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));\n setStatus('idle');\n setError(null);\n setLastResponse(null);\n }, [options.initialMessages]);\n\n const setSystemPrompt = useCallback(\n (prompt?: string) => {\n systemPromptRef.current = prompt;\n reset();\n },\n [reset]\n );\n\n const sendMessage = useCallback(\n async (input: string, requestOptions: AiChatInputOptions = {}) => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? templateRef.current;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messagesRef.current, userMessage];\n syncMessages(nextMessages);\n setStatus('loading');\n setError(null);\n\n try {\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n const updatedMessages = [...nextMessages, assistantMessage];\n syncMessages(updatedMessages);\n setStatus('success');\n setLastResponse(response);\n return response;\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n setStatus('error');\n setError(nextError);\n throw nextError;\n }\n },\n [options.client]\n );\n\n return {\n status,\n isLoading: status === 'loading',\n error,\n messages,\n lastResponse,\n sendMessage,\n reset,\n setSystemPrompt,\n };\n};\n","import type { AiToolDefinition } from '../types';\nimport type { SkillDefinition, SkillExecutionContext, SkillRegistry } from './types';\n\nexport const skillToToolDefinition = (skill: SkillDefinition): AiToolDefinition => {\n const toolDefinition: AiToolDefinition = {\n type: 'function',\n function: {\n name: skill.name,\n description: skill.description,\n },\n };\n\n if (skill.inputSchema) {\n toolDefinition.function.parameters = skill.inputSchema;\n }\n\n return toolDefinition;\n};\n\nexport class InMemorySkillRegistry implements SkillRegistry {\n private skills = new Map<string, SkillDefinition>();\n\n constructor(initialSkills?: SkillDefinition[]) {\n initialSkills?.forEach((skill) => {\n this.skills.set(skill.name, skill);\n });\n }\n\n registerSkill(skill: SkillDefinition): void {\n this.skills.set(skill.name, skill);\n }\n\n unregisterSkill(name: string): boolean {\n return this.skills.delete(name);\n }\n\n getSkill(name: string): SkillDefinition | undefined {\n return this.skills.get(name);\n }\n\n listSkills(): SkillDefinition[] {\n return Array.from(this.skills.values());\n }\n\n async executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any> {\n const skill = this.skills.get(name);\n if (!skill) {\n throw new Error(`Skill not found: ${name}`);\n }\n return await skill.execute(input, context);\n }\n\n toToolDefinitions(): AiToolDefinition[] {\n return this.listSkills().map(skillToToolDefinition);\n }\n}\n\nexport const createSkillRegistry = (initialSkills?: SkillDefinition[]): InMemorySkillRegistry => {\n return new InMemorySkillRegistry(initialSkills);\n};\n","/**\n * 时间格式化工具\n */\n\nexport const formatTime = {\n /**\n * 将秒数转换为 MM:SS 格式\n */\n toMinutesSeconds(seconds: number): string {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 将秒数转换为 HH:MM:SS 格式\n */\n toHoursMinutesSeconds(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n\n if (hours > 0) {\n return hours + ':' + minutes.toString().padStart(2, '0') + ':' + remainingSeconds.toString().padStart(2, '0');\n }\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 格式化日期为用户友好的格式\n */\n formatDate(date: string | Date, locale = 'zh-CN'): string {\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) {\n return locale === 'zh-CN' ? '今天' : 'Today';\n } else if (diffDays === 1) {\n return locale === 'zh-CN' ? '昨天' : 'Yesterday';\n } else if (diffDays < 7) {\n return locale === 'zh-CN' ? diffDays + '天前' : diffDays + ' days ago';\n } else {\n return d.toLocaleDateString(locale);\n }\n },\n};\n\n","/**\n * 日语文本处理工具\n */\n\nexport const japaneseUtils = {\n /**\n * 提取文本中的汉字\n */\n extractKanji(text: string): string[] {\n return text.match(/[\\u4E00-\\u9FAF]/g) || [];\n },\n\n /**\n * 提取文本中的假名\n */\n extractKana(text: string): string[] {\n return text.match(/[\\u3040-\\u309F\\u30A0-\\u30FF]/g) || [];\n },\n\n /**\n * 清理文本,移除特殊字符但保留日语字符\n */\n cleanText(text: string): string {\n return text.replace(/[^\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FAF\\w\\s]/g, '');\n },\n};\n","/**\n * 验证工具\n */\n\nexport const validators = {\n /**\n * 验证邮箱格式\n */\n isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n },\n\n /**\n * 验证密码强度\n */\n isValidPassword(password: string): {\n isValid: boolean;\n errors: string[];\n } {\n const errors: string[] = [];\n\n if (password.length < 6) {\n errors.push('Password must be at least 6 characters');\n }\n\n if (password.length > 50) {\n errors.push('Password must not exceed 50 characters');\n }\n\n if (!/[a-zA-Z]/.test(password)) {\n errors.push('Password must contain at least one letter');\n }\n\n if (!/[0-9]/.test(password)) {\n errors.push('Password must contain at least one number');\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n /**\n * 验证用户名格式\n */\n isValidUsername(username: string): boolean {\n const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/;\n return usernameRegex.test(username);\n },\n\n /**\n * 验证文件大小\n */\n isValidFileSize(size: number, maxSize: number): boolean {\n return size > 0 && size <= maxSize;\n },\n\n /**\n * 验证文件类型\n */\n isValidFileType(type: string, supportedTypes: string[]): boolean {\n return supportedTypes.includes(type);\n },\n\n /**\n * 验证 URL 格式\n */\n isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n },\n};\n\n","/**\n * 文件处理工具\n */\n\nexport const fileUtils = {\n /**\n * 格式化文件大小\n */\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n },\n\n /**\n * 获取文件扩展名\n */\n getFileExtension(filename: string): string {\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2);\n },\n\n /**\n * 生成唯一文件名\n */\n generateUniqueFileName(originalName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 15);\n const extension = this.getFileExtension(originalName);\n const baseName = originalName.replace('.' + (extension), '');\n return extension ? (baseName) + '_' + (timestamp) + '_' + (random) + '.' + (extension) : (baseName) + '_' + (timestamp) + '_' + (random);\n },\n\n /**\n * 验证文件名是否有效\n */\n isValidFilename(filename: string): boolean {\n // 不允许包含特殊字符\n const invalidChars = /[<>:\"/\\\\|?*\\x00-\\x1F]/g;\n return !invalidChars.test(filename) && filename.length > 0 && filename.length <= 255;\n },\n};\n\n","/**\n * 数组和对象工具\n */\n\nexport const arrayUtils = {\n /**\n * 数组去重\n */\n unique<T>(array: T[]): T[] {\n return [...new Set(array)];\n },\n\n /**\n * 数组分组\n */\n groupBy<T>(array: T[], key: keyof T): Record<string, T[]> {\n return array.reduce(\n (groups, item) => {\n const groupKey = String(item[key]);\n const group = groups[groupKey] || [];\n group.push(item);\n groups[groupKey] = group;\n return groups;\n },\n {} as Record<string, T[]>\n );\n },\n\n /**\n * 数组分页\n */\n paginate<T>(\n array: T[],\n page: number,\n limit: number\n ): {\n data: T[];\n total: number;\n page: number;\n pages: number;\n hasNext: boolean;\n hasPrev: boolean;\n } {\n const total = array.length;\n const pages = Math.ceil(total / limit);\n const start = (page - 1) * limit;\n const end = start + limit;\n const data = array.slice(start, end);\n\n return {\n data,\n total,\n page,\n pages,\n hasNext: page < pages,\n hasPrev: page > 1,\n };\n },\n\n /**\n * 数组随机排序\n */\n shuffle<T>(array: T[]): T[] {\n const shuffled = [...array];\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [shuffled[i], shuffled[j]] = [shuffled[j]!, shuffled[i]!];\n }\n return shuffled;\n },\n};\n\n","/**\n * 字符串工具\n */\n\nexport const stringUtils = {\n /**\n * 截断文本\n */\n truncate(text: string, length: number, suffix = '...'): string {\n if (text.length <= length) return text;\n return text.substring(0, length - suffix.length) + suffix;\n },\n\n /**\n * 首字母大写\n */\n capitalize(text: string): string {\n if (!text) return '';\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n },\n\n /**\n * 驼峰转下划线\n */\n camelToSnake(text: string): string {\n return text.replace(/[A-Z]/g, (letter) => '_' + (letter.toLowerCase()));\n },\n\n /**\n * 下划线转驼峰\n */\n snakeToCamel(text: string): string {\n return text.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n },\n\n /**\n * 生成随机字符串\n */\n generateRandom(length: number): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n },\n};\n\n","/**\n * 调试工具\n */\n\nimport { logger } from '../logger';\nimport { fileUtils } from './file';\n\nexport const debugUtils = {\n /**\n * 安全的 JSON 序列化\n */\n safeStringify(obj: any): string {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (error) {\n return '[Circular Reference or Invalid JSON: ' + (error) + ']';\n }\n },\n\n /**\n * 性能计时器\n */\n createTimer(label?: string) {\n const start = typeof performance !== 'undefined' ? performance.now() : Date.now();\n return {\n end: () => {\n const end = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const duration = end - start;\n const message = (label || 'Timer') + ': ' + (duration.toFixed(2)) + 'ms';\n logger.info(message);\n return duration;\n },\n };\n },\n\n /**\n * 内存使用情况(仅在 Node.js 环境)\n */\n getMemoryUsage(): Record<string, string> | null {\n if (typeof process !== 'undefined' && process.memoryUsage) {\n const usage = process.memoryUsage();\n return {\n rss: fileUtils.formatFileSize(usage.rss),\n heapTotal: fileUtils.formatFileSize(usage.heapTotal),\n heapUsed: fileUtils.formatFileSize(usage.heapUsed),\n external: fileUtils.formatFileSize(usage.external),\n };\n }\n return null;\n },\n};\n\n","/**\n * 错误处理工具\n */\n\nexport const errorUtils = {\n /**\n * 创建标准化的错误对象\n */\n createError(\n code: string,\n message: string,\n details?: any\n ): Error & { code: string; details?: any } {\n const error = new Error(message) as Error & { code: string; details?: any };\n error.code = code;\n if (details) {\n error.details = details;\n }\n return error;\n },\n\n /**\n * 安全的错误信息提取\n */\n extractErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n return 'Unknown error';\n },\n\n /**\n * 错误重试机制\n */\n async retry<T>(fn: () => Promise<T>, maxAttempts = 3, delay = 1000): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === maxAttempts) {\n throw lastError;\n }\n\n // 指数退避延迟\n await new Promise((resolve) => setTimeout(resolve, delay * Math.pow(2, attempt - 1)));\n }\n }\n\n throw lastError!;\n },\n};\n\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { className?: string }\n return React.cloneElement(children, {\n ...(props as object),\n className: cn(buttonVariants({ variant, size, className }), childProps.className),\n })\n }\n\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...(props as any)}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...(props as any)}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...(props as any)}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...(props as any)} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...(props as any)}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...(props as any)} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(labelVariants(), className)}\n {...(props as any)}\n />\n))\nLabel.displayName = \"Label\"\n\nexport { Label }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}) {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n return [state, setState] as const;\n}\n\nexport function Portal({\n children,\n container,\n}: {\n children: React.ReactNode;\n container?: Element | null;\n}) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return createPortal(children, container ?? document.body);\n}\n\nexport function useOnClickOutside(\n refs: Array<React.RefObject<HTMLElement | null>>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled: boolean\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n const clickedInside = refs.some((ref) => {\n const el = ref.current;\n return el && el.contains(target);\n });\n if (!clickedInside) {\n handler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [refs, handler, enabled]);\n}\n\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { useControllableState } from \"./internal/ui-core\"\n\ninterface TabsContextValue {\n value: string\n setValue: (next: string) => void\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\ninterface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nconst Tabs = ({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n ...props\n}: TabsProps) => {\n const [current, setCurrent] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n })\n\n return (\n <TabsContext.Provider value={{ value: current, setValue: setCurrent }}>\n <div className={className} {...(props as any)} />\n </TabsContext.Provider>\n )\n}\n\nconst TabsList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...(props as any)}\n />\n))\nTabsList.displayName = \"TabsList\"\n\ninterface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-state={active ? \"active\" : \"inactive\"}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active && \"bg-background text-foreground shadow\",\n className\n )}\n onClick={(e) => {\n ctx?.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n forceMount?: boolean\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount = false, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n if (!active && !forceMount) return null\n\n return (\n <div\n ref={ref}\n data-state={active ? \"active\" : \"inactive\"}\n hidden={!active && forceMount}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...(props as any)}\n />\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DialogContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\ninterface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(true)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nDialogTrigger.displayName = \"DialogTrigger\"\n\nconst DialogPortal = ({ children }: { children: React.ReactNode }) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return <Portal>{children}</Portal>\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={(e) => {\n ctx?.setOpen(false)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return (\n <div\n ref={ref}\n className={cn(\"fixed inset-0 z-[9999] bg-black/80\", className)}\n {...(props as any)}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nexport interface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n onPointerDownOutside?: (event: PointerEvent) => void\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n showCloseButton?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n const open = !!ctx?.open\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n (evt) => {\n onPointerDownOutside?.(evt as PointerEvent)\n if (!(evt as Event).defaultPrevented) {\n ctx?.setOpen(false)\n }\n },\n open\n )\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return\n onEscapeKeyDown?.(e)\n if (!e.defaultPrevented) {\n ctx?.setOpen(false)\n }\n }\n document.addEventListener(\"keydown\", onKey)\n return () => document.removeEventListener(\"keydown\", onKey)\n }, [ctx, onEscapeKeyDown, open])\n\n if (!ctx || !open) return null\n\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg\",\n className\n )}\n {...(props as any)}\n >\n {children}\n {showCloseButton ? (\n <DialogClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n ) : null}\n </div>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...(props as any)}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { buttonVariants } from \"./Button\"\nimport {\n Dialog as AlertDialog,\n DialogPortal as AlertDialogPortal,\n DialogOverlay as AlertDialogOverlay,\n DialogTrigger as AlertDialogTrigger,\n DialogContent as AlertDialogContentBase,\n DialogHeader as AlertDialogHeader,\n DialogFooter as AlertDialogFooter,\n DialogTitle as AlertDialogTitle,\n DialogDescription as AlertDialogDescription,\n DialogClose,\n} from \"./Dialog\"\n\nconst AlertDialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof AlertDialogContentBase>\n>(({ className, ...props }, ref) => (\n <AlertDialogContentBase\n ref={ref}\n className={cn(\"z-[9999]\", className)}\n {...(props as any)}\n />\n))\nAlertDialogContent.displayName = \"AlertDialogContent\"\n\nconst AlertDialogAction = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...(props as any)}\n />\n))\nAlertDialogAction.displayName = \"AlertDialogAction\"\n\nconst AlertDialogCancel = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...(props as any)}\n />\n))\nAlertDialogCancel.displayName = \"AlertDialogCancel\"\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DropdownMenuContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(null)\nconst DropdownMenuRadioGroupContext = React.createContext<{\n value?: string\n onValueChange?: (value: string) => void\n} | null>(null)\n\ninterface DropdownMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst DropdownMenu = ({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DropdownMenuContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DropdownMenuContext.Provider>\n )\n}\n\nconst DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n})\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\"\n\nconst DropdownMenuGroup = ({ children }: { children: React.ReactNode }) => <>{children}</>\nconst DropdownMenuPortal = ({ children }: { children: React.ReactNode }) => <Portal>{children}</Portal>\nconst DropdownMenuSub = ({ children }: { children: React.ReactNode }) => <>{children}</>\n\nconst DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + sideOffset, left: rect.left })\n }, [trigger, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <DropdownMenuPortal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n className\n )}\n style={{ position: \"fixed\", top: pos.top, left: pos.left, ...style }}\n {...(props as any)}\n />\n </DropdownMenuPortal>\n )\n})\nDropdownMenuContent.displayName = \"DropdownMenuContent\"\n\ntype SelectEventLike = Event & { preventDefault: () => void; defaultPrevented: boolean }\n\nconst DropdownMenuItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n inset?: boolean\n onSelect?: (event: SelectEventLike) => void\n }\n>(({ className, inset, onSelect, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n onClick={(e) => {\n onSelect?.(e.nativeEvent as SelectEventLike)\n onClick?.(e)\n if (!e.isDefaultPrevented()) {\n ctx?.setOpen(false)\n }\n }}\n {...(props as any)}\n />\n )\n})\nDropdownMenuItem.displayName = \"DropdownMenuItem\"\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n checked?: boolean\n onCheckedChange?: (checked: boolean) => void\n }\n>(({ className, children, checked = false, onCheckedChange, onClick, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n onCheckedChange?.(!checked)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n {children}\n </button>\n))\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\"\n\nconst DropdownMenuRadioGroup = ({\n value,\n onValueChange,\n children,\n}: {\n value?: string\n onValueChange?: (value: string) => void\n children: React.ReactNode\n}) => (\n <DropdownMenuRadioGroupContext.Provider value={{ value, onValueChange }}>\n {children}\n </DropdownMenuRadioGroupContext.Provider>\n)\n\nconst DropdownMenuRadioItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string }\n>(({ className, children, value, onClick, ...props }, ref) => {\n const radioCtx = React.useContext(DropdownMenuRadioGroupContext)\n const menuCtx = React.useContext(DropdownMenuContext)\n const checked = radioCtx?.value === value\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n radioCtx?.onValueChange?.(value)\n onClick?.(e)\n menuCtx?.setOpen(false)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Circle className=\"h-2 w-2 fill-current\" /> : null}\n </span>\n {children}\n </button>\n )\n})\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\"\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\"\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\"\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...(props as any)}\n />\n)\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...(props as any)}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </button>\n))\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\"\n\nconst DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg\",\n className\n )}\n {...(props as any)}\n />\n))\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n anchorRef: React.RefObject<HTMLSpanElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\ninterface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Popover = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const anchorRef = React.useRef<HTMLSpanElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <PopoverContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, anchorRef, contentRef }}>\n {children}\n </PopoverContext.Provider>\n )\n}\n\ninterface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nPopoverTrigger.displayName = \"PopoverTrigger\"\n\nconst PopoverAnchor = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n ({ ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n return (\n <span ref={mergeRefs(ctx.anchorRef, ref)} {...(props as any)} />\n )\n }\n)\nPopoverAnchor.displayName = \"PopoverAnchor\"\n\ninterface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: \"start\" | \"center\" | \"end\"\n sideOffset?: number\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ className, align = \"center\", sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n const [position, setPosition] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const anchor = ctx?.anchorRef.current ?? ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n let left = rect.left + rect.width / 2\n if (align === \"start\") left = rect.left\n if (align === \"end\") left = rect.right\n setPosition({ top: rect.bottom + sideOffset, left })\n }, [anchor, align, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n transform: align === \"center\" ? \"translateX(-50%)\" : align === \"end\" ? \"translateX(-100%)\" : undefined,\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n }\n)\nPopoverContent.displayName = \"PopoverContent\"\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number\n max?: number\n}\n\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, max = 100, ...props }, ref) => {\n const safeMax = max <= 0 ? 100 : max\n const safeValue = Math.max(0, Math.min(value, safeMax))\n const percent = (safeValue / safeMax) * 100\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={safeValue}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...(props as any)}\n >\n <div\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - percent}%)` }}\n />\n </div>\n )\n }\n)\nProgress.displayName = \"Progress\"\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"relative overflow-auto\", className)}\n {...(props as any)}\n >\n {children}\n </div>\n))\nScrollArea.displayName = \"ScrollArea\"\n\ninterface ScrollBarProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"vertical\" | \"horizontal\"\n}\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, orientation = \"vertical\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"pointer-events-none absolute\",\n orientation === \"vertical\"\n ? \"right-0 top-0 h-full w-2.5\"\n : \"bottom-0 left-0 h-2.5 w-full\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface SelectContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value?: string\n setValue: (value: string) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n itemsRef: React.MutableRefObject<Map<string, React.ReactNode>>\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null)\nconst SelectGroupContext = React.createContext<boolean>(false)\n\ninterface SelectProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nconst Select = ({\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n children,\n}: SelectProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const [currentValue, setCurrentValue] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: (next) => {\n if (next !== undefined) {\n onValueChange?.(next)\n }\n },\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemsRef = React.useRef<Map<string, React.ReactNode>>(new Map())\n\n return (\n <SelectContext.Provider\n value={{\n open: disabled ? false : isOpen,\n setOpen: disabled ? () => undefined : setIsOpen,\n value: currentValue,\n setValue: (next) => {\n if (disabled) return\n setCurrentValue(next)\n setIsOpen(false)\n },\n triggerRef,\n contentRef,\n itemsRef,\n }}\n >\n {children}\n </SelectContext.Provider>\n )\n}\n\nconst SelectGroup = ({ children }: { children: React.ReactNode }) => (\n <SelectGroupContext.Provider value={true}>{children}</SelectGroupContext.Provider>\n)\n\nconst SelectValue = ({\n placeholder,\n children,\n}: {\n placeholder?: React.ReactNode\n children?: React.ReactNode\n}) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n if (children) return <>{children}</>\n if (ctx.value && ctx.itemsRef.current.has(ctx.value)) {\n return <>{ctx.itemsRef.current.get(ctx.value)}</>\n }\n return <span className=\"text-muted-foreground\">{placeholder}</span>\n}\n\nconst SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n\n return (\n <button\n ref={mergeRefs(ctx.triggerRef, ref)}\n type=\"button\"\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n onClick={(e) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span>{children}</span>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </button>\n )\n})\nSelectTrigger.displayName = \"SelectTrigger\"\n\nconst SelectScrollUpButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollUpButton.displayName = \"SelectScrollUpButton\"\n\nconst SelectScrollDownButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollDownButton.displayName = \"SelectScrollDownButton\"\n\nconst SelectContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n position?: \"item-aligned\" | \"popper\"\n }\n>(({ className, children, style, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0, width: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + 4, left: rect.left, width: rect.width })\n }, [trigger])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"relative z-50 max-h-80 overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n minWidth: Math.max(pos.width, 128),\n ...style,\n }}\n {...(props as any)}\n >\n <div className=\"p-1\">{children}</div>\n </div>\n </Portal>\n )\n})\nSelectContent.displayName = \"SelectContent\"\n\nconst SelectLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...(props as any)}\n />\n))\nSelectLabel.displayName = \"SelectLabel\"\n\ninterface SelectItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst SelectItem = React.forwardRef<HTMLButtonElement, SelectItemProps>(\n ({ className, children, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n\n React.useEffect(() => {\n if (!ctx) return\n ctx.itemsRef.current.set(value, children)\n return () => {\n ctx.itemsRef.current.delete(value)\n }\n }, [ctx, value, children])\n\n if (!ctx) return null\n\n const selected = ctx.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n ctx.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n {selected ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n <span>{children}</span>\n </button>\n )\n }\n)\nSelectItem.displayName = \"SelectItem\"\n\nconst SelectSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nSelectSeparator.displayName = \"SelectSeparator\"\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\"\n decorative?: boolean\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n role={decorative ? undefined : \"separator\"}\n aria-orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nSeparator.displayName = \"Separator\"\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport {\n Dialog as Sheet,\n DialogTrigger as SheetTrigger,\n DialogClose as SheetClose,\n DialogPortal as SheetPortal,\n DialogOverlay as SheetOverlay,\n DialogContent as BaseDialogContent,\n} from \"./Dialog\"\n\nconst sheetVariants = cva(\n \"fixed z-[10000] gap-4 bg-background p-6 shadow-lg transition ease-in-out translate-x-0 translate-y-0\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 left-0 border-b\",\n bottom: \"inset-x-0 bottom-0 left-0 border-t\",\n left: \"inset-y-0 left-0 top-0 h-full w-3/4 border-r sm:max-w-sm\",\n right: \"inset-y-0 right-0 top-0 h-full w-3/4 border-l sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends Omit<React.ComponentPropsWithoutRef<typeof BaseDialogContent>, \"children\">,\n VariantProps<typeof sheetVariants> {\n children?: React.ReactNode\n}\n\nconst SheetContent = React.forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = \"right\", className, children, ...props }, ref) => (\n <BaseDialogContent\n ref={ref}\n className={cn(\n \"max-w-none rounded-none\",\n sheetVariants({ side }),\n className\n )}\n showCloseButton={false}\n {...(props as any)}\n >\n <SheetClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetClose>\n {children}\n </BaseDialogContent>\n )\n)\nSheetContent.displayName = \"SheetContent\"\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetTitle.displayName = \"SheetTitle\"\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetDescription.displayName = \"SheetDescription\"\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal } from \"./internal/ui-core\"\n\nconst TooltipConfigContext = React.createContext<{ delayDuration: number }>({\n delayDuration: 200,\n})\n\ninterface TooltipContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLSpanElement>\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nconst TooltipProvider = ({\n children,\n delayDuration = 200,\n}: {\n children: React.ReactNode\n delayDuration?: number\n}) => {\n return (\n <TooltipConfigContext.Provider value={{ delayDuration }}>\n {children}\n </TooltipConfigContext.Provider>\n )\n}\n\nconst Tooltip = ({ children }: { children: React.ReactNode }) => {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLSpanElement>(null)\n return (\n <TooltipContext.Provider value={{ open, setOpen, triggerRef }}>\n {children}\n </TooltipContext.Provider>\n )\n}\n\nconst TooltipTrigger = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const cfg = React.useContext(TooltipConfigContext)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n if (!ctx) return null\n\n const setRef = mergeRefs(ctx.triggerRef, ref)\n\n const openWithDelay = () => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => ctx.setOpen(true), cfg.delayDuration)\n }\n\n const closeNow = () => {\n if (timer.current) clearTimeout(timer.current)\n ctx.setOpen(false)\n }\n\n const shared = {\n onMouseEnter: openWithDelay,\n onMouseLeave: closeNow,\n onFocus: openWithDelay,\n onBlur: closeNow,\n ...props,\n }\n\n return (\n <span ref={setRef} {...(shared as any)}>\n {children}\n </span>\n )\n})\nTooltipTrigger.displayName = \"TooltipTrigger\"\n\nconst TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({\n top: rect.top - sideOffset,\n left: rect.left + rect.width / 2,\n })\n }, [trigger, sideOffset])\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={ref}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n transform: \"translate(-50%, -100%)\",\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n})\nTooltipContent.displayName = \"TooltipContent\"\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\ntype AvatarStatus = \"idle\" | \"loaded\" | \"error\"\n\nconst AvatarContext = React.createContext<{\n status: AvatarStatus\n setStatus: (next: AvatarStatus) => void\n} | null>(null)\n\nconst Avatar = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const [status, setStatus] = React.useState<AvatarStatus>(\"idle\")\n\n return (\n <AvatarContext.Provider value={{ status, setStatus }}>\n <span\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...(props as any)}\n />\n </AvatarContext.Provider>\n )\n})\nAvatar.displayName = \"Avatar\"\n\nconst AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement>\n>(({ className, onLoad, onError, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n\n return (\n <img\n ref={ref}\n className={cn(\n \"aspect-square h-full w-full\",\n ctx?.status === \"error\" ? \"hidden\" : undefined,\n className\n )}\n onLoad={(e) => {\n ctx?.setStatus(\"loaded\")\n onLoad?.(e)\n }}\n onError={(e) => {\n ctx?.setStatus(\"error\")\n onError?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nAvatarImage.displayName = \"AvatarImage\"\n\nconst AvatarFallback = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n const show = ctx?.status !== \"loaded\"\n\n if (!show) return null\n\n return (\n <span\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...(props as any)}\n />\n )\n})\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import React from 'react';\nimport { clsx } from 'clsx';\n\n// ==================== 公共类型定义 ====================\n\n/** 基础网格项接口 */\nexport interface GridItem {\n id: string;\n [key: string]: any; // 允许额外的属性\n }\n \n /** 网格列数配置 */\n export interface GridColumns {\n /** 小屏幕列数 (640px+) */\n sm?: number;\n /** 中等屏幕列数 (768px+) */\n md?: number;\n /** 大屏幕列数 (1024px+) */\n lg?: number;\n /** 超大屏幕列数 (1280px+) */\n xl?: number;\n }\n \n /** 网格间距类型 */\n export type GridGap = 'sm' | 'md' | 'lg' | 'xl';\n \n // ==================== 公共工具函数 ====================\n \n /** 构建网格列数类名 */\n export function buildGridColsClasses(columns: GridColumns): string {\n return [\n 'grid-cols-1', // 默认单列\n columns.sm ? 'sm:grid-cols-' + (columns.sm) : '',\n columns.md ? 'md:grid-cols-' + (columns.md) : 'md:grid-cols-2',\n columns.lg ? 'lg:grid-cols-' + (columns.lg) : 'lg:grid-cols-3',\n columns.xl ? 'xl:grid-cols-' + (columns.xl) : ''\n ].filter(Boolean).join(' ');\n }\n \n /** 获取间距类名 */\n export function getGapClassName(gap: GridGap): string {\n const gapClasses: Record<GridGap, string> = {\n sm: 'gap-3',\n md: 'gap-6',\n lg: 'gap-8',\n xl: 'gap-10'\n };\n return gapClasses[gap];\n }\n \n // ==================== 通用网格组件 ====================\n \n /** 通用网格组件 Props */\n export interface GridProps<T extends GridItem> {\n /** 数据项数组 */\n items: T[];\n /** 渲染函数 */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** 网格列数配置 */\n columns?: GridColumns;\n /** 间距配置 */\n gap?: GridGap;\n /** 额外的容器类名 */\n className?: string;\n /** 容器样式 */\n style?: React.CSSProperties;\n }\n \n /** 通用网格组件 */\n export function Grid<T extends GridItem>({\n items,\n renderItem,\n columns = { md: 2, lg: 3 },\n gap = 'md',\n className = '',\n style\n }: GridProps<T>) {\n const gridColsClasses = buildGridColsClasses(columns);\n const gapClass = getGapClassName(gap);\n \n return (\n <div \n className={clsx('grid', gridColsClasses, gapClass, className)}\n style={style}\n >\n {items.map((item, index) => (\n <div key={item.id}>\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n );\n }","import React from 'react';\nimport { clsx } from 'clsx';\n\ninterface SearchBoxProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n}\n\nexport const SearchBox: React.FC<SearchBoxProps> = ({ \n searchQuery, \n onSearchChange, \n placeholder = \"搜索实验项目的标题、描述或标签...\",\n size = 'large'\n}) => {\n // 根据尺寸获取样式\n const getSizeStyles = () => {\n switch (size) {\n case 'small':\n return {\n container: 'h-10',\n input: 'pl-10 pr-10 text-sm',\n icon: 'w-4 h-4',\n iconPosition: 'left-3',\n clearButton: 'right-2 w-6 h-6',\n clearIcon: 'w-3 h-3'\n };\n case 'medium':\n return {\n container: 'h-12',\n input: 'pl-12 pr-12 text-base',\n icon: 'w-5 h-5',\n iconPosition: 'left-3',\n clearButton: 'right-3 w-7 h-7',\n clearIcon: 'w-4 h-4'\n };\n case 'large':\n default:\n return {\n container: 'h-16',\n input: 'pl-6 pr-16 text-lg',\n icon: 'w-6 h-6',\n iconPosition: 'left-6',\n clearButton: 'right-4 w-8 h-8',\n clearIcon: 'w-4 h-4'\n };\n }\n };\n\n const styles = getSizeStyles();\n const isLarge = size === 'large';\n\n return (\n <div className=\"relative group w-full\">\n {/* 搜索输入框 */}\n <input\n type=\"text\"\n placeholder={placeholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className={clsx(\n 'w-full',\n styles.container,\n styles.input,\n isLarge ? 'border-2 border-gray-200 rounded-2xl shadow-lg' : 'border border-gray-300 rounded-lg shadow-sm',\n 'bg-white focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 hover:border-gray-400',\n isLarge ? 'hover:shadow-xl' : 'hover:shadow-md',\n 'transition-all duration-300 ease-out text-gray-800 placeholder-gray-500',\n isLarge ? 'font-medium' : 'font-normal'\n )}\n />\n\n {/* 清除按钮 */}\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n className={clsx(\n 'absolute top-1/2',\n styles.clearButton,\n 'transform -translate-y-1/2 z-10 group/clear'\n )}\n >\n <div className={clsx(\n styles.clearButton,\n 'flex items-center justify-center rounded-full bg-gray-100 hover:bg-gray-200 transition-all duration-200 group-hover/clear:scale-105'\n )}>\n <svg \n className={clsx(styles.clearIcon, 'text-gray-500 group-hover/clear:text-gray-700')}\n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\" \n strokeWidth={2} \n d=\"M6 18L18 6M6 6l12 12\" \n />\n </svg>\n </div>\n </button>\n )}\n </div>\n );\n}","'use client';\n\nimport React from 'react';\n\n// Timeline相关的类型定义\nexport interface TimelineItem {\n date: string;\n title: string;\n description: string;\n}\n\nexport interface TimelineConfig {\n items: TimelineItem[];\n}\n\ninterface TimelineProps {\n items?: TimelineItem[];\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ items = [] }) => {\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <div className=\"relative\">\n {/* 时间线 */}\n <div className=\"absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200\"></div>\n \n {/* 时间线项目 */}\n {items.map((item, index) => (\n <div key={index} className=\"relative pl-12 pb-8\">\n {/* 时间点 */}\n <div className=\"absolute left-0 w-8 h-8 rounded-full bg-blue-500 border-4 border-white shadow-md flex items-center justify-center\">\n <div className=\"w-2 h-2 rounded-full bg-white\"></div>\n </div>\n \n {/* 内容 */}\n <div className=\"bg-white rounded-lg p-4 shadow-md\">\n <div className=\"text-sm text-gray-500 mb-2\">{item.date}</div>\n <h4 className=\"text-lg font-semibold mb-2\">{item.title}</h4>\n <p className=\"text-gray-600\">{item.description}</p>\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default Timeline;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { clsx } from 'clsx';\n\n// CollisionBalls相关的类型定义\nexport interface Ball {\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n color: string;\n text?: string;\n isDragging?: boolean;\n}\n\nexport interface CollisionBallsConfig {\n balls: {\n id: string;\n label: string;\n color: string;\n size: number;\n }[];\n width: number;\n height: number;\n}\n\ninterface CollisionBallsProps {\n collisionBallsConfig: CollisionBallsConfig;\n}\n\nexport const CollisionBalls: React.FC<CollisionBallsProps> = ({\n collisionBallsConfig: {\n balls,\n width,\n height\n },\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const ballsRef = useRef<Ball[]>([]);\n const [isShaking, setIsShaking] = useState(false);\n const [draggedBall, setDraggedBall] = useState<Ball | null>(null);\n const [mousePos, setMousePos] = useState({ x: 0, y: 0 });\n const animationRef = useRef<number | null>(null);\n\n // 更新canvas尺寸\n const updateCanvasSize = () => {\n const container = containerRef.current;\n const canvas = canvasRef.current;\n if (!container || !canvas) {\n console.error('Container or canvas not found');\n return;\n }\n\n const containerWidth = container.clientWidth;\n const containerHeight = container.clientHeight;\n \n console.log('Container size:', { containerWidth, containerHeight });\n \n // 设置canvas的实际尺寸\n canvas.width = containerWidth;\n canvas.height = containerHeight;\n \n // 设置canvas的显示尺寸\n canvas.style.width = (containerWidth) + 'px';\n canvas.style.height = (containerHeight) + 'px';\n \n console.log('Canvas size updated:', {\n width: canvas.width,\n height: canvas.height,\n containerWidth,\n containerHeight\n });\n };\n\n // 初始化小球\n const initBalls = () => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas not found during ball initialization');\n return [];\n }\n\n console.log('Initializing balls with canvas size:', {\n width: canvas.width,\n height: canvas.height\n });\n\n return balls.map((ballConfig) => ({\n x: Math.random() * (canvas.width - 100) + 50,\n y: Math.random() * (canvas.height - 100) + 50,\n vx: (Math.random() - 0.5) * 4,\n vy: (Math.random() - 0.5) * 4,\n radius: ballConfig.size,\n color: ballConfig.color,\n text: ballConfig.label,\n isDragging: false\n }));\n };\n\n // 添加resize监听\n useEffect(() => {\n const handleResize = () => {\n console.log('Window resized');\n updateCanvasSize();\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', handleResize);\n // 初始设置尺寸\n updateCanvasSize();\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', handleResize);\n }\n };\n }, []);\n\n // 动画循环\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas element not found');\n return;\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n console.error('Failed to get canvas context');\n return;\n }\n\n console.log('Starting animation setup...');\n \n // 确保canvas尺寸已更新\n updateCanvasSize();\n \n // 初始化小球\n ballsRef.current = initBalls();\n console.log('Balls initialized:', ballsRef.current);\n\n let lastTime = performance.now();\n let frameCount = 0;\n\n const animate = (currentTime: number) => {\n try {\n // 计算帧率\n frameCount++;\n if (currentTime - lastTime >= 1000) {\n console.log('FPS: ' + (frameCount));\n frameCount = 0;\n lastTime = currentTime;\n }\n\n // 清除画布\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // 更新和绘制每个小球\n ballsRef.current.forEach((ball) => {\n if (!ball.isDragging) {\n updatePosition(ball, canvas.width, canvas.height);\n }\n\n for (let i = 0; i < ballsRef.current.length; i++) {\n for (let j = i + 1; j < ballsRef.current.length; j++) {\n const ball1 = ballsRef.current[i];\n const ball2 = ballsRef.current[j];\n if (ball1 && ball2) {\n checkCollision(ball1, ball2);\n }\n }\n }\n\n draw(ctx, ball);\n });\n\n // 继续动画循环\n animationRef.current = requestAnimationFrame(animate);\n } catch (error) {\n console.error('Animation error:', error);\n }\n };\n\n // 启动动画\n console.log('Starting animation loop...');\n animationRef.current = requestAnimationFrame(animate);\n\n // 清理函数\n return () => {\n console.log('Cleaning up animation...');\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n };\n }, []);\n\n const shake = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = (Math.random() - 0.5) * 10;\n ball.vy = (Math.random() - 0.5) * 10;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const slowdown = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = ball.vx * 0.5;\n ball.vy = ball.vy * 0.5;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const checkCollision = (ball1: Ball, ball2: Ball) => {\n const dx = ball2.x - ball1.x;\n const dy = ball2.y - ball1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (distance < ball1.radius + ball2.radius) {\n const angle = Math.atan2(dy, dx);\n const overlap = (ball1.radius + ball2.radius - distance) / 2;\n\n if (ball1.isDragging || ball2.isDragging) {\n const draggedBall = ball1.isDragging ? ball1 : ball2;\n const otherBall = ball1.isDragging ? ball2 : ball1;\n\n otherBall.x += (draggedBall === ball1 ? 1 : -1) * overlap * Math.cos(angle);\n otherBall.y += (draggedBall === ball1 ? 1 : -1) * overlap * Math.sin(angle);\n\n const pushForce = 2;\n otherBall.vx = (draggedBall === ball1 ? -1 : 1) * Math.cos(angle) * pushForce;\n otherBall.vy = (draggedBall === ball1 ? -1 : 1) * Math.sin(angle) * pushForce;\n\n return;\n }\n\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n\n const vx1 = ball1.vx * cos + ball1.vy * sin;\n const vy1 = ball1.vy * cos - ball1.vx * sin;\n const vx2 = ball2.vx * cos + ball2.vy * sin;\n const vy2 = ball2.vy * cos - ball2.vx * sin;\n\n const newVx1 = vx2;\n const newVx2 = vx1;\n\n ball1.vx = newVx1 * cos - vy1 * sin;\n ball1.vy = vy1 * cos + newVx1 * sin;\n ball2.vx = newVx2 * cos - vy2 * sin;\n ball2.vy = vy2 * cos + newVx2 * sin;\n\n ball1.x -= overlap * Math.cos(angle);\n ball1.y -= overlap * Math.sin(angle);\n ball2.x += overlap * Math.cos(angle);\n ball2.y += overlap * Math.sin(angle);\n }\n };\n\n const updatePosition = (ball: Ball, width: number, height: number) => {\n const handleBoundaryCollision = (\n velocity: number,\n position: number,\n boundary: number,\n radius: number,\n ): [number, number] => {\n let newVelocity = velocity;\n let newPosition = position;\n\n if (position - radius < 0) {\n newPosition = radius;\n newVelocity = Math.abs(velocity);\n } else if (position + radius > boundary) {\n newPosition = boundary - radius;\n newVelocity = -Math.abs(velocity);\n }\n\n return [newVelocity, newPosition];\n };\n\n const [newVx, newX] = handleBoundaryCollision(\n ball.vx,\n ball.x,\n width,\n ball.radius,\n );\n const [newVy, newY] = handleBoundaryCollision(\n ball.vy,\n ball.y,\n height,\n ball.radius,\n );\n\n ball.vx = newVx;\n ball.vy = newVy;\n ball.x = newX;\n ball.y = newY;\n };\n\n const draw = (ctx: CanvasRenderingContext2D, ball: Ball) => {\n ctx.beginPath();\n ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);\n ctx.fillStyle = ball.color;\n ctx.fill();\n ctx.closePath();\n\n if (ball.text) {\n ctx.font = \"14px Arial\";\n ctx.fillStyle = \"#fff\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(ball.text, ball.x, ball.y);\n }\n };\n\n const handleMouseDown = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n const ball = ballsRef.current.find((b) => {\n const dx = b.x - mousePos.x;\n const dy = b.y - mousePos.y;\n return Math.sqrt(dx * dx + dy * dy) < b.radius;\n });\n\n if (ball) {\n ball.isDragging = true;\n setDraggedBall(ball);\n }\n };\n\n const handleMouseMove = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n setMousePos(mousePos);\n\n if (draggedBall) {\n draggedBall.x = mousePos.x;\n draggedBall.y = mousePos.y;\n draggedBall.vx = 0;\n draggedBall.vy = 0;\n }\n };\n\n const handleMouseUp = () => {\n if (draggedBall) {\n draggedBall.isDragging = false;\n setDraggedBall(null);\n }\n };\n\n const getMousePos = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n \n return {\n x: (event.clientX - rect.left) * scaleX,\n y: (event.clientY - rect.top) * scaleY\n };\n };\n\n return (\n <div style={{ width: '100%', height: '100%', position: 'relative', backgroundColor: '#f9fafb', borderRadius: '0.5rem' }}>\n <div ref={containerRef} style={{ width: '100%', height: '100%', position: 'absolute', top: 0, left: 0 }}>\n <canvas\n ref={canvasRef}\n style={{ \n width: '100%', \n height: '100%',\n display: 'block' // 确保canvas正确显示\n }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n />\n </div>\n <div className=\"absolute bottom-4 right-4 flex gap-2\">\n <button\n onClick={shake}\n className={clsx('px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 摇一摇\n </button>\n <button\n onClick={slowdown}\n className={clsx('px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 减速\n </button>\n </div>\n </div>\n );\n};\n\nexport default CollisionBalls;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { \n ChevronUp, \n ChevronDown, \n GripVertical, \n Save,\n RotateCcw,\n AlertCircle\n} from 'lucide-react';\nimport { cn } from '../utils';\n\nexport interface OrderableItem {\n id: number;\n [key: string]: any;\n}\n\nexport interface OrderManagerOperations<T extends OrderableItem> {\n loadItems: () => Promise<T[]>;\n moveItemUp: (id: number) => Promise<void>;\n moveItemDown: (id: number) => Promise<void>;\n updateItemOrder: (orders: { id: number; order: number }[]) => Promise<void>;\n}\n\nexport interface GenericOrderManagerProps<T extends OrderableItem> {\n operations: OrderManagerOperations<T>;\n renderItem: (item: T, index: number, isFirst: boolean, isLast: boolean) => React.ReactNode;\n className?: string;\n title?: string;\n description?: string;\n onOrderChanged?: () => void;\n emptyMessage?: string;\n loadingMessage?: string;\n}\n\nexport function GenericOrderManager<T extends OrderableItem>({\n operations,\n renderItem,\n className = '',\n title = '顺序管理',\n description = '拖拽或使用按钮调整显示顺序',\n onOrderChanged,\n emptyMessage = '暂无数据',\n loadingMessage = '加载数据...'\n}: GenericOrderManagerProps<T>) {\n const [items, setItems] = useState<T[]>([]);\n const [originalOrder, setOriginalOrder] = useState<T[]>([]);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasChanges, setHasChanges] = useState(false);\n const [draggedItem, setDraggedItem] = useState<number | null>(null);\n\n // 加载数据\n const loadItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n \n const data = await operations.loadItems();\n \n setItems(data);\n setOriginalOrder([...data]);\n setHasChanges(false);\n } catch (err) {\n console.error('❌ [通用排序] 加载数据错误:', err);\n setError(err instanceof Error ? err.message : '加载数据失败');\n } finally {\n setLoading(false);\n }\n }, [operations]);\n\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // 检查是否有变更\n useEffect(() => {\n const hasOrderChanged = items.some((item, index) => \n originalOrder[index]?.id !== item.id\n );\n setHasChanges(hasOrderChanged);\n }, [items, originalOrder]);\n\n // 上移项目\n const handleMoveUp = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === 0) {\n setError('项目已经在最前面,无法上移');\n return;\n }\n \n await operations.moveItemUp(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 上移项目错误:', err);\n setError(err instanceof Error ? err.message : '上移失败');\n }\n };\n\n // 下移项目\n const handleMoveDown = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === items.length - 1) {\n setError('项目已经在最后面,无法下移');\n return;\n }\n \n await operations.moveItemDown(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 下移项目错误:', err);\n setError(err instanceof Error ? err.message : '下移失败');\n }\n };\n\n // 拖拽开始\n const handleDragStart = (e: React.DragEvent, index: number) => {\n setDraggedItem(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n // 拖拽悬停\n const handleDragOver = (e: React.DragEvent, _index: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n // 拖拽放置\n const handleDrop = async (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n \n if (draggedItem === null || draggedItem === dropIndex) {\n setDraggedItem(null);\n return;\n }\n\n try {\n setError(null);\n \n const newItems = [...items];\n const draggedItemData = newItems[draggedItem];\n if (!draggedItemData) return;\n \n newItems.splice(draggedItem, 1);\n newItems.splice(dropIndex, 0, draggedItemData);\n \n const itemOrders = newItems.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n \n await operations.updateItemOrder(itemOrders);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 拖拽排序错误:', err);\n setError(err instanceof Error ? err.message : '排序失败');\n } finally {\n setDraggedItem(null);\n }\n };\n\n // 保存新顺序\n const handleSaveOrder = async () => {\n try {\n setSaving(true);\n setError(null);\n \n const itemOrders = items.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n\n await operations.updateItemOrder(itemOrders);\n \n setOriginalOrder([...items]);\n setHasChanges(false);\n onOrderChanged?.();\n } catch (err) {\n console.error('❌ [通用排序] 保存顺序错误:', err);\n setError(err instanceof Error ? err.message : '保存失败');\n await loadItems();\n } finally {\n setSaving(false);\n }\n };\n\n // 重置顺序\n const handleResetOrder = () => {\n setItems([...originalOrder]);\n };\n\n if (loading) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center p-12 text-gray-500\", className)}>\n <div className=\"w-6 h-6 border-2 border-gray-200 border-t-blue-500 rounded-full animate-spin mb-2\" />\n <span>{loadingMessage}</span>\n </div>\n );\n }\n\n return (\n <div className={cn(\"bg-white rounded-xl p-6 shadow-md border-2 border-gray-100\", className)}>\n <div className=\"flex items-center justify-between mb-4 pb-3 border-b border-gray-100 sm:flex-row flex-col sm:items-center items-start gap-4\">\n <h3 className=\"m-0 text-gray-900 text-lg font-semibold\">{title}</h3>\n <div className=\"flex gap-3 w-full sm:w-auto\">\n {hasChanges && (\n <>\n <button\n onClick={handleResetOrder}\n className=\"flex items-center gap-2 bg-amber-500 hover:bg-amber-600 text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"重置为原始顺序\"\n >\n <RotateCcw size={16} />\n 重置\n </button>\n <button\n onClick={handleSaveOrder}\n disabled={saving}\n className=\"flex items-center gap-2 bg-blue-500 hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"保存新顺序\"\n >\n <Save size={16} />\n {saving ? '保存中...' : '保存顺序'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"flex items-center gap-2 bg-red-50 text-red-600 p-3 rounded-lg mb-4 border border-red-200\">\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n <div className=\"bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6\">\n <p className=\"m-0 mb-2 color-slate-500 text-sm\">{description}</p>\n <ul className=\"m-0 pl-6 color-slate-500 text-sm list-disc\">\n <li className=\"mb-1\">使用拖拽:点击并拖动 <GripVertical size={14} className=\"inline-block align-middle text-gray-500\" /> 图标</li>\n <li className=\"mb-1\">使用按钮:点击 <ChevronUp size={14} className=\"inline-block align-middle text-gray-500\" /> 或 <ChevronDown size={14} className=\"inline-block align-middle text-gray-500\" /> 按钮</li>\n <li>完成调整后,点击\"保存顺序\"按钮保存更改</li>\n </ul>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {items.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"flex items-center gap-3 p-4 bg-gray-50 border-2 border-gray-200 rounded-lg transition-all hover:border-gray-300 hover:shadow-sm\",\n draggedItem === index && \"opacity-50 rotate-2 border-blue-500\"\n )}\n draggable\n onDragStart={(e) => handleDragStart(e, index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDrop={(e) => handleDrop(e, index)}\n >\n <div className=\"flex items-center cursor-grab active:cursor-grabbing text-gray-400 p-1 rounded hover:text-gray-500 hover:bg-gray-100 transition-colors\">\n <GripVertical size={20} />\n </div>\n \n <div className=\"flex-1 min-w-0\">\n {renderItem(item, index, index === 0, index === items.length - 1)}\n </div>\n\n <div className=\"flex items-center mx-3\">\n <span className=\"flex items-center justify-center w-8 h-8 bg-blue-500 text-white text-sm font-semibold rounded-full sm:w-8 sm:h-8 w-7 h-7 sm:text-sm text-xs\">\n #{index + 1}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-1 sm:flex-col flex-row\">\n <button\n onClick={() => handleMoveUp(item.id)}\n disabled={index === 0}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"上移\"\n >\n <ChevronUp size={18} />\n </button>\n <button\n onClick={() => handleMoveDown(item.id)}\n disabled={index === items.length - 1}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"下移\"\n >\n <ChevronDown size={18} />\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {items.length === 0 && (\n <div className=\"text-center p-12 text-gray-400 italic\">\n <p className=\"m-0\">{emptyMessage}</p>\n </div>\n )}\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { useRouter } from 'next/navigation';\nimport { cn } from '../utils';\n\nexport interface BackButtonProps {\n href?: string;\n className?: string;\n}\n\nexport const BackButton: React.FC<BackButtonProps> = ({ href, className = '' }) => {\n const router = useRouter();\n\n const handleClick = () => {\n if (href) {\n router.push(href);\n } else {\n router.back();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n className={cn(\n \"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors\",\n className\n )}\n >\n <svg\n className=\"w-5 h-5 mr-2\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n 返回\n </button>\n );\n};\n\nexport default BackButton;\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface FilterOption<T> {\n value: T;\n label: string;\n icon: string;\n activeColor: {\n bg: string;\n shadow: string;\n };\n count?: number;\n showCount?: boolean;\n}\n\nexport interface FilterButtonGroupProps<T> {\n label: string;\n value: T;\n options: FilterOption<T>[];\n onChange: (value: T) => void;\n className?: string;\n}\n\n// 辅助函数:将 Tailwind 背景色类名转换为实际颜色值\nfunction getColorValue(bgClass: string): string {\n const colorMap: Record<string, string> = {\n 'bg-blue-500': '#3b82f6',\n 'bg-green-500': '#10b981',\n 'bg-red-500': '#ef4444',\n 'bg-purple-500': '#8b5cf6',\n 'bg-slate-500': '#64748b',\n 'bg-emerald-500': '#10b981',\n 'bg-orange-500': '#f97316',\n };\n return colorMap[bgClass] || '#3b82f6'; // 默认蓝色\n}\n\nexport function FilterButtonGroup<T extends string>({ \n label, \n value, \n options, \n onChange,\n className\n}: FilterButtonGroupProps<T>) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n <h3 className=\"text-lg font-semibold text-gray-800\">\n {label}\n </h3>\n\n <div className=\"flex gap-3\">\n {options.map((option) => {\n const isActive = value === option.value;\n \n return (\n <button\n key={option.value}\n onClick={() => onChange(option.value)}\n style={isActive ? { backgroundColor: getColorValue(option.activeColor.bg) } : undefined}\n className={cn(\n \"flex-1 h-12 rounded-lg font-medium text-sm transition-all duration-200 ease-out focus:outline-none focus:ring-2 focus:ring-opacity-50 border\",\n isActive\n ? \"text-white border-transparent shadow-md focus:ring-white\"\n : \"bg-white text-gray-700 border-gray-200 shadow-sm hover:bg-gray-50 hover:border-gray-300 hover:shadow focus:ring-blue-300\"\n )}\n >\n <div className=\"flex items-center justify-center space-x-2\">\n <span className=\"text-lg\">{option.icon}</span>\n <span>{option.label}</span>\n {option.showCount && option.count !== undefined && (\n <span className={cn(\n \"text-xs font-semibold px-2 py-0.5 rounded-full min-w-[1.25rem] text-center\",\n isActive ? \"bg-white/20 text-white\" : \"bg-gray-100 text-gray-600\"\n )}>\n {option.count}\n </span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface SearchResultHintProps {\n searchQuery: string;\n resultCount: number;\n className?: string;\n}\n\nexport function SearchResultHint({ searchQuery, resultCount, className }: SearchResultHintProps) {\n if (!searchQuery) return null;\n\n return (\n <div className={cn(\"mb-6 p-4 bg-blue-50 border border-blue-200 rounded-lg\", className)}>\n <p className=\"text-sm text-blue-700\">\n 搜索 \"<span className=\"font-medium\">{searchQuery}</span>\" \n 找到 {resultCount} 个结果\n </p>\n </div>\n );\n}\n\nexport default SearchResultHint;\n\n","'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from './Dialog';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from './AlertDialog';\nimport { cn } from '@/utils';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n width?: number | string;\n height?: number | string;\n className?: string;\n maskClosable?: boolean;\n children: React.ReactNode;\n zIndex?: number;\n overlayClassName?: string;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n width,\n height,\n className,\n maskClosable = true,\n children,\n zIndex = 50,\n overlayClassName,\n}) => {\n const contentZIndex = Math.max(zIndex, 10000);\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => {\n if (!open) {\n if (maskClosable) {\n onClose();\n } else {\n // If maskClosable is false, we don't allow closing via backdrop/ESC\n }\n }\n }}>\n <DialogContent \n className={cn(\"sm:max-w-[425px]\", className)}\n overlayClassName={overlayClassName}\n onPointerDownOutside={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n onEscapeKeyDown={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n style={{\n zIndex: contentZIndex,\n ...(width ? { maxWidth: typeof width === 'number' ? `${width}px` : width } : undefined),\n ...(height ? { height: typeof height === 'number' ? `${height}px` : height } : undefined),\n }}\n >\n {title ? (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n ) : (\n // 无障碍性:始终需要 DialogTitle,使用 sr-only 对视觉隐藏但对屏幕阅读器可见\n <DialogTitle className=\"sr-only\">弹窗</DialogTitle>\n )}\n <div className=\"py-4\">\n {children}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport interface ConfirmModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title?: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = \"确认操作\",\n message,\n confirmText = \"确认\",\n cancelText = \"取消\",\n isLoading = false,\n}) => {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{message}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isLoading}>{cancelText}</AlertDialogCancel>\n <AlertDialogAction \n onClick={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n disabled={isLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isLoading ? \"处理中...\" : confirmText}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n","import React from 'react';\nimport { cn } from '../utils';\n\nexport interface ImageMappingItem {\n id: string;\n label: string;\n}\n\nexport type ImageMappingValue = Record<string, string>;\n\nexport interface ImageMappingPanelProps {\n title: string;\n items: ImageMappingItem[];\n value: ImageMappingValue;\n onChange: (next: ImageMappingValue) => void;\n className?: string;\n uploadLabel?: string;\n clearLabel?: string;\n}\n\nexport function ImageMappingPanel({\n title,\n items,\n value,\n onChange,\n className,\n uploadLabel = '上传图片',\n clearLabel = '清除',\n}: ImageMappingPanelProps) {\n const handleFileChange = (id: string, file?: File) => {\n if (!file) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const base64 = typeof reader.result === 'string' ? reader.result : '';\n if (!base64) {\n return;\n }\n onChange({\n ...value,\n [id]: base64,\n });\n };\n reader.readAsDataURL(file);\n };\n\n const handleRemove = (id: string) => {\n const next = { ...value };\n delete next[id];\n onChange(next);\n };\n\n return (\n <details className={cn('rounded-lg border border-slate-200 bg-white/80 p-3', className)}>\n <summary className=\"cursor-pointer text-sm font-semibold text-slate-700\">{title}</summary>\n <div className=\"mt-3 grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {items.map((item) => {\n const image = value[item.id];\n return (\n <div\n key={item.id}\n className=\"flex items-center gap-2 rounded-md border border-slate-200 bg-white p-2\"\n >\n <div className=\"w-16 text-xs font-semibold text-slate-600\">{item.label}</div>\n <label className=\"flex-1 cursor-pointer rounded-md bg-cyan-600 px-2 py-1 text-center text-xs font-medium text-white\">\n {uploadLabel}\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(event) => {\n handleFileChange(item.id, event.target.files?.[0]);\n event.currentTarget.value = '';\n }}\n />\n </label>\n {image ? (\n <>\n <img\n src={image}\n alt={item.label}\n className=\"h-8 w-8 rounded-full border border-slate-200 object-cover\"\n />\n <button\n type=\"button\"\n className=\"rounded-md border border-red-200 px-2 py-1 text-xs text-red-600\"\n onClick={() => handleRemove(item.id)}\n >\n {clearLabel}\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n </div>\n </details>\n );\n}\n\n","/**\n * 通用存储 Hook\n * 支持多平台:Web、React Native、小程序\n *\n * 优点:\n * 1. 异步读取,不阻塞渲染\n * 2. 统一的错误处理\n * 3. 类型安全\n * 4. 跨平台支持\n * 5. 自动同步(支持的平台)\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { StorageAdapter } from '../types';\n\nexport function useStorage<T>(\n storage: StorageAdapter,\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n const [value, setValue] = useState<T>(defaultValue);\n const [loading, setLoading] = useState(true);\n\n // 初始化时从存储读取\n useEffect(() => {\n const loadValue = async () => {\n try {\n const stored = await storage.getItem(key);\n if (stored !== null) {\n setValue(JSON.parse(stored));\n }\n } catch (error) {\n console.error('Error reading storage key \"' + (key) + '\":', error);\n } finally {\n setLoading(false);\n }\n };\n\n void loadValue();\n }, [storage, key]);\n\n // 更新值并同步到存储\n const updateValue = useCallback(\n async (newValue: T) => {\n try {\n setValue(newValue);\n await storage.setItem(key, JSON.stringify(newValue));\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, JSON.stringify(newValue));\n }\n } catch (error) {\n console.error('Error setting storage key \"' + (key) + '\":', error);\n }\n },\n [storage, key]\n );\n\n // 删除值\n const removeValue = useCallback(async () => {\n try {\n setValue(defaultValue);\n await storage.removeItem(key);\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, null);\n }\n } catch (error) {\n console.error('Error removing storage key \"' + (key) + '\":', error);\n }\n }, [storage, key, defaultValue]);\n\n // 监听存储变化\n useEffect(() => {\n if (!storage.addChangeListener) {\n return;\n }\n\n const cleanup = storage.addChangeListener((changedKey: string, newValue: string | null) => {\n if (changedKey === key) {\n try {\n if (newValue === null) {\n setValue(defaultValue);\n } else {\n setValue(JSON.parse(newValue));\n }\n } catch (error) {\n console.error('Error parsing storage change event:', error);\n }\n }\n });\n\n return cleanup;\n }, [storage, key, defaultValue]);\n\n return [value, updateValue, removeValue, loading];\n}\n\n","/**\n * Web 平台存储适配器 (localStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查是否在浏览器环境中\n */\nconst isBrowser = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class WebStorageAdapter implements StorageAdapter {\n async getItem(key: string): Promise<string | null> {\n // SSR 环境下返回 null\n if (!isBrowser) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[WebStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.error('[WebStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.error('[WebStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.clear();\n } catch (error) {\n console.error('[WebStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // SSR 环境下返回空函数\n if (!isBrowser) {\n return () => {};\n }\n\n // 监听 storage 事件(跨标签页)\n const handleStorageEvent = (e: StorageEvent) => {\n if (e.key) {\n callback(e.key, e.newValue);\n }\n };\n\n // 监听自定义事件(同标签页)\n const handleCustomEvent = (e: Event) => {\n const customEvent = e as CustomEvent;\n callback(customEvent.detail.key, customEvent.detail.value);\n };\n\n window.addEventListener('storage', handleStorageEvent);\n window.addEventListener('local-storage-change', handleCustomEvent);\n\n // 返回清理函数\n return () => {\n window.removeEventListener('storage', handleStorageEvent);\n window.removeEventListener('local-storage-change', handleCustomEvent);\n };\n }\n\n /**\n * 触发自定义事件,通知同标签页的其他组件\n */\n dispatchChange(key: string, value: string | null): void {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent('local-storage-change', {\n detail: { key, value },\n })\n );\n }\n}\n\n","/**\n * Web 平台 localStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { WebStorageAdapter } from '../adapters/web-adapter';\n\n// 创建单例适配器\nconst webStorage = new WebStorageAdapter();\n\n/**\n * Web 平台的 localStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useLocalStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(webStorage, key, defaultValue);\n}\n\n","import React from 'react';\nimport { useLocalStorage } from '../storage/hooks/useLocalStorage';\nimport {\n ImageMappingPanel,\n type ImageMappingItem,\n type ImageMappingPanelProps,\n type ImageMappingValue,\n} from './ImageMappingPanel';\n\nexport interface LocalImageMappingPanelProps\n extends Omit<ImageMappingPanelProps, 'value' | 'onChange'> {\n storageKey: string;\n defaultValue?: ImageMappingValue;\n onValueChange?: (next: ImageMappingValue) => void;\n}\n\nexport function LocalImageMappingPanel({\n storageKey,\n defaultValue = {},\n onValueChange,\n ...panelProps\n}: LocalImageMappingPanelProps) {\n const [value, setValue] = useLocalStorage<ImageMappingValue>(storageKey, defaultValue);\n\n return (\n <ImageMappingPanel\n {...panelProps}\n value={value}\n onChange={(next) => {\n setValue(next);\n onValueChange?.(next);\n }}\n />\n );\n}\n\nexport type { ImageMappingItem };\n\n","'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '@/components/Dialog';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/Avatar';\nimport { ProfileData, SocialLink } from './types';\nimport { cn } from '@/utils';\n\nconst themeStyles = {\n light: \"\",\n dark: \"bg-[#222] text-[#eee] border-[#444]\",\n blue: \"bg-[#f0f8ff] border-[#1890ff]/20\",\n};\n\nexport interface ProfileModalProps {\n isOpen: boolean;\n onClose: () => void;\n data: ProfileData;\n showAvatar?: boolean;\n showContacts?: boolean;\n showSocial?: boolean;\n showBio?: boolean;\n avatarSize?: number;\n onAvatarClick?: () => void;\n onSocialLinkClick?: (url: string, type: string) => void;\n onContactClick?: (type: string, value: string) => void;\n themeName?: 'light' | 'dark' | 'blue';\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const ProfileModal: React.FC<ProfileModalProps> = ({\n isOpen,\n onClose,\n data,\n showAvatar = true,\n showContacts = true,\n showSocial = true,\n showBio = true,\n avatarSize = 80,\n onAvatarClick,\n onSocialLinkClick,\n onContactClick,\n themeName = 'light',\n className,\n}) => {\n // 渲染社交媒体链接\n const renderSocialLinks = () => {\n if (!data.socialLinks || data.socialLinks.length === 0) return null;\n return (\n <div className=\"flex gap-3 mt-2\">\n {data.socialLinks.map((link: SocialLink, index: number) => (\n <a\n key={index}\n href={link.url}\n className={cn(\n \"w-8 h-8 flex items-center justify-center rounded-full no-underline transition-all hover:-translate-y-0.5\",\n themeName === 'dark' ? \"bg-gray-800 text-gray-200 hover:bg-gray-700\" : \"bg-gray-100 text-gray-800 hover:bg-gray-200\"\n )}\n title={link.type}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => {\n if (onSocialLinkClick) {\n e.preventDefault();\n onSocialLinkClick(link.url, link.type);\n }\n }}\n >\n {link.icon ? (\n <span className=\"text-base\">{link.icon}</span>\n ) : (\n <span className=\"text-[10px] font-semibold\">{link.type}</span>\n )}\n </a>\n ))}\n </div>\n );\n };\n\n // 渲染联系方式\n const renderContacts = () => {\n if (!data.contacts || Object.keys(data.contacts).length === 0) return null;\n return (\n <div className={cn(\n \"mt-4 border-t pt-4\",\n themeName === 'dark' ? \"border-gray-800\" : \"border-gray-100\"\n )}>\n {Object.entries(data.contacts).map(([type, value], index) => (\n <div \n key={index} \n className={cn(\n \"flex mb-2 cursor-pointer py-1.5 px-2 rounded transition-colors\",\n themeName === 'dark' ? \"hover:bg-gray-800\" : \"hover:bg-gray-50\"\n )}\n onClick={() => onContactClick && onContactClick(type, value)}\n >\n <span className={cn(\n \"font-medium w-[70px] shrink-0\",\n themeName === 'dark' ? \"text-gray-400\" : \"text-gray-500\"\n )}>{type}:</span>\n <span className={themeName === 'dark' ? \"text-gray-200\" : \"text-gray-800\"}>{value}</span>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open: boolean) => !open && onClose()}>\n <DialogContent className={cn(\n \"sm:max-w-[500px] p-0 overflow-hidden border-none shadow-2xl\",\n themeStyles[themeName as keyof typeof themeStyles] || \"\",\n className\n )}>\n <div className=\"p-6\">\n <div className=\"flex gap-5 mb-5\">\n {showAvatar && (\n <div \n className=\"shrink-0\"\n onClick={onAvatarClick}\n style={{ cursor: onAvatarClick ? 'pointer' : 'default' }}\n >\n <Avatar className=\"border-2 border-primary/10 shadow-sm\" style={{ width: avatarSize, height: avatarSize }}>\n {data.avatar && <AvatarImage src={data.avatar} alt={data.name} className=\"object-cover\" />}\n <AvatarFallback className=\"text-xl\">\n {data.name.substring(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </div>\n )}\n <div className=\"flex-1 min-w-0 flex flex-col justify-center\">\n <h2 className={cn(\n \"text-2xl font-bold m-0 mb-1\",\n themeName === 'dark' ? \"text-white\" : \"text-gray-900\"\n )}>{data.name}</h2>\n {data.title && <div className={cn(\n \"text-sm mb-2\",\n themeName === 'dark' ? \"text-gray-400\" : \"text-gray-500\"\n )}>{data.title}</div>}\n {showSocial && renderSocialLinks()}\n </div>\n </div>\n \n {showBio && data.bio && (\n <div className={cn(\n \"mb-5 leading-relaxed text-sm\",\n themeName === 'dark' ? \"text-gray-300\" : \"text-gray-600\"\n )}>\n <p>{data.bio}</p>\n </div>\n )}\n \n {showContacts && renderContacts()}\n \n {data.customContent && (\n <div className=\"mt-5\">\n {data.customContent}\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default ProfileModal;\n","import React from 'react';\nimport { Badge } from '@/components/Badge';\nimport { cn } from '@/utils';\nimport { BadgeType } from '../types';\n \ninterface BadgeListProps {\n badges: BadgeType[];\n className?: string;\n}\n\nexport const BadgeList: React.FC<BadgeListProps> = ({\n badges,\n className = '',\n}) => {\n if (!badges || badges.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 mt-4\", className)}>\n {badges.map((badge, index) => (\n <Badge \n key={index} \n variant={badge.type === 'default' ? 'default' : (badge.type as any)}\n >\n {badge.icon && <span className=\"mr-1\">{badge.icon}</span>}\n {badge.label}\n </Badge>\n ))}\n </div>\n );\n};\n","import { StatType } from '..';\nimport { cn } from '@/utils';\n\ninterface StatProps extends StatType {\n className?: string;\n}\n\nexport const Stat: React.FC<StatProps> = ({\n label,\n value,\n icon,\n className = '',\n}) => {\n return (\n <div className={cn(\"flex flex-col items-center flex-1 text-center\", className)}>\n {icon && <span className=\"mb-2 text-2xl text-gray-400\">{icon}</span>}\n <div>\n <div className=\"text-lg font-semibold text-gray-800\">{value}</div>\n <div className=\"text-xs text-gray-400 mt-1\">{label}</div>\n </div>\n </div>\n );\n};\n","import { StatType } from \"..\";\nimport { Stat } from \"./Stat\";\nimport { cn } from '@/utils';\n\ninterface StatListProps {\n stats: StatType[];\n className?: string;\n}\n\nexport const StatList: React.FC<StatListProps> = ({\n stats,\n className = '',\n}) => {\n if (!stats || stats.length === 0) return null;\n\n return (\n <div className={cn(\"flex justify-between mt-4 pt-4 border-t border-gray-100\", className)}>\n {stats.map((stat, index) => (\n <Stat key={index} {...stat} />\n ))}\n </div>\n );\n}; ","'use client';\n\nimport React, { useState } from 'react';\nimport ProfileModal from './ProfileModal';\nimport { ProfileData } from './types';\nimport { BadgeList } from './internal/BadgeList';\nimport { StatList } from './internal/StatList';\nimport { Button } from '@/components/Button';\n\n// 示例数据\nconst exampleProfileData: ProfileData = {\n name: '张三',\n avatar: 'https://randomuser.me/api/portraits/men/32.jpg',\n title: '高级前端工程师',\n bio: '专注于React和Next.js开发的前端工程师,有5年工作经验。热爱开源,喜欢分享技术经验。',\n contacts: {\n '邮箱': 'zhangsan@example.com',\n '电话': '138-8888-8888',\n '地址': '上海市浦东新区',\n },\n socialLinks: [\n { type: 'GitHub', url: 'https://github.com/zhangsan', icon: '★' },\n { type: 'Twitter', url: 'https://twitter.com/zhangsan', icon: '✦' },\n { type: 'LinkedIn', url: 'https://linkedin.com/in/zhangsan', icon: '✪' },\n ],\n badges: [\n { label: 'React', type: 'primary' },\n { label: 'Next.js', type: 'success' },\n { label: 'TypeScript', type: 'info' },\n { label: 'CSS', type: 'default' },\n ],\n stats: [\n { label: '项目', value: 42 },\n { label: '粉丝', value: 1024 },\n { label: '评分', value: '4.9' },\n ],\n customContent: (\n <div className=\"mt-5 border-t border-gray-100 pt-4\">\n <h3 className=\"text-sm font-semibold mb-2\">专业技能</h3>\n <p className=\"text-sm text-gray-600 leading-relaxed\">\n 精通React、Vue、Angular等前端框架,熟悉TypeScript、JavaScript、CSS3、HTML5等前端技术。\n 有丰富的大型项目开发经验,能独立负责前端架构设计。\n </p>\n </div>\n ),\n};\n\nexport interface ProfileButtonProps {\n data?: ProfileData;\n buttonText?: string;\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n className?: string;\n modalTheme?: 'light' | 'dark' | 'blue';\n}\n\n/**\n * 个人信息按钮组件,点击后显示个人信息弹窗\n */\nexport const ProfileButton: React.FC<ProfileButtonProps> = ({\n data = exampleProfileData,\n buttonText = '查看个人信息',\n variant = 'default',\n size = 'default',\n className = '',\n modalTheme = 'light',\n}) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const openModal = () => setIsModalOpen(true);\n const closeModal = () => setIsModalOpen(false);\n\n const handleContactClick = (type: string, value: string) => {\n if (type === '邮箱') {\n window.open('mailto:' + (value));\n } else if (type === '电话') {\n window.open('tel:' + (value));\n }\n };\n\n return (\n <>\n <Button \n variant={variant}\n size={size}\n onClick={openModal} \n className={className}\n >\n {buttonText}\n </Button>\n\n <ProfileModal\n isOpen={isModalOpen}\n onClose={closeModal}\n data={data}\n themeName={modalTheme}\n onContactClick={handleContactClick}\n onSocialLinkClick={(url) => window.open(url, '_blank')}\n >\n {data.customContent}\n {data.badges && <BadgeList badges={data.badges} />}\n {data.stats && <StatList stats={data.stats} />}\n </ProfileModal>\n </>\n );\n};\n\nexport default ProfileButton;\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport ProfileModal from './ProfileModal';\nimport { ProfileData } from './types';\nimport { BadgeList } from './internal/BadgeList';\nimport { StatList } from './internal/StatList';\n\nexport interface AutoOpenModalProps {\n data: ProfileData;\n delay?: number; // 延迟显示时间(毫秒)\n themeName?: 'light' | 'dark' | 'blue';\n onClose?: () => void;\n}\n\n/**\n * 自动打开个人信息弹窗组件\n * 页面加载后自动显示弹窗\n */\nexport const AutoOpenModal: React.FC<AutoOpenModalProps> = ({\n data,\n delay = 500, // 默认延迟500毫秒\n themeName = 'light',\n onClose,\n}) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n // 页面加载后自动显示弹窗\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsModalOpen(true);\n }, delay);\n\n return () => clearTimeout(timer);\n }, [delay]);\n\n const handleClose = () => {\n setIsModalOpen(false);\n if (onClose) {\n onClose();\n }\n };\n\n const handleContactClick = (type: string, value: string) => {\n if (type === '邮箱') {\n window.open('mailto:' + (value));\n } else if (type === '电话') {\n window.open('tel:' + (value));\n }\n };\n\n return (\n <ProfileModal\n isOpen={isModalOpen}\n onClose={handleClose}\n data={data}\n themeName={themeName}\n onContactClick={handleContactClick}\n onSocialLinkClick={(url) => window.open(url, '_blank')}\n >\n {data.badges && <BadgeList badges={data.badges} />}\n {data.stats && <StatList stats={data.stats} />}\n </ProfileModal>\n );\n};\n\nexport default AutoOpenModal;\n","'use client';\n\nimport React from 'react';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/Avatar';\nimport { cn } from '@/utils';\n\nexport interface EnhancedAvatarProps {\n src?: string;\n name?: string;\n size?: 'small' | 'medium' | 'large' | number;\n mood?: 'online' | 'offline' | 'away';\n statusText?: string;\n onClick?: () => void;\n className?: string;\n}\n\nconst sizeMap = {\n small: 'h-8 w-8',\n medium: 'h-12 w-12',\n large: 'h-16 w-16',\n};\n\nconst moodColors = {\n online: 'bg-green-500',\n offline: 'bg-gray-500',\n away: 'bg-yellow-500',\n};\n\nexport const EnhancedAvatar: React.FC<EnhancedAvatarProps> = ({\n src,\n name,\n size = 'medium',\n mood = 'online',\n statusText,\n onClick,\n className,\n}) => {\n const sizeClass = typeof size === 'string' ? sizeMap[size] : '';\n const customSizeStyle = typeof size === 'number' ? { width: size, height: size } : {};\n\n return (\n <div className={cn(\"relative inline-block\", className)} onClick={onClick}>\n <Avatar className={cn(sizeClass, onClick && \"cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all\")} style={customSizeStyle}>\n {src && <AvatarImage src={src} alt={name || \"Avatar\"} className=\"object-cover\" />}\n <AvatarFallback className=\"bg-primary/10 text-primary-foreground\">\n {name ? name.substring(0, 2).toUpperCase() : '??'}\n </AvatarFallback>\n </Avatar>\n \n {mood && (\n <div\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-2 border-white\",\n moodColors[mood],\n typeof size === 'number' ? (size > 60 ? 'h-4 w-4' : 'h-3 w-3') : (size === 'large' ? 'h-4 w-4' : 'h-3 w-3')\n )}\n />\n )}\n \n {statusText && (\n <div className=\"absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap\">\n <span className=\"text-xs text-muted-foreground\">{statusText}</span>\n </div>\n )}\n </div>\n );\n};\n\nexport default EnhancedAvatar;\n","'use client';\n\nimport React from \"react\";\n\nimport { CollisionBalls, Timeline } from \"@/components\";\nimport type { TimelineConfig, CollisionBallsConfig } from \"@/components\";\n\ninterface AboutProps {\n timelineConfig: TimelineConfig;\n collisionBallsConfig: CollisionBallsConfig;\n}\n\nconst About: React.FC<AboutProps> = ({\n timelineConfig,\n collisionBallsConfig,\n}) => {\n return (\n <section id=\"about\" className=\"py-16 bg-white\">\n <div className=\"container mx-auto px-4\">\n <h2 className=\"text-3xl font-bold text-center mb-12\">关于我</h2>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-12\">\n <div className=\"bg-white rounded-lg shadow-lg p-6\">\n <h3 className=\"text-2xl font-semibold mb-6\">个人经历</h3>\n <Timeline items={timelineConfig.items} />\n </div>\n <div className=\"bg-white rounded-lg shadow-lg p-6\">\n <h3 className=\"text-2xl font-semibold mb-6\">技能展示</h3>\n <div style={{ height: '400px', position: 'relative' }}>\n <CollisionBalls collisionBallsConfig={collisionBallsConfig} />\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default About;\n","'use client';\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\n\ninterface FormData {\n name: string;\n email: string;\n message: string;\n}\n\nconst Contact: React.FC = () => {\n const [formData, setFormData] = useState<FormData>({\n name: '',\n email: '',\n message: ''\n });\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n setSubmitStatus('idle');\n\n try {\n // 这里添加你的表单提交逻辑\n await new Promise(resolve => setTimeout(resolve, 1000)); // 模拟API调用\n setSubmitStatus('success');\n setFormData({ name: '', email: '', message: '' });\n } catch (error) {\n setSubmitStatus('error');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <section id=\"contact\" className=\"py-16 bg-gray-50\">\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl font-bold text-gray-900 sm:text-4xl\">\n 联系我\n </h2>\n <p className=\"mt-4 text-lg text-gray-600\">\n 有任何问题或建议?请随时联系我\n </p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-xl p-6 sm:p-8\">\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div>\n <label htmlFor=\"name\" className=\"block text-sm font-medium text-gray-700\">\n 姓名\n </label>\n <input\n type=\"text\"\n name=\"name\"\n id=\"name\"\n value={formData.name}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的姓名\"\n />\n </div>\n\n <div>\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700\">\n 邮箱\n </label>\n <input\n type=\"email\"\n name=\"email\"\n id=\"email\"\n value={formData.email}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的邮箱\"\n />\n </div>\n\n <div>\n <label htmlFor=\"message\" className=\"block text-sm font-medium text-gray-700\">\n 消息\n </label>\n <textarea\n name=\"message\"\n id=\"message\"\n rows={4}\n value={formData.message}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的消息\"\n />\n </div>\n\n <div className=\"flex items-center justify-end\">\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className={clsx('inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white', isSubmitting \n ? 'bg-blue-400 cursor-not-allowed' \n : 'bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500')}\n >\n {isSubmitting ? '发送中...' : '发送消息'}\n </button>\n </div>\n\n {submitStatus === 'success' && (\n <div className=\"rounded-md bg-green-50 p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-green-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"ml-3\">\n <p className=\"text-sm font-medium text-green-800\">\n 消息已成功发送!\n </p>\n </div>\n </div>\n </div>\n )}\n\n {submitStatus === 'error' && (\n <div className=\"rounded-md bg-red-50 p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"ml-3\">\n <p className=\"text-sm font-medium text-red-800\">\n 发送失败,请稍后重试\n </p>\n </div>\n </div>\n </div>\n )}\n </form>\n </div>\n\n {/* 联系方式 */}\n <div className=\"mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">邮箱</h3>\n <p className=\"mt-2 text-gray-600\">your.email@example.com</p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">电话</h3>\n <p className=\"mt-2 text-gray-600\">+86 123 4567 8900</p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">地址</h3>\n <p className=\"mt-2 text-gray-600\">中国,北京</p>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Contact; ","'use client';\n\nimport React, { useEffect, useState } from \"react\";\nimport { cn } from '@/utils';\n\nexport interface HomeConfig {\n title: string;\n subtitle: string;\n buttons: Array<{\n text: string;\n link: string;\n }>;\n imageSrc: string;\n}\n\ninterface HomeProps {\n homeConfig: HomeConfig;\n className?: string;\n}\n\nexport const Home: React.FC<HomeProps> = ({ homeConfig, className }) => {\n const { title, subtitle, buttons, imageSrc } = homeConfig;\n const [displayText, setDisplayText] = useState(\"\");\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n if (currentIndex < title.length) {\n const timer = setTimeout(() => {\n setDisplayText((prev) => prev + title[currentIndex]);\n setCurrentIndex((prev) => prev + 1);\n }, 150);\n\n return () => clearTimeout(timer);\n }\n return () => {\n setDisplayText(\"\");\n setCurrentIndex(0);\n };\n }, [currentIndex, title]);\n\n return (\n <section \n id=\"home\" \n className={cn(\"min-h-screen flex items-center justify-center py-16 bg-gradient-to-b from-white to-gray-50\", className)}\n >\n <div className=\"container mx-auto px-4\">\n <div className=\"flex flex-col md:flex-row items-center gap-12\">\n <div className=\"flex-1 text-center md:text-left\">\n <h1 className=\"text-4xl md:text-6xl font-bold mb-6 text-gray-900\">\n <span className=\"inline-block\">{displayText}</span>\n <span className=\"animate-pulse ml-1 text-blue-500\">|</span>\n </h1>\n <p className=\"text-xl md:text-2xl text-gray-600 mb-8\">{subtitle}</p>\n <div className=\"flex flex-wrap gap-4 justify-center md:justify-start\">\n {buttons.map((button) => (\n <a\n key={button.link}\n href={button.link}\n className=\"px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-300 shadow-md hover:shadow-lg font-medium\"\n >\n {button.text}\n </a>\n ))}\n </div>\n </div>\n <div className=\"flex-1\">\n <div className=\"relative group\">\n <div className=\"absolute -inset-1 bg-gradient-to-r from-blue-600 to-purple-600 rounded-lg blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200\"></div>\n <img\n src={imageSrc}\n alt=\"Profile\"\n className=\"relative w-full max-w-md mx-auto rounded-lg shadow-xl transform hover:scale-[1.02] transition-transform duration-300 bg-white\"\n />\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Home;\n\n","'use client';\n\nimport React from 'react';\nimport Link from 'next/link';\nimport { cn } from '@/utils';\n\nexport interface ExperimentCardProps {\n href: string;\n title: string;\n description: string;\n tags: string[];\n category: 'utility' | 'leisure';\n isCompleted?: boolean;\n updatedAt?: string;\n createdAt?: string;\n className?: string;\n}\n\nexport const ExperimentCard: React.FC<ExperimentCardProps> = ({ \n href, \n title, \n description, \n tags, \n category, \n isCompleted,\n updatedAt,\n createdAt,\n className\n}) => {\n // 格式化日期显示\n const formatDate = (dateString?: string) => {\n if (!dateString) return '';\n \n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n });\n } catch (e) {\n return dateString;\n }\n };\n \n return (\n <Link href={href} className={cn(\"block group\", className)}>\n <div className=\"w-full h-full bg-white rounded-2xl overflow-hidden shadow-md hover:shadow-2xl transition-all duration-300 transform group-hover:-translate-y-1 border border-gray-100 hover:border-gray-200\">\n <div className=\"p-6\">\n <div className=\"flex items-start justify-between mb-4\">\n <h3 className=\"text-xl font-semibold text-gray-900 flex-1 pr-4 leading-tight\">\n {title}\n </h3>\n <div className=\"flex flex-col gap-2 flex-shrink-0\">\n <span className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm\",\n category === 'utility' \n ? 'bg-gradient-to-r from-green-50 to-green-100 text-green-700 border border-green-200' \n : 'bg-gradient-to-r from-purple-50 to-purple-100 text-purple-700 border border-purple-200'\n )}>\n {category === 'utility' ? '🔧 实用工具' : '🎮 休闲娱乐'}\n </span>\n <span className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm border\",\n isCompleted \n ? 'bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 border border-emerald-200' \n : 'bg-gradient-to-r from-orange-50 to-orange-100 text-orange-700 border border-orange-200'\n )}>\n {isCompleted ? '✅ 已完成' : '🚧 进行中'}\n </span>\n </div>\n </div>\n <p className=\"text-gray-600 mb-4\">{description}</p>\n \n {/* 显示更新时间 */}\n {updatedAt && (\n <div className=\"flex items-center gap-1 mb-3 text-xs text-gray-500\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>更新于: {formatDate(updatedAt)}</span>\n {createdAt && createdAt !== updatedAt && (\n <span className=\"ml-2 text-gray-400\">创建于: {formatDate(createdAt)}</span>\n )}\n </div>\n )}\n \n <div className=\"flex flex-wrap gap-2\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"px-3 py-1.5 text-xs font-medium bg-gradient-to-r from-gray-50 to-gray-100 text-gray-700 rounded-full border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200\"\n >\n #{tag}\n </span>\n ))}\n </div>\n </div>\n </div>\n </Link>\n );\n};\n\nexport default ExperimentCard;\n\n","'use client';\n\nimport React, { useState } from 'react';\nimport { ExperimentCard } from './ExperimentCard';\nimport { cn } from '@/utils';\n\n// Project相关的类型定义\nexport interface Project {\n id: string;\n title: string;\n description: string;\n image: string;\n link?: string;\n tags: string[];\n}\n\nexport interface ProjectsConfig {\n projects: Project[];\n}\n\ninterface ProjectCarouselProps {\n projects: Project[];\n className?: string;\n}\n\nexport const ProjectCarousel: React.FC<ProjectCarouselProps> = ({ projects, className }) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const nextSlide = () => {\n setCurrentIndex((prevIndex) =>\n prevIndex === projects.length - 1 ? 0 : prevIndex + 1\n );\n };\n\n const prevSlide = () => {\n setCurrentIndex((prevIndex) =>\n prevIndex === 0 ? projects.length - 1 : prevIndex - 1\n );\n };\n\n return (\n <section id=\"projects\" className={cn(\"py-16 bg-gray-50\", className)}>\n <div className=\"container mx-auto px-4\">\n <h2 className=\"text-3xl font-bold text-center mb-12 text-gray-900\">项目展示</h2>\n \n <div className=\"relative max-w-4xl mx-auto\">\n {/* 项目卡片 */}\n <div className=\"relative h-[400px] overflow-hidden rounded-lg shadow-xl\">\n {projects.map((project, index) => (\n <div\n key={project.id}\n className={cn(\n \"absolute w-full h-full transition-all duration-500 transform\",\n index === currentIndex\n ? \"translate-x-0 opacity-100\"\n : index < currentIndex\n ? \"-translate-x-full opacity-0\"\n : \"translate-x-full opacity-0\"\n )}\n >\n <ExperimentCard\n href={project.link || '#'}\n title={project.title}\n description={project.description}\n tags={project.tags}\n category=\"utility\"\n />\n </div>\n ))}\n </div>\n\n {/* 导航按钮 */}\n <button\n onClick={prevSlide}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]\"\n >\n <svg\n className=\"w-6 h-6 text-gray-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n\n <button\n onClick={nextSlide}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]\"\n >\n <svg\n className=\"w-6 h-6 text-gray-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n\n {/* 指示器 */}\n <div className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2 z-[10]\">\n {projects.map((_, index) => (\n <button\n key={index}\n onClick={() => setCurrentIndex(index)}\n className={cn(\n \"w-2 h-2 rounded-full transition-all duration-300\",\n index === currentIndex ? \"bg-blue-500 w-4\" : \"bg-gray-300\"\n )}\n />\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default ProjectCarousel;\n\n"," 'use client';\n\nimport React from 'react';\nimport { NavigationItem, NavigationDirection } from './types';\nimport { clsx } from 'clsx';\n\ninterface NavigationItemProps {\n item: NavigationItem;\n direction: NavigationDirection;\n isActive?: boolean;\n onClick: (item: NavigationItem) => void;\n}\n\nconst NavigationItemComponent: React.FC<NavigationItemProps> = ({\n item,\n direction,\n isActive,\n onClick\n}) => {\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onClick(item);\n };\n\n const getItemClasses = () => {\n const baseClasses = `\n group relative flex items-center gap-3\n transition-all duration-300 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50\n rounded-lg\n `;\n\n const directionClasses = direction === 'vertical'\n ? 'px-4 py-3 w-full justify-start'\n : 'px-3 py-2 justify-center';\n\n const stateClasses = isActive\n ? 'bg-blue-500 text-white shadow-lg'\n : item.isExternal\n ? 'text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200'\n : 'text-gray-700 hover:bg-blue-50 hover:text-blue-600';\n\n return (baseClasses) + ' ' + (directionClasses) + ' ' + (stateClasses);\n };\n\n return (\n <a\n href={item.href}\n onClick={handleClick}\n target={item.target}\n rel={item.isExternal ? 'noopener noreferrer' : undefined}\n className={getItemClasses()}\n >\n {/* 图标 */}\n {item.icon && (\n <span className=\"flex-shrink-0\">\n {item.icon}\n </span>\n )}\n\n {/* 标签 */}\n <span className={clsx('font-medium', direction === 'vertical' ? 'text-sm' : 'text-xs')}>\n {item.label}\n </span>\n\n {/* 外链图标 */}\n {item.isExternal && (\n <svg\n className=\"w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n )}\n\n {/* 活动状态指示器 */}\n {direction === 'vertical' && isActive && (\n <div className=\"absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full\" />\n )}\n </a>\n );\n};\n\nexport default NavigationItemComponent;"," 'use client';\n\nimport React from 'react';\nimport NavigationItem from './NavigationItem';\nimport { NavigationProps } from './types';\nimport { clsx } from 'clsx';\n\nconst Navigation: React.FC<NavigationProps> = ({\n config,\n isOpen,\n activeItemId,\n onItemClick,\n className = ''\n}) => {\n const { direction, position, items, avatar, logo } = config;\n\n // 获取导航栏位置和尺寸样式\n const getContainerClasses = () => {\n const baseClasses = `\n fixed z-[90]\n bg-white/95 backdrop-blur-lg\n border border-gray-200/50\n shadow-2xl\n transition-all duration-500 ease-in-out\n `;\n\n // 根据方向和位置确定样式\n if (direction === 'vertical') {\n const verticalClasses = 'h-screen w-64 flex flex-col';\n const positionClasses = position === 'left' \n ? 'left-0 top-0 ' + (isOpen ? 'translate-x-0' : '-translate-x-full')\n : 'right-0 top-0 ' + (isOpen ? 'translate-x-0' : 'translate-x-full');\n \n return (baseClasses) + ' ' + (verticalClasses) + ' ' + (positionClasses);\n } else {\n const horizontalClasses = 'w-full h-16 flex items-center';\n const positionClasses = position === 'top'\n ? 'top-0 left-0 right-0 ' + (isOpen ? 'translate-y-0' : '-translate-y-full')\n : 'bottom-0 left-0 right-0 ' + (isOpen ? 'translate-y-0' : 'translate-y-full');\n \n return (baseClasses) + ' ' + (horizontalClasses) + ' ' + (positionClasses);\n }\n };\n\n // 获取内容布局样式\n const getContentClasses = () => {\n if (direction === 'vertical') {\n return 'flex flex-col h-full p-4';\n } else {\n return 'flex items-center justify-between w-full px-6';\n }\n };\n\n // 获取导航项列表样式\n const getItemsListClasses = () => {\n if (direction === 'vertical') {\n return 'flex flex-col gap-2 flex-1 overflow-y-auto mt-4';\n } else {\n return 'flex items-center gap-4';\n }\n };\n\n const handleItemClick = (item: any) => {\n // 处理页面跳转\n if (item.isExternal) {\n // 外链跳转\n window.open(item.href, item.target || '_blank');\n } else if (item.href.startsWith('#')) {\n // 锚点跳转\n const element = document.getElementById(item.id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n }\n } else {\n // 内部页面跳转\n window.location.href = item.href;\n }\n\n // 触发回调\n onItemClick?.(item);\n };\n\n if (!isOpen) return null;\n\n return (\n <nav className={clsx(getContainerClasses(), className)}>\n <div className={getContentClasses()}>\n {/* Logo 区域 */}\n {logo && (\n <div className=\"flex items-center justify-center mb-4\">\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className=\"h-8 w-auto\"\n />\n </div>\n )}\n\n {/* 顶部空间占位(为切换按钮预留) */}\n {direction === 'vertical' && (\n <div className=\"h-12 flex-shrink-0\" />\n )}\n\n {/* 导航项列表 */}\n <div className={getItemsListClasses()}>\n {items.map((item) => (\n <NavigationItem\n key={item.id}\n item={item}\n direction={direction}\n isActive={activeItemId === item.id}\n onClick={handleItemClick}\n />\n ))}\n </div>\n\n {/* 头像区域 */}\n {avatar && direction === 'vertical' && (\n <div className=\"flex items-center justify-center mt-auto pt-4\">\n <img\n src={avatar.src}\n alt={avatar.alt || 'Avatar'}\n className=\"w-10 h-10 rounded-full border-2 border-gray-200\"\n />\n </div>\n )}\n\n {/* 水平布局的头像 */}\n {avatar && direction === 'horizontal' && (\n <div className=\"flex items-center\">\n <img\n src={avatar.src}\n alt={avatar.alt || 'Avatar'}\n className=\"w-8 h-8 rounded-full border-2 border-gray-200\"\n />\n </div>\n )}\n </div>\n </nav>\n );\n};\n\nexport default Navigation;"," 'use client';\n\nimport React from 'react';\nimport { NavigationPosition } from './types';\nimport { clsx } from 'clsx';\n\ninterface NavigationToggleProps {\n isOpen: boolean;\n onClick: () => void;\n position: NavigationPosition;\n}\n\nconst NavigationToggle: React.FC<NavigationToggleProps> = ({\n isOpen,\n onClick,\n position\n}) => {\n const getPositionClasses = () => {\n switch (position) {\n case 'top':\n return 'top-4 left-4';\n case 'bottom':\n return 'bottom-4 left-4';\n case 'left':\n return 'top-4 left-4';\n case 'right':\n return 'top-4 right-4';\n default:\n return 'top-4 left-4';\n }\n };\n\n return (\n <button\n onClick={onClick}\n className={clsx(\n 'fixed',\n getPositionClasses(),\n 'z-[100] p-3 rounded-xl bg-white/90 backdrop-blur-md shadow-lg hover:shadow-xl border border-gray-200/50 transition-all duration-300 ease-in-out hover:scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50'\n )}\n aria-label={isOpen ? '关闭导航栏' : '打开导航栏'}\n >\n <div className=\"w-5 h-5 flex flex-col justify-center items-center\">\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out',\n isOpen ? 'rotate-45 translate-y-0.5' : ''\n )}\n />\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1',\n isOpen ? 'opacity-0 scale-0' : 'opacity-100 scale-100'\n )}\n />\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1',\n isOpen ? '-rotate-45 -translate-y-2.5' : ''\n )}\n />\n </div>\n </button>\n );\n};\n\nexport default NavigationToggle;","'use client';\n\nimport React, { useState, useRef, useEffect, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { clsx } from 'clsx';\n\nexport interface FloatingMenuProps {\n /**\n * 触发按钮的内容\n */\n trigger: ReactNode;\n \n /**\n * 菜单内容\n */\n menu: ReactNode;\n \n /**\n * 初始位置\n */\n initialPosition?: { x: number; y: number };\n \n /**\n * 是否默认打开菜单\n */\n defaultOpen?: boolean;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 菜单类名\n */\n menuClassName?: string;\n \n /**\n * 触发器类名\n */\n triggerClassName?: string;\n \n /**\n * z-index\n */\n zIndex?: number;\n}\n\nconst FloatingMenu: React.FC<FloatingMenuProps> = ({\n trigger,\n menu,\n initialPosition = { x: 20, y: 20 },\n defaultOpen = false,\n className = '',\n menuClassName = '',\n triggerClassName = '',\n zIndex = 1000,\n}) => {\n const [position, setPosition] = useState(initialPosition);\n const [isMenuOpen, setIsMenuOpen] = useState(defaultOpen);\n const [menuDirection, setMenuDirection] = useState<'left' | 'right'>('right');\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n // 添加一个标志,用于跟踪是否发生了拖动\n const [hasDragged, setHasDragged] = useState(false);\n // 添加一个计时器引用,用于区分点击和拖动\n const dragTimerRef = useRef<number | null>(null);\n // 添加一个引用,记录鼠标按下的初始位置\n const mouseDownPosRef = useRef<{ x: number, y: number } | null>(null);\n\n // 客户端挂载检查\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n // 计算菜单方向\n useEffect(() => {\n if (!mounted || !containerRef.current) return;\n \n const updateMenuDirection = () => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n \n const windowWidth = window.innerWidth;\n const middlePoint = windowWidth / 2;\n \n // 如果悬浮窗在屏幕左半部分,菜单向右展开;否则向左展开\n setMenuDirection(rect.left < middlePoint ? 'right' : 'left');\n };\n \n updateMenuDirection();\n \n // 监听窗口大小变化和滚动事件\n window.addEventListener('resize', updateMenuDirection);\n window.addEventListener('scroll', updateMenuDirection);\n \n return () => {\n window.removeEventListener('resize', updateMenuDirection);\n window.removeEventListener('scroll', updateMenuDirection);\n };\n }, [mounted]);\n\n // 处理拖动开始\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!containerRef.current) return;\n \n // 防止触发菜单点击\n e.stopPropagation();\n \n // 记录鼠标按下的初始位置\n mouseDownPosRef.current = { x: e.clientX, y: e.clientY };\n \n const rect = containerRef.current.getBoundingClientRect();\n setDragOffset({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n });\n \n // 重置拖动标志\n setHasDragged(false);\n \n // 设置拖动状态\n setIsDragging(true);\n };\n\n // 处理拖动过程\n useEffect(() => {\n if (!isDragging) return;\n \n const handleMouseMove = (e: MouseEvent) => {\n // 检查是否移动了足够的距离来认为是拖动\n if (mouseDownPosRef.current) {\n const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);\n const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);\n \n // 如果移动距离超过阈值,标记为拖动\n if (dx > 3 || dy > 3) {\n setHasDragged(true);\n }\n }\n \n // 计算新位置并应用边界检查\n const newX = e.clientX - dragOffset.x;\n const newY = e.clientY - dragOffset.y;\n \n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n \n setPosition({\n x: Math.min(Math.max(newX, 0), windowWidth - 50),\n y: Math.min(Math.max(newY, 0), windowHeight - 50)\n });\n };\n \n const handleMouseUp = () => {\n setIsDragging(false);\n \n // 重置鼠标按下位置\n mouseDownPosRef.current = null;\n \n // 设置一个短暂的延时,防止拖动后立即触发点击\n if (dragTimerRef.current) {\n window.clearTimeout(dragTimerRef.current);\n }\n \n dragTimerRef.current = window.setTimeout(() => {\n setHasDragged(false);\n }, 300); // 300ms 后重置拖动状态\n };\n \n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n \n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, dragOffset]);\n\n // 清理定时器\n useEffect(() => {\n return () => {\n if (dragTimerRef.current) {\n window.clearTimeout(dragTimerRef.current);\n }\n };\n }, []);\n\n // 切换菜单开关\n const toggleMenu = (e: React.MouseEvent) => {\n e.stopPropagation();\n \n // 如果刚刚拖动过,不触发菜单切换\n if (hasDragged) {\n return;\n }\n \n setIsMenuOpen(!isMenuOpen);\n };\n\n // 关闭菜单的点击外部处理\n useEffect(() => {\n if (!isMenuOpen) return;\n \n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsMenuOpen(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen]);\n\n // 窗口大小变化时的边界检查\n useEffect(() => {\n if (!mounted) return;\n \n const checkBoundaries = () => {\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n \n // 确保悬浮窗不会被拖出屏幕\n setPosition(prev => {\n const newX = Math.min(Math.max(prev.x, 0), windowWidth - 50);\n const newY = Math.min(Math.max(prev.y, 0), windowHeight - 50);\n \n // 只有在实际需要调整时才更新位置\n if (newX !== prev.x || newY !== prev.y) {\n return { x: newX, y: newY };\n }\n return prev;\n });\n };\n \n // 只在窗口大小变化时检查边界\n window.addEventListener('resize', checkBoundaries);\n \n return () => {\n window.removeEventListener('resize', checkBoundaries);\n };\n }, [mounted]);\n\n if (!mounted) return null;\n\n return createPortal(\n <div\n ref={containerRef}\n className={clsx('fixed select-none box-border', className)}\n style={{\n left: (position.x) + 'px',\n top: (position.y) + 'px',\n zIndex,\n }}\n >\n {/* 触发器按钮 */}\n <div \n className={clsx(\n 'flex items-center justify-center w-12 h-12 md:w-12 md:h-12 bg-white rounded-full shadow-md hover:shadow-lg cursor-grab active:cursor-grabbing transition-all duration-200 hover:scale-105 active:scale-95',\n triggerClassName\n )}\n onMouseDown={handleMouseDown}\n onClick={toggleMenu}\n >\n {trigger}\n </div>\n \n {/* 菜单内容 */}\n {isMenuOpen && (\n <div \n className={clsx(\n 'absolute top-0 bg-white rounded-lg shadow-xl p-3 min-w-[200px] md:min-w-[200px] max-w-[300px] z-[1000] transition-all duration-200',\n isMenuOpen ? 'opacity-100 scale-100' : 'opacity-0 scale-95',\n menuDirection === 'left' ? 'right-[calc(100%+10px)]' : 'left-[calc(100%+10px)]',\n menuClassName\n )}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onMouseUp={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n onTouchMove={(e) => e.stopPropagation()}\n onTouchEnd={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n {menu}\n </div>\n )}\n </div>,\n document.body\n );\n};\n\nexport default FloatingMenu;","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport FloatingMenu from './FloatingMenu';\n\nexport const FloatingMenuExample: React.FC = () => {\n const [windowWidth, setWindowWidth] = useState(0);\n \n useEffect(() => {\n setWindowWidth(window.innerWidth);\n const handleResize = () => setWindowWidth(window.innerWidth);\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const menuItems = [\n { id: 1, label: '首页', icon: '🏠' },\n { id: 2, label: '设置', icon: '⚙️' },\n { id: 3, label: '消息', icon: '📩' },\n { id: 4, label: '帮助', icon: '❓' },\n { id: 5, label: '退出', icon: '🚪' },\n ];\n \n const handleMenuItemClick = (id: number) => {\n console.log('点击了菜单项: ' + (id));\n };\n \n return (\n <div className=\"w-full h-screen bg-gray-100 relative p-8\">\n <div className=\"max-w-2xl mx-auto bg-white rounded-2xl shadow-sm p-8 mt-12\">\n <h1 className=\"text-3xl font-bold mb-4 text-gray-900\">悬浮菜单示例</h1>\n <p className=\"text-gray-600 leading-relaxed mb-6\">\n 这是一个可拖拽的悬浮菜单组件示例。你可以尝试拖动下方的 <span className=\"font-bold text-blue-600\">蓝色按钮</span> 到处移动。\n </p>\n <div className=\"bg-blue-50 border-l-4 border-blue-500 p-4 mb-6\">\n <p className=\"text-sm text-blue-700\">\n <strong>智能定位:</strong> 菜单会根据按钮在屏幕上的位置自动调整弹出方向(向左或向右)。\n </p>\n </div>\n </div>\n \n <FloatingMenu\n trigger={\n <div className=\"w-12 h-12 bg-blue-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer\">\n <span className=\"text-xl\">➕</span>\n </div>\n }\n menu={\n <div className=\"w-48 bg-white rounded-xl shadow-xl border border-gray-100 overflow-hidden\">\n <div className=\"px-4 py-3 border-b border-gray-100\">\n <h3 className=\"text-sm font-bold text-gray-900\">快捷菜单</h3>\n </div>\n <ul className=\"py-1\">\n {menuItems.map(item => (\n <li \n key={item.id} \n className=\"flex items-center gap-3 px-4 py-2.5 hover:bg-blue-50 text-gray-700 hover:text-blue-600 cursor-pointer transition-colors text-sm\"\n onClick={() => handleMenuItemClick(item.id)}\n >\n <span className=\"text-lg\">{item.icon}</span>\n <span className=\"font-medium\">{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n }\n initialPosition={{ x: 100, y: 100 }}\n />\n \n {windowWidth > 0 && (\n <FloatingMenu\n trigger={\n <div className=\"w-12 h-12 bg-purple-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer\">\n <span className=\"text-xl\">🔍</span>\n </div>\n }\n menu={\n <div className=\"w-64 bg-white rounded-xl shadow-xl border border-gray-100 p-4\">\n <h3 className=\"text-sm font-bold text-gray-900 mb-3\">快速搜索</h3>\n <div className=\"space-y-3\">\n <input \n type=\"text\" \n placeholder=\"输入关键字...\" \n className=\"w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent outline-none\"\n />\n <button className=\"w-full bg-purple-600 text-white py-2 rounded-lg text-sm font-medium hover:bg-purple-700 transition-colors\">\n 搜索\n </button>\n </div>\n </div>\n }\n initialPosition={{ x: windowWidth - 100, y: 100 }}\n />\n )}\n </div>\n );\n};\n\nexport default FloatingMenuExample;\n\n","/**\n * 实验田模块工具函数\n */\n\nimport type { ExperimentItem, ViewMode, TestFieldConfig, CompletionFilter } from '../types';\n\n/**\n * 过滤实验项目\n */\nexport function filterExperiments(\n experiments: ExperimentItem[],\n config: Partial<TestFieldConfig>\n): ExperimentItem[] {\n const {\n viewMode = 'all',\n searchQuery = '',\n completionFilter = 'all'\n } = config;\n\n return experiments.filter(experiment => {\n // 类别过滤\n const matchesViewMode = viewMode === 'all' || experiment.category === viewMode;\n \n // 搜索过滤\n const query = searchQuery.toLowerCase();\n const matchesSearch = !query || \n experiment.title.toLowerCase().includes(query) ||\n experiment.description.toLowerCase().includes(query) ||\n experiment.tags.some(tag => tag.toLowerCase().includes(query));\n \n // 完成状态过滤\n const matchesCompletion = (() => {\n switch (completionFilter) {\n case 'completed':\n return experiment.isCompleted === true;\n case 'incomplete':\n return experiment.isCompleted !== true;\n case 'all':\n default:\n return true;\n }\n })();\n \n return matchesViewMode && matchesSearch && matchesCompletion;\n });\n}\n\n/**\n * 排序实验项目\n */\nexport function sortExperiments(\n experiments: ExperimentItem[],\n sortBy: TestFieldConfig['sortBy'] = 'title',\n sortOrder: TestFieldConfig['sortOrder'] = 'asc'\n): ExperimentItem[] {\n return [...experiments].sort((a, b) => {\n let comparison = 0;\n \n switch (sortBy) {\n case 'title':\n comparison = a.title.localeCompare(b.title);\n break;\n case 'category':\n comparison = a.category.localeCompare(b.category);\n break;\n case 'completion':\n // 已完成的排在前面\n const aCompleted = a.isCompleted ? 1 : 0;\n const bCompleted = b.isCompleted ? 1 : 0;\n comparison = bCompleted - aCompleted;\n break;\n case 'createdAt':\n // 处理创建日期排序,确保没有日期的项目排在最后\n if (!a.createdAt && !b.createdAt) {\n comparison = 0;\n } else if (!a.createdAt) {\n comparison = 1; // a没有日期,排在后面\n } else if (!b.createdAt) {\n comparison = -1; // b没有日期,排在后面\n } else {\n // 日期字符串比较(假设格式为YYYY-MM-DD)\n comparison = new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();\n }\n break;\n case 'updatedAt':\n // 处理更新日期排序,确保没有日期的项目排在最后\n if (!a.updatedAt && !b.updatedAt) {\n comparison = 0;\n } else if (!a.updatedAt) {\n comparison = 1; // a没有日期,排在后面\n } else if (!b.updatedAt) {\n comparison = -1; // b没有日期,排在后面\n } else {\n // 日期字符串比较(假设格式为YYYY-MM-DD)\n comparison = new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime();\n }\n break;\n default:\n comparison = 0;\n }\n \n // 如果主要排序字段相同,使用ID作为第二排序键确保稳定性\n if (comparison === 0) {\n comparison = a.id.localeCompare(b.id);\n }\n \n return sortOrder === 'asc' ? comparison : -comparison;\n });\n}\n\n/**\n * 获取所有标签\n */\nexport function getAllTags(experiments: ExperimentItem[]): string[] {\n const allTags = experiments.flatMap(experiment => experiment.tags);\n return Array.from(new Set(allTags)).sort();\n}\n\n/**\n * 根据类别统计实验项目数量\n */\nexport function getExperimentCounts(experiments: ExperimentItem[]) {\n const counts = {\n all: experiments.length,\n utility: 0,\n leisure: 0,\n completed: 0,\n inProgress: 0\n };\n \n experiments.forEach(experiment => {\n if (experiment.category === 'utility') {\n counts.utility++;\n } else if (experiment.category === 'leisure') {\n counts.leisure++;\n }\n \n if (experiment.isCompleted) {\n counts.completed++;\n } else {\n counts.inProgress++;\n }\n });\n \n return counts;\n}\n\n/**\n * 验证实验项目数据\n */\nexport function validateExperiment(experiment: Partial<ExperimentItem>): boolean {\n return !!(\n experiment.id &&\n experiment.title &&\n experiment.description &&\n experiment.path &&\n experiment.category &&\n Array.isArray(experiment.tags)\n );\n}\n\n/**\n * 获取类别显示名称\n */\nexport function getCategoryDisplayName(category: ViewMode): string {\n switch (category) {\n case 'utility':\n return '实用工具';\n case 'leisure':\n return '休闲娱乐';\n case 'all':\n default:\n return '全部';\n }\n}\n\n/**\n * 获取类别颜色\n */\nexport function getCategoryColor(category: ExperimentItem['category']): string {\n switch (category) {\n case 'utility':\n return 'bg-blue-100 text-blue-800 border-blue-200';\n case 'leisure':\n return 'bg-purple-100 text-purple-800 border-purple-200';\n default:\n return 'bg-gray-100 text-gray-800 border-gray-200';\n }\n}\n\n/**\n * 获取完成状态显示名称\n */\nexport function getCompletionFilterDisplayName(filter: CompletionFilter): string {\n switch (filter) {\n case 'completed':\n return '已完成';\n case 'incomplete':\n return '进行中';\n case 'all':\n default:\n return '全部状态';\n }\n}\n\n/**\n * 获取完成状态标签样式\n */\nexport function getCompletionStatusColor(isCompleted?: boolean): string {\n if (isCompleted) {\n return 'bg-green-100 text-green-800 border-green-200';\n }\n return 'bg-yellow-100 text-yellow-800 border-yellow-200';\n}\n\n/**\n * 获取完成状态标签文本\n */\nexport function getCompletionStatusText(isCompleted?: boolean): string {\n return isCompleted ? '已完成' : '进行中';\n}","'use client';\n\nimport React from \"react\";\nimport type { ViewMode } from '../types';\nimport { getCategoryDisplayName } from '../utils';\nimport { FilterButtonGroup } from '@/components';\n\ninterface CategoryFilterProps {\n viewMode: ViewMode;\n onViewModeChange: (mode: ViewMode) => void;\n counts: { utility: number; leisure: number };\n className?: string;\n}\n\nexport const CategoryFilter: React.FC<CategoryFilterProps> = ({ \n viewMode, \n onViewModeChange, \n counts,\n className\n}) => {\n const options = [\n {\n value: 'all' as const,\n label: getCategoryDisplayName('all'),\n icon: '📊',\n activeColor: {\n bg: 'bg-blue-500',\n shadow: 'shadow-blue-200'\n },\n showCount: false\n },\n {\n value: 'utility' as const,\n label: getCategoryDisplayName('utility'),\n icon: '🔧',\n activeColor: {\n bg: 'bg-green-500',\n shadow: 'shadow-green-200'\n },\n count: counts.utility,\n showCount: true\n },\n {\n value: 'leisure' as const,\n label: getCategoryDisplayName('leisure'),\n icon: '🎮',\n activeColor: {\n bg: 'bg-purple-500',\n shadow: 'shadow-purple-200'\n },\n count: counts.leisure,\n showCount: true\n },\n ];\n\n return (\n <FilterButtonGroup\n label=\"项目类别\"\n value={viewMode}\n options={options}\n onChange={onViewModeChange}\n className={className}\n />\n );\n};\n\nexport default CategoryFilter;\n","'use client';\n\nimport React from \"react\";\nimport type { CompletionFilter } from '../types';\nimport { getCompletionFilterDisplayName } from '../utils';\nimport { FilterButtonGroup } from '@/components';\n\ninterface CompletionFilterProps {\n completionFilter: CompletionFilter;\n onCompletionFilterChange: (filter: CompletionFilter) => void;\n counts: { all: number; completed: number; inProgress: number };\n className?: string;\n}\n\nexport const CompletionFilterComponent: React.FC<CompletionFilterProps> = ({ \n completionFilter, \n onCompletionFilterChange, \n counts,\n className\n}) => {\n const options = [\n {\n value: 'all' as const,\n label: getCompletionFilterDisplayName('all'),\n icon: '📊',\n activeColor: {\n bg: 'bg-slate-500',\n shadow: 'shadow-slate-200'\n },\n count: counts.all,\n showCount: true\n },\n {\n value: 'completed' as const,\n label: getCompletionFilterDisplayName('completed'),\n icon: '✅',\n activeColor: {\n bg: 'bg-emerald-500',\n shadow: 'shadow-emerald-200'\n },\n count: counts.completed,\n showCount: true\n },\n {\n value: 'incomplete' as const,\n label: getCompletionFilterDisplayName('incomplete'),\n icon: '🚧',\n activeColor: {\n bg: 'bg-orange-500',\n shadow: 'shadow-orange-200'\n },\n count: counts.inProgress,\n showCount: true\n }\n ];\n\n return (\n <FilterButtonGroup\n label=\"完成状态\"\n value={completionFilter}\n options={options}\n onChange={onCompletionFilterChange}\n className={className}\n />\n );\n};\n\nexport default CompletionFilterComponent;\n","'use client';\n\nimport React from \"react\";\nimport { BackButton } from '@/components';\n\nexport interface PageHeaderProps {\n counts: { all: number; utility: number; leisure: number; completed: number };\n className?: string;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({ counts, className }) => {\n return (\n <div className={className}>\n {/* 顶部导航 */}\n <div className=\"mb-8\">\n <BackButton />\n </div>\n\n {/* 页面标题 */}\n <div className=\"mb-8\">\n <h1 className=\"text-3xl font-bold text-gray-900\">实验田</h1>\n <p className=\"mt-2 text-sm text-gray-600\">\n 在这里,你可以尝试各种实验性的功能和项目\n </p>\n \n {/* 统计信息 */}\n <div className=\"mt-4 flex flex-wrap gap-4 text-sm text-gray-500\">\n <span>总计: {counts.all} 个项目</span>\n <span>实用工具: {counts.utility} 个</span>\n <span>休闲娱乐: {counts.leisure} 个</span>\n <span>已完成: {counts.completed} 个</span>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PageHeader;\n","'use client';\n\nimport React from \"react\";\nimport { ExperimentCard } from '@/portfolio/ExperimentCard';\nimport type { ExperimentItem } from '../types';\nimport { Grid } from '@/components';\nimport type { GridItem, GridColumns, GridGap } from '@/components';\n\n/** 实验项目网格项接口 */\nexport interface ExperimentGridItem extends GridItem {\n title: string;\n description: string;\n path: string;\n tags: string[];\n category: string;\n isCompleted?: boolean;\n updatedAt?: string;\n createdAt?: string;\n}\n\n/** 实验项目网格组件 Props */\nexport interface ExperimentGridProps<T extends ExperimentGridItem> {\n /** 数据项数组 */\n items: T[];\n /** 自定义渲染函数(可选) */\n renderItem?: (item: T, index: number) => React.ReactNode;\n /** 网格列数配置(可选) */\n columns?: GridColumns;\n /** 间距配置(可选) */\n gap?: GridGap;\n /** 额外的容器类名 */\n className?: string;\n}\n\n/** 默认的 ExperimentCard 渲染器 */\nfunction defaultExperimentRenderer(item: ExperimentItem) {\n return (\n <ExperimentCard\n href={item.path}\n title={item.title}\n description={item.description}\n tags={item.tags}\n category={item.category as any}\n isCompleted={item.isCompleted}\n updatedAt={item.updatedAt}\n createdAt={item.createdAt}\n />\n );\n}\n\n/** 实验项目网格组件 */\nexport function ExperimentGrid<T extends ExperimentGridItem>({\n items,\n renderItem,\n columns = { sm: 1, md: 2, lg: 3, xl: 4 },\n gap = 'md',\n className = ''\n}: ExperimentGridProps<T>) {\n const itemRenderer = renderItem || ((item: T) => defaultExperimentRenderer(item as any));\n\n return (\n <Grid\n items={items}\n renderItem={itemRenderer}\n columns={columns}\n gap={gap}\n className={className}\n />\n );\n}\n\n/** 为了向后兼容,导出一个专门用于 ExperimentItem 的组件 */\nexport function ExperimentItemGrid({ \n experiments, \n ...props \n}: Omit<ExperimentGridProps<ExperimentItem>, 'items'> & { experiments: ExperimentItem[] }) {\n return <ExperimentGrid<ExperimentItem> items={experiments} {...props} />;\n}\n\nexport default ExperimentGrid;\n","'use client';\n\nimport React from \"react\";\nimport { clsx } from 'clsx';\n\nexport interface EmptyStateProps {\n searchQuery: string;\n onClearSearch: () => void;\n className?: string;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({ searchQuery, onClearSearch, className }) => {\n return (\n <div className={clsx('text-center py-12', className)}>\n <svg \n className=\"mx-auto h-12 w-12 text-gray-400\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\" \n strokeWidth={2} \n d=\"M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.47.904-6.06 2.384\" \n />\n </svg>\n <h3 className=\"mt-2 text-sm font-medium text-gray-900\">没有找到匹配的实验项目</h3>\n <p className=\"mt-1 text-sm text-gray-500\">\n {searchQuery \n ? '尝试调整搜索关键词或筛选条件' \n : '当前分类下暂无实验项目'\n }\n </p>\n {searchQuery && (\n <div className=\"mt-4\">\n <button\n onClick={onClearSearch}\n className=\"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-blue-700 bg-blue-100 hover:bg-blue-200\"\n >\n 清除搜索\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default EmptyState;\n","'use client';\n\nimport React from 'react';\nimport type { TestFieldConfig } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortControlProps {\n sortBy: TestFieldConfig['sortBy'];\n sortOrder: TestFieldConfig['sortOrder'];\n onSortByChange: (sortBy: TestFieldConfig['sortBy']) => void;\n onSortOrderChange: (sortOrder: TestFieldConfig['sortOrder']) => void;\n}\n\nexport const SortControl: React.FC<SortControlProps> = ({\n sortBy,\n sortOrder,\n onSortByChange,\n onSortOrderChange,\n}) => {\n // 排序方式选项\n const sortOptions: { value: TestFieldConfig['sortBy']; label: string }[] = [\n { value: 'title', label: '名称' },\n { value: 'updatedAt', label: '更新时间' },\n { value: 'createdAt', label: '创建时间' },\n { value: 'category', label: '类别' },\n { value: 'completion', label: '完成状态' },\n ];\n\n return (\n <div className=\"flex flex-col sm:flex-row items-start sm:items-center gap-2 sm:gap-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100\">\n <div className=\"text-sm font-medium text-gray-700\">排序方式:</div>\n \n <div className=\"flex flex-wrap gap-2\">\n {sortOptions.map((option) => (\n <button\n key={option.value}\n className={clsx('px-3 py-1.5 text-sm rounded-full transition-colors', sortBy === option.value\n ? 'bg-blue-100 text-blue-700 font-medium'\n : 'bg-gray-100 text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortByChange(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n \n <div className=\"ml-auto flex items-center\">\n <button\n className=\"flex items-center gap-1 px-3 py-1.5 text-sm rounded-full bg-gray-100 hover:bg-gray-200\"\n onClick={() => onSortOrderChange(sortOrder === 'asc' ? 'desc' : 'asc')}\n >\n {sortOrder === 'asc' ? (\n <>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12\" />\n </svg>\n <span>升序</span>\n </>\n ) : (\n <>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4\" />\n </svg>\n <span>降序</span>\n </>\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default SortControl;\n","'use client';\n\nimport React from 'react';\nimport type { SortMode } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortModeToggleProps {\n sortMode: SortMode;\n onSortModeChange: (mode: SortMode) => void;\n}\n\nexport const SortModeToggle: React.FC<SortModeToggleProps> = ({ sortMode, onSortModeChange }) => {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-3 bg-white p-4 rounded-lg shadow-sm border border-gray-100\">\n <span className=\"text-sm font-medium text-gray-700\">排序模式:</span>\n \n <div className=\"flex w-full sm:w-auto p-1 bg-gray-100 rounded-lg\">\n <button\n className={clsx('flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors', sortMode === 'auto'\n ? 'bg-white text-blue-700 font-medium shadow-sm'\n : 'text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortModeChange('auto')}\n >\n <div className=\"flex items-center justify-center sm:justify-start space-x-1\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4\" />\n </svg>\n <span>自动排序</span>\n </div>\n </button>\n \n <button\n className={clsx('flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors', sortMode === 'manual'\n ? 'bg-white text-blue-700 font-medium shadow-sm'\n : 'text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortModeChange('manual')}\n >\n <div className=\"flex items-center justify-center sm:justify-start space-x-1\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 11.5V14m0-2.5v-6a1.5 1.5 0 113 0m-3 6a1.5 1.5 0 00-3 0v2a7.5 7.5 0 0015 0v-5a1.5 1.5 0 013 0m-6-3V11m0-5.5v-1a1.5 1.5 0 013 0v1m0 0V11m0-5.5a1.5 1.5 0 013 0v3m0 0V11\" />\n </svg>\n <span>手动排序</span>\n </div>\n </button>\n </div>\n </div>\n );\n};\n\nexport default SortModeToggle;\n","'use client';\n\nimport React from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { ExperimentCard } from '@/portfolio/ExperimentCard';\nimport type { ExperimentItem } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortableExperimentItemProps {\n item: ExperimentItem;\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n isFirst?: boolean;\n isLast?: boolean;\n}\n\nexport const SortableExperimentItem: React.FC<SortableExperimentItemProps> = ({ \n item, \n onMoveUp, \n onMoveDown,\n isFirst,\n isLast \n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 100 : 1,\n opacity: isDragging ? 0.8 : 1,\n position: 'relative' as const,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className=\"relative group\"\n >\n {/* 拖拽手柄 - 桌面端 */}\n <div\n {...attributes}\n {...listeners}\n className=\"absolute right-2 top-2 w-8 h-8 bg-white/80 hover:bg-white rounded-full flex items-center justify-center shadow-md z-[10]\n hidden sm:flex\n opacity-0 group-hover:opacity-100 transition-opacity\n cursor-grab active:cursor-grabbing\n touch-action-none\" /* 防止触摸设备上的滚动冲突 */\n onClick={(e) => e.stopPropagation()}\n aria-label=\"拖动排序\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 text-gray-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 8h16M4 16h16\" />\n </svg>\n \n <span className=\"absolute top-full mt-1 left-1/2 transform -translate-x-1/2 text-xs bg-gray-800 text-white px-2 py-1 rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity\">\n 拖动排序\n </span>\n </div>\n\n {/* 移动端排序按钮组 */}\n <div className=\"absolute right-2 top-2 flex flex-col gap-2 sm:hidden z-[10]\">\n {/* 向上按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveUp?.();\n }}\n disabled={isFirst}\n className={clsx('w-8 h-8 rounded-full flex items-center justify-center shadow-md', isFirst ? 'bg-gray-200 cursor-not-allowed' : 'bg-white/80 hover:bg-white active:bg-gray-100')}\n aria-label=\"向上移动\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={clsx('h-5 w-5', isFirst ? 'text-gray-400' : 'text-gray-500')} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n\n {/* 向下按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveDown?.();\n }}\n disabled={isLast}\n className={clsx('w-8 h-8 rounded-full flex items-center justify-center shadow-md', isLast ? 'bg-gray-200 cursor-not-allowed' : 'bg-white/80 hover:bg-white active:bg-gray-100')}\n aria-label=\"向下移动\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={clsx('h-5 w-5', isLast ? 'text-gray-400' : 'text-gray-500')} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n\n {/* 实验卡片 */}\n <div className={clsx('transition-all', isDragging ? 'scale-105 shadow-xl' : '')}>\n <ExperimentCard\n href={item.path}\n title={item.title}\n description={item.description}\n tags={item.tags}\n category={item.category as any}\n isCompleted={item.isCompleted}\n updatedAt={item.updatedAt}\n createdAt={item.createdAt}\n />\n </div>\n </div>\n );\n};\n\nexport default SortableExperimentItem;\n","'use client';\n\nimport React, { useState } from 'react';\nimport type { ExperimentItem } from '../types';\nimport { clsx } from 'clsx';\nimport { \n DndContext, \n closestCenter, \n KeyboardSensor, \n PointerSensor, \n useSensor, \n useSensors,\n DragEndEvent,\n TouchSensor\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n rectSortingStrategy\n} from '@dnd-kit/sortable';\nimport { SortableExperimentItem } from './SortableExperimentItem';\n\nexport interface DraggableExperimentGridProps {\n items: ExperimentItem[];\n onOrderChange?: (items: ExperimentItem[]) => void;\n className?: string;\n}\n\nexport const DraggableExperimentGrid: React.FC<DraggableExperimentGridProps> = ({ \n items: initialItems, \n onOrderChange,\n className = '' \n}) => {\n // 本地状态跟踪项目顺序\n const [items, setItems] = useState<ExperimentItem[]>(initialItems);\n const [isDragging, setIsDragging] = useState(false);\n\n // 设置传感器\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8, // 需要拖动8px才激活,避免意外触发\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 250, // 触摸需要按住250ms才激活,避免与点击冲突\n tolerance: 5, // 允许的移动容差\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // 处理拖拽开始事件\n function handleDragStart() {\n setIsDragging(true);\n }\n\n // 处理拖拽结束事件\n function handleDragEnd(event: DragEndEvent) {\n setIsDragging(false);\n \n const { active, over } = event;\n \n if (over && active.id !== over.id) {\n setItems((currentItems) => {\n // 找到拖拽项和目标项的索引\n const oldIndex = currentItems.findIndex(item => item.id === active.id);\n const newIndex = currentItems.findIndex(item => item.id === over.id);\n \n // 重新排序项目\n const newItems = arrayMove(currentItems, oldIndex, newIndex);\n \n // 如果提供了回调函数,通知父组件顺序变化\n if (onOrderChange) {\n onOrderChange(newItems);\n }\n \n return newItems;\n });\n }\n }\n\n // 处理向上移动\n const handleMoveUp = (index: number) => {\n if (index > 0) {\n setItems((currentItems) => {\n const newItems = arrayMove(currentItems, index, index - 1);\n onOrderChange?.(newItems);\n return newItems;\n });\n }\n };\n\n // 处理向下移动\n const handleMoveDown = (index: number) => {\n if (index < items.length - 1) {\n setItems((currentItems) => {\n const newItems = arrayMove(currentItems, index, index + 1);\n onOrderChange?.(newItems);\n return newItems;\n });\n }\n };\n\n // 当初始项目变化时更新本地状态\n React.useEffect(() => {\n setItems(initialItems);\n }, [initialItems]);\n\n return (\n <div className={clsx('relative', className)}>\n <div className=\"mb-4 px-4 py-3 bg-blue-50 text-blue-700 rounded-lg border border-blue-200 text-sm\">\n <div className=\"flex items-start sm:items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 mr-2 flex-shrink-0 mt-0.5 sm:mt-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n <div>\n <p className=\"mb-1\">拖拽卡片可以自定义排序。点击卡片可以访问对应的实验项目。</p>\n <p className=\"text-xs text-blue-600 sm:hidden\">点击卡片右上角的上下箭头按钮调整顺序</p>\n <p className=\"text-xs text-blue-600 hidden sm:block\">长按卡片右上角的拖动图标进行排序</p>\n </div>\n </div>\n </div>\n \n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={items.map(item => item.id)}\n strategy={rectSortingStrategy}\n >\n <div className={clsx('grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6', isDragging ? 'cursor-grabbing' : '')}>\n {items.map((item, index) => (\n <SortableExperimentItem \n key={item.id} \n item={item}\n onMoveUp={() => handleMoveUp(index)}\n onMoveDown={() => handleMoveDown(index)}\n isFirst={index === 0}\n isLast={index === items.length - 1}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </div>\n );\n};\n\nexport default DraggableExperimentGrid;\n","/**\n * Auth Schema - Enums\n * 认证相关的枚举类型定义\n */\n\nimport { pgEnum } from 'drizzle-orm/pg-core';\n\n/**\n * 用户角色枚举\n */\nexport const userRole = pgEnum('UserRole', ['USER', 'ADMIN', 'SUPER_ADMIN']);\n\n/**\n * 类型定义\n */\nexport type UserRole = 'USER' | 'ADMIN' | 'SUPER_ADMIN';\n\n","/**\n * Auth Schema - User Table\n * 用户表定义\n */\n\nimport { pgTable, text, boolean, jsonb, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { userRole } from './enums';\n\n/**\n * 用户表\n */\nexport const user = pgTable(\n 'User',\n {\n id: text().primaryKey().notNull(),\n email: text().notNull(),\n emailVerified: boolean().default(false).notNull(),\n username: text().notNull(),\n password: text(),\n name: text(),\n nickname: text(),\n image: text(),\n avatar: text(),\n role: userRole().default('USER').notNull(),\n preferences: jsonb(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n twoFactorEnabled: boolean().default(false).notNull(),\n },\n (table) => [\n uniqueIndex('User_email_key').using('btree', table.email.asc().nullsLast().op('text_ops')),\n uniqueIndex('User_username_key').using(\n 'btree',\n table.username.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type User = typeof user.$inferSelect;\nexport type NewUser = typeof user.$inferInsert;\n\n","/**\n * Auth Schema - Session Table\n * 会话表定义\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n foreignKey,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\n/**\n * 会话表\n */\nexport const session = pgTable(\n 'Session',\n {\n id: text().primaryKey().notNull(),\n userId: text().notNull(),\n token: text().notNull(),\n expiresAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n ipAddress: text(),\n userAgent: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n },\n (table) => [\n uniqueIndex('Session_token_key').using('btree', table.token.asc().nullsLast().op('text_ops')),\n foreignKey({\n columns: [table.userId],\n foreignColumns: [user.id],\n name: 'Session_userId_fkey',\n })\n .onUpdate('cascade')\n .onDelete('cascade'),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Session = typeof session.$inferSelect;\nexport type NewSession = typeof session.$inferInsert;\n\n","/**\n * Auth Schema - Account Table\n * 第三方账号关联表定义\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n foreignKey,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\n/**\n * 第三方账号表(支持 OAuth 登录)\n */\nexport const account = pgTable(\n 'Account',\n {\n id: text().primaryKey().notNull(),\n accountId: text().notNull(),\n providerId: text().notNull(), // 提供商: github, google, wechat 等\n userId: text().notNull(),\n accessToken: text(),\n refreshToken: text(),\n idToken: text(),\n accessTokenExpiresAt: timestamp({ precision: 3, mode: 'string' }),\n refreshTokenExpiresAt: timestamp({ precision: 3, mode: 'string' }),\n scope: text(),\n password: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n },\n (table) => [\n uniqueIndex('Account_providerId_accountId_key').using(\n 'btree',\n table.providerId.asc().nullsLast().op('text_ops'),\n table.accountId.asc().nullsLast().op('text_ops')\n ),\n foreignKey({\n columns: [table.userId],\n foreignColumns: [user.id],\n name: 'Account_userId_fkey',\n })\n .onUpdate('cascade')\n .onDelete('cascade'),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Account = typeof account.$inferSelect;\nexport type NewAccount = typeof account.$inferInsert;\n\n","/**\n * Auth Schema - Verification Table\n * 验证码表定义\n */\n\nimport { pgTable, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\n/**\n * 验证码表(邮箱验证、密码重置等)\n */\nexport const verifications = pgTable(\n 'verifications',\n {\n id: text().primaryKey().notNull(),\n identifier: text().notNull(), // 邮箱或手机号\n value: text().notNull(), // 验证码\n expiresAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n },\n (table) => [\n uniqueIndex('verifications_identifier_value_key').using(\n 'btree',\n table.identifier.asc().nullsLast().op('text_ops'),\n table.value.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Verification = typeof verifications.$inferSelect;\nexport type NewVerification = typeof verifications.$inferInsert;\n\n","/**\n * Auth Schema - Relations\n * 表关系定义\n */\n\nimport { relations } from 'drizzle-orm';\nimport { user } from './user';\nimport { session } from './session';\nimport { account } from './account';\n\n/**\n * User 表关系\n */\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n}));\n\n/**\n * Session 表关系\n */\nexport const sessionRelations = relations(session, ({ one }) => ({\n user: one(user, {\n fields: [session.userId],\n references: [user.id],\n }),\n}));\n\n/**\n * Account 表关系\n */\nexport const accountRelations = relations(account, ({ one }) => ({\n user: one(user, {\n fields: [account.userId],\n references: [user.id],\n }),\n}));\n\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { User, IAuthClient as BaseApiClient, AuthResult, UseAuthReturn } from '../types';\n\nexport type { User, BaseApiClient, AuthResult, UseAuthReturn };\n\nexport function useAuth(apiClient: BaseApiClient): UseAuthReturn {\n const [user, setUser] = useState<User | null>(null);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [loading, setLoading] = useState(false);\n const [checkingAuth, setCheckingAuth] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * 检查认证状态\n */\n const checkAuthStatus = useCallback(async () => {\n try {\n setCheckingAuth(true);\n setError(null);\n\n const isAuth = await apiClient.isAuthenticated();\n\n if (isAuth) {\n // 验证 token 并获取用户信息\n const response = await apiClient.getCurrentUser();\n\n if (response.success && response.data) {\n setUser(response.data);\n setIsLoggedIn(true);\n } else {\n // Token 无效,清除登录状态\n await apiClient.clearUserData();\n setUser(null);\n setIsLoggedIn(false);\n }\n } else {\n setUser(null);\n setIsLoggedIn(false);\n }\n } catch (err) {\n console.error('检查登录状态失败:', err);\n setError(err instanceof Error ? err.message : '检查登录状态失败');\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setCheckingAuth(false);\n }\n }, [apiClient]);\n\n /**\n * 用户登录\n */\n const login = useCallback(\n async (email: string, password: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.login(email, password);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '登录失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '登录失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户注册\n */\n const register = useCallback(\n async (email: string, password: string, username: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.register(email, password, username);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '注册失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '注册失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户登出\n */\n const logout = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n await apiClient.logout();\n setUser(null);\n setIsLoggedIn(false);\n } catch (err) {\n console.error('登出失败:', err);\n setError(err instanceof Error ? err.message : '登出失败');\n // 即使登出失败,也清除本地状态\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // 组件挂载时检查认证状态\n useEffect(() => {\n checkAuthStatus();\n }, [checkAuthStatus]);\n\n return {\n // 状态\n user,\n isLoggedIn,\n loading,\n checkingAuth,\n error,\n\n // 操作方法\n login,\n register,\n logout,\n refresh: checkAuthStatus,\n clearError,\n };\n}\n\n/**\n * 表单验证 Hook\n *\n * @example\n * ```typescript\n * const { values, errors, handleChange, handleBlur, validate } = useAuthForm({\n * email: '',\n * password: ''\n * })\n * ```\n */\nexport function useAuthForm<T extends Record<string, any>>(initialValues: T) {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n\n const handleChange = useCallback(\n (field: keyof T, value: any) => {\n setValues((prev: T) => ({ ...prev, [field]: value }));\n // 清除该字段的错误\n if (errors[field]) {\n setErrors((prev: Partial<Record<keyof T, string>>) => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n },\n [errors]\n );\n\n const handleBlur = useCallback((field: keyof T) => {\n setTouched((prev: Partial<Record<keyof T, boolean>>) => ({ ...prev, [field]: true }));\n }, []);\n\n const validate = useCallback(\n (validationRules: Partial<Record<keyof T, (value: any) => string | undefined>>) => {\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n Object.keys(validationRules).forEach((key) => {\n const field = key as keyof T;\n const rule = validationRules[field];\n if (rule) {\n const error = rule(values[field]);\n if (error) {\n newErrors[field] = error;\n }\n }\n });\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n },\n [values]\n );\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n }, [initialValues]);\n\n return {\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n validate,\n reset,\n setValues,\n setErrors,\n };\n}\n\n","'use client';\n\nimport React from 'react';\nimport { BaseApiClient, UseAuthReturn, useAuth } from '@/auth';\nimport { Shield, AlertTriangle } from 'lucide-react';\nimport { ApiError } from '@/universalFile/server';\n\ninterface PermissionGuardProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n apiClient: BaseApiClient;\n}\n\nexport const PermissionGuard: React.FC<PermissionGuardProps> = ({\n apiClient,\n children,\n fallback\n}) => {\n const { user, isLoggedIn } = useAuth(apiClient);\n\n // 检查用户是否有权限(所有登录用户都可以访问实验田)\n const hasPermission = () => {\n if (!isLoggedIn || !user) {\n return false;\n }\n\n // 实验田对所有登录用户开放\n return true;\n };\n\n if (!hasPermission()) {\n return (fallback as any) || (\n <div className=\"min-h-screen bg-gray-50 flex items-center justify-center\">\n <div className=\"max-w-md w-full bg-white rounded-lg shadow-lg p-8 text-center\">\n <div className=\"flex items-center justify-center mb-4\">\n <Shield className=\"w-12 h-12 text-red-500\" />\n </div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">\n 需要登录\n </h2>\n <p className=\"text-gray-600 mb-4\">\n 请先登录以访问实验田功能。\n </p>\n <div className=\"flex items-center justify-center text-sm text-gray-500 mb-4\">\n <AlertTriangle className=\"w-4 h-4 mr-1\" />\n 实验田对所有注册用户开放\n </div>\n <button\n onClick={() => window.history.back()}\n className=\"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-green-600 hover:bg-green-700\"\n >\n 返回上一页\n </button>\n </div>\n </div>\n );\n }\n\n return <>{children}</>;\n};\n\nexport default PermissionGuard;\n","'use client';\n\nimport React from 'react';\nimport { BaseApiClient, useAuth } from '@/auth';\nimport { LogOut, User, FlaskConical } from 'lucide-react';\n\nexport interface UserInfoBarProps {\n apiClient: BaseApiClient;\n}\n\nexport const UserInfoBar: React.FC<UserInfoBarProps> = ({ apiClient }) => {\n const { user, logout, isLoggedIn } = useAuth(apiClient);\n\n const handleLogout = async () => {\n try {\n await logout();\n // 登出后重定向到首页\n window.location.href = '/';\n } catch (error) {\n console.error('登出失败:', error);\n }\n };\n\n if (!isLoggedIn || !user) {\n return null;\n }\n\n return (\n <div className=\"bg-white border-b border-gray-200 px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3\">\n <div className=\"flex items-center space-x-2\">\n <User className=\"w-5 h-5 text-gray-600\" />\n <span className=\"text-sm font-medium text-gray-900\">\n {user.name || user.email || '用户'}\n </span>\n {user.role && (\n <span className=\"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"flex items-center space-x-2\">\n <div className=\"flex items-center space-x-1 text-sm text-gray-500\">\n <FlaskConical className=\"w-4 h-4\" />\n <span>实验田</span>\n </div>\n \n <button\n onClick={handleLogout}\n className=\"inline-flex items-center px-3 py-1.5 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500\"\n >\n <LogOut className=\"w-4 h-4 mr-1\" />\n 登出\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default UserInfoBar;\n","'use client';\n\nimport React, { useState } from 'react';\n\ninterface DanmakuPanelProps {\n onSend: (text: string) => void;\n}\n\nexport function DanmakuPanel({ onSend }: DanmakuPanelProps) {\n const [text, setText] = useState('');\n\n const emit = () => {\n const value = text.trim();\n if (!value) {\n return;\n }\n onSend(value);\n setText('');\n };\n\n return (\n <div className=\"rounded-xl border border-slate-600/40 bg-slate-900/70 p-3 text-slate-100 backdrop-blur-sm\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n emit();\n }\n }}\n placeholder=\"发送弹幕(支持 /miku /avatar /normal)\"\n className=\"flex-1 rounded-md border border-slate-600 bg-slate-950 px-2.5 py-2 text-sm text-slate-100 outline-none focus:border-cyan-400\"\n />\n <button\n type=\"button\"\n onClick={emit}\n className=\"rounded-md bg-cyan-400 px-3 py-2 text-sm font-medium text-slate-950 hover:bg-cyan-300\"\n >\n 发送\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\n\ninterface FireworksCanvasProps {\n canvasRef: React.RefObject<HTMLCanvasElement>;\n}\n\nexport function FireworksCanvas({ canvasRef }: FireworksCanvasProps) {\n return (\n <canvas\n ref={canvasRef}\n className=\"absolute inset-0 h-full w-full\"\n style={{\n background:\n 'radial-gradient(circle at 20% 20%, rgba(57,197,187,0.15) 0%, rgba(6,8,22,1) 45%, rgba(4,6,15,1) 100%)',\n }}\n />\n );\n}\n","import type { FireworkKind } from './types';\n\nexport const DEFAULT_MAX_PARTICLES = 5000;\nexport const DEFAULT_MAX_ACTIVE_FIREWORKS = 12;\n\nexport const FIREWORK_KIND_LABELS: Record<FireworkKind, string> = {\n normal: '普通烟花',\n miku: 'MIKU 主题',\n avatar: '头像烟花',\n};\n\nexport const MIKU_PALETTE = ['#39c5bb', '#66e3db', '#7ad8ff', '#b0fff8', '#8cf7e0'];\nexport const NORMAL_PALETTE = ['#ffe066', '#ff6b6b', '#4dabf7', '#c77dff', '#69db7c'];\n\nexport const DANMAKU_MAX_LENGTH = 32;\nexport const DANMAKU_TRACK_COUNT = 8;\n","'use client';\n\nimport React from 'react';\nimport { FIREWORK_KIND_LABELS } from '../constants';\nimport type { FireworkKind } from '../types';\n\ninterface FireworksControlPanelProps {\n selectedKind: FireworkKind;\n onKindChange: (kind: FireworkKind) => void;\n autoLaunchOnDanmaku: boolean;\n onAutoLaunchChange: (value: boolean) => void;\n avatarUrl: string;\n onAvatarUrlChange: (value: string) => void;\n onLaunch: () => void;\n fps: number;\n realtimeConnected?: boolean;\n onlineCount?: number;\n}\n\nexport function FireworksControlPanel({\n selectedKind,\n onKindChange,\n autoLaunchOnDanmaku,\n onAutoLaunchChange,\n avatarUrl,\n onAvatarUrlChange,\n onLaunch,\n fps,\n realtimeConnected,\n onlineCount,\n}: FireworksControlPanelProps) {\n return (\n <div className=\"rounded-xl border border-slate-600/40 bg-slate-900/70 p-3 text-slate-100 backdrop-blur-sm\">\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n {(Object.keys(FIREWORK_KIND_LABELS) as FireworkKind[]).map((kind) => {\n const active = kind === selectedKind;\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => onKindChange(kind)}\n className={`rounded-md px-3 py-1.5 text-sm transition ${\n active ? 'bg-cyan-500 text-slate-950' : 'bg-slate-700/70 hover:bg-slate-600/80'\n }`}\n >\n {FIREWORK_KIND_LABELS[kind]}\n </button>\n );\n })}\n\n <button\n type=\"button\"\n onClick={onLaunch}\n className=\"ml-auto rounded-md bg-emerald-400 px-3 py-1.5 text-sm font-medium text-slate-900 hover:bg-emerald-300\"\n >\n 发射烟花\n </button>\n </div>\n\n <div className=\"grid gap-2 md:grid-cols-2\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={autoLaunchOnDanmaku}\n onChange={(event) => onAutoLaunchChange(event.target.checked)}\n />\n 发送弹幕后自动放烟花\n </label>\n\n <div className=\"text-sm text-slate-300\">FPS: {fps}</div>\n {typeof realtimeConnected === 'boolean' ? (\n <div className=\"text-sm text-slate-300\">\n 实时状态: {realtimeConnected ? '已连接' : '未连接'}\n {typeof onlineCount === 'number' ? ` · 在线 ${onlineCount}` : ''}\n </div>\n ) : null}\n </div>\n\n {selectedKind === 'avatar' ? (\n <div className=\"mt-2\">\n <input\n type=\"url\"\n value={avatarUrl}\n onChange={(event) => onAvatarUrlChange(event.target.value)}\n placeholder=\"头像图片 URL(用于头像烟花)\"\n className=\"w-full rounded-md border border-slate-600 bg-slate-950 px-2.5 py-2 text-sm text-slate-100 outline-none focus:border-cyan-400\"\n />\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT } from '../constants';\nimport type { DanmakuControllerOptions, DanmakuMessage, DanmakuSendResult, FireworkKind } from '../types';\n\nexport interface DanmakuOverlayItem extends DanmakuMessage {\n track: number;\n durationMs: number;\n}\n\ninterface SendDanmakuOptions {\n optimistic?: boolean;\n}\n\nexport function useDanmakuController(options?: DanmakuControllerOptions) {\n const [items, setItems] = useState<DanmakuOverlayItem[]>([]);\n const cursorRef = useRef(0);\n\n const removeItem = useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const addIncoming = useCallback((message: DanmakuMessage) => {\n setItems((prev) => {\n const track = cursorRef.current % DANMAKU_TRACK_COUNT;\n const item: DanmakuOverlayItem = {\n ...message,\n track,\n durationMs: 8000 + Math.floor(Math.random() * 2800),\n };\n return [...prev.slice(-40), item];\n });\n cursorRef.current += 1;\n }, []);\n\n const send = useCallback(\n (text: string, color?: string, sendOptions?: SendDanmakuOptions): DanmakuSendResult | null => {\n const trimmed = text.trim();\n if (!trimmed) {\n return null;\n }\n\n const { content, launchKind } = parseCommand(trimmed);\n const safeText = content.slice(0, DANMAKU_MAX_LENGTH);\n if (!safeText) {\n return null;\n }\n\n const message: DanmakuMessage = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,\n text: safeText,\n color,\n timestamp: Date.now(),\n };\n\n const optimistic = sendOptions?.optimistic ?? true;\n if (optimistic) {\n addIncoming(message);\n }\n\n options?.onSend?.(message);\n\n return {\n message,\n launchKind,\n };\n },\n [addIncoming, options]\n );\n\n return useMemo(\n () => ({\n items,\n send,\n addIncoming,\n removeItem,\n }),\n [addIncoming, items, removeItem, send]\n );\n}\n\nfunction parseCommand(text: string): { content: string; launchKind?: FireworkKind } {\n if (text.startsWith('/miku ')) {\n return { launchKind: 'miku', content: text.replace('/miku ', '').trim() };\n }\n if (text === '/miku') {\n return { launchKind: 'miku', content: 'MIKU!' };\n }\n if (text.startsWith('/avatar ')) {\n return { launchKind: 'avatar', content: text.replace('/avatar ', '').trim() };\n }\n if (text === '/avatar') {\n return { launchKind: 'avatar', content: 'Avatar Firework!' };\n }\n if (text.startsWith('/normal ')) {\n return { launchKind: 'normal', content: text.replace('/normal ', '').trim() };\n }\n if (text === '/normal') {\n return { launchKind: 'normal', content: 'Fireworks!' };\n }\n return { content: text };\n}\n","import * as THREE from 'three';\n\nexport function createCircularSpriteTexture(): THREE.CanvasTexture {\n const size = 64;\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return new THREE.CanvasTexture(canvas);\n }\n\n const center = size / 2;\n const gradient = ctx.createRadialGradient(center, center, 2, center, center, center);\n gradient.addColorStop(0, 'rgba(255,255,255,1)');\n gradient.addColorStop(0.4, 'rgba(255,255,255,0.9)');\n gradient.addColorStop(1, 'rgba(255,255,255,0)');\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, size, size);\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.needsUpdate = true;\n return texture;\n}\n","import { MIKU_PALETTE, NORMAL_PALETTE } from '../constants';\nimport type { FireworkKind } from '../types';\n\nexport function pickPalette(kind: FireworkKind): string[] {\n if (kind === 'miku') {\n return MIKU_PALETTE;\n }\n return NORMAL_PALETTE;\n}\n\nexport function pickRandomColor(colors: string[]): string {\n if (colors.length === 0) {\n return '#ffffff';\n }\n const index = Math.floor(Math.random() * colors.length);\n return colors[index] || '#ffffff';\n}\n","export async function sampleAvatarPoints(\n avatarUrl: string,\n sampleStep = 4,\n maxPoints = 500\n): Promise<Array<{ x: number; y: number; brightness: number }>> {\n const image = await loadImage(avatarUrl);\n const size = 64;\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return [];\n }\n\n ctx.clearRect(0, 0, size, size);\n ctx.drawImage(image, 0, 0, size, size);\n\n const { data } = ctx.getImageData(0, 0, size, size);\n const points: Array<{ x: number; y: number; brightness: number }> = [];\n\n for (let y = 0; y < size; y += sampleStep) {\n for (let x = 0; x < size; x += sampleStep) {\n const index = (y * size + x) * 4;\n const alpha = data[index + 3] ?? 0;\n if (alpha < 24) {\n continue;\n }\n const r = data[index] ?? 0;\n const g = data[index + 1] ?? 0;\n const b = data[index + 2] ?? 0;\n const brightness = (r + g + b) / (3 * 255);\n points.push({ x: x - size / 2, y: size / 2 - y, brightness });\n if (points.length >= maxPoints) {\n return points;\n }\n }\n }\n\n return points;\n}\n\nfunction loadImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new window.Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('Failed to load avatar image.'));\n image.src = url;\n });\n}\n","import { sampleAvatarPoints } from '../../utils/avatarSprite';\nimport type { SeedParticle } from './normal';\n\nexport async function createAvatarSeeds(avatarUrl: string, fallbackColor: string): Promise<SeedParticle[]> {\n const points = await sampleAvatarPoints(avatarUrl);\n\n if (points.length === 0) {\n return [];\n }\n\n return points.map((point) => {\n const spread = 0.22;\n return {\n x: 0,\n y: 0,\n z: 0,\n vx: point.x * spread + (Math.random() - 0.5) * 2.4,\n vy: point.y * spread + Math.random() * 2.2,\n vz: (Math.random() - 0.5) * 3.5,\n life: 1.1 + point.brightness * 1.6,\n color: fallbackColor,\n };\n });\n}\n","import { MIKU_PALETTE } from '../../constants';\nimport { pickRandomColor } from '../../utils/colorPalettes';\nimport type { SeedParticle } from './normal';\n\nexport function createMikuSeeds(count: number): SeedParticle[] {\n const seeds: SeedParticle[] = [];\n\n for (let i = 0; i < count; i += 1) {\n const ratio = i / Math.max(count - 1, 1);\n const angle = ratio * Math.PI * 2 * 2;\n const radial = 7 + Math.random() * 9;\n\n const spiralBoost = 3 + Math.random() * 4;\n seeds.push({\n x: 0,\n y: 0,\n z: 0,\n vx: Math.cos(angle) * radial,\n vy: Math.sin(angle * 0.5) * spiralBoost + 7,\n vz: Math.sin(angle) * radial,\n life: 1.2 + Math.random() * 1.5,\n color: pickRandomColor(MIKU_PALETTE),\n });\n }\n\n return seeds;\n}\n","export interface SeedParticle {\n x: number;\n y: number;\n z: number;\n vx: number;\n vy: number;\n vz: number;\n life: number;\n color: string;\n}\n\nexport function createNormalSeeds(count: number, color: string): SeedParticle[] {\n const seeds: SeedParticle[] = [];\n for (let i = 0; i < count; i += 1) {\n const theta = Math.random() * Math.PI * 2;\n const phi = Math.acos(2 * Math.random() - 1);\n const speed = 8 + Math.random() * 12;\n seeds.push({\n x: 0,\n y: 0,\n z: 0,\n vx: speed * Math.sin(phi) * Math.cos(theta),\n vy: speed * Math.cos(phi),\n vz: speed * Math.sin(phi) * Math.sin(theta),\n life: 1 + Math.random() * 1.6,\n color,\n });\n }\n return seeds;\n}\n","import type { FireworkKind } from '../types';\nimport { pickPalette, pickRandomColor } from '../utils/colorPalettes';\nimport { createAvatarSeeds } from './patterns/avatar';\nimport { createMikuSeeds } from './patterns/miku';\nimport { createNormalSeeds, type SeedParticle } from './patterns/normal';\n\ninterface EmitOptions {\n kind: FireworkKind;\n count: number;\n color?: string;\n avatarUrl?: string;\n}\n\nexport async function createSeedParticles(options: EmitOptions): Promise<SeedParticle[]> {\n const palette = pickPalette(options.kind);\n const color = options.color ?? pickRandomColor(palette);\n\n if (options.kind === 'miku') {\n return createMikuSeeds(options.count);\n }\n\n if (options.kind === 'avatar' && options.avatarUrl) {\n const avatarSeeds = await createAvatarSeeds(options.avatarUrl, color);\n if (avatarSeeds.length > 0) {\n return avatarSeeds;\n }\n }\n\n return createNormalSeeds(options.count, color);\n}\n","export interface ParticleState {\n x: number;\n y: number;\n z: number;\n vx: number;\n vy: number;\n vz: number;\n life: number;\n maxLife: number;\n r: number;\n g: number;\n b: number;\n}\n\nexport class ParticlePool {\n private readonly pool: ParticleState[] = [];\n\n acquire(): ParticleState {\n const reused = this.pool.pop();\n if (reused) {\n return reused;\n }\n return {\n x: 0,\n y: 0,\n z: 0,\n vx: 0,\n vy: 0,\n vz: 0,\n life: 0,\n maxLife: 1,\n r: 1,\n g: 1,\n b: 1,\n };\n }\n\n release(particle: ParticleState): void {\n this.pool.push(particle);\n }\n}\n","export interface EngineDegradePolicy {\n shouldDegrade: boolean;\n recommendedParticleScale: number;\n}\n\nexport function evaluateDegradePolicy(fps: number): EngineDegradePolicy {\n if (fps < 24) {\n return { shouldDegrade: true, recommendedParticleScale: 0.65 };\n }\n if (fps < 34) {\n return { shouldDegrade: true, recommendedParticleScale: 0.82 };\n }\n return { shouldDegrade: false, recommendedParticleScale: 1 };\n}\n","import * as THREE from 'three';\nimport { DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES } from '../constants';\nimport type { FireworkEngineOptions, FireworkLaunchPayload } from '../types';\nimport { createCircularSpriteTexture } from '../utils/textureFactory';\nimport { createSeedParticles } from './emitters';\nimport { ParticlePool, type ParticleState } from './particlePool';\nimport { evaluateDegradePolicy } from './postfx';\n\ninterface Burst {\n id: string;\n points: THREE.Points;\n geometry: THREE.BufferGeometry;\n material: THREE.PointsMaterial;\n positions: Float32Array;\n colors: Float32Array;\n particles: ParticleState[];\n}\n\ninterface FireworksEngineInit {\n canvas: HTMLCanvasElement;\n container: HTMLElement;\n options?: FireworkEngineOptions;\n}\n\nexport class FireworksEngine {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly canvas: HTMLCanvasElement;\n private readonly container: HTMLElement;\n private readonly pool = new ParticlePool();\n private readonly bursts: Burst[] = [];\n private readonly maxParticles: number;\n private readonly maxActiveFireworks: number;\n private readonly onError?: (error: Error) => void;\n private readonly onFpsReport?: (fps: number) => void;\n\n private animationFrameId: number | null = null;\n private lastTick = 0;\n private fpsWindow = { frames: 0, elapsed: 0, fps: 60, particleScale: 1 };\n\n private resizeObserver: ResizeObserver | null = null;\n private spriteTexture: THREE.Texture;\n\n constructor(init: FireworksEngineInit) {\n this.canvas = init.canvas;\n this.container = init.container;\n this.maxParticles = init.options?.maxParticles ?? DEFAULT_MAX_PARTICLES;\n this.maxActiveFireworks = init.options?.maxActiveFireworks ?? DEFAULT_MAX_ACTIVE_FIREWORKS;\n this.onError = init.options?.onError;\n this.onFpsReport = init.options?.onFpsReport;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color('#060816');\n\n this.camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);\n this.camera.position.set(0, 0, 45);\n\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvas,\n alpha: true,\n antialias: true,\n powerPreference: 'high-performance',\n });\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n\n this.spriteTexture = createCircularSpriteTexture();\n\n this.attachResizeObserver();\n this.resize();\n }\n\n start(): void {\n if (this.animationFrameId != null) {\n return;\n }\n this.lastTick = window.performance.now();\n this.loop();\n }\n\n stop(): void {\n if (this.animationFrameId != null) {\n window.cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n }\n\n async launch(payload: FireworkLaunchPayload): Promise<void> {\n try {\n this.enforceBurstCap();\n\n const particleBudget = Math.max(80, Math.floor(280 * this.fpsWindow.particleScale));\n const seeds = await createSeedParticles({\n kind: payload.kind,\n count: particleBudget,\n color: payload.color,\n avatarUrl: payload.avatarUrl,\n });\n\n if (seeds.length === 0) {\n return;\n }\n\n const launchPosition = payload.position ?? {\n x: (Math.random() - 0.5) * 18,\n y: -4 + Math.random() * 12,\n z: (Math.random() - 0.5) * 4,\n };\n\n const particles: ParticleState[] = [];\n const positions = new Float32Array(seeds.length * 3);\n const colors = new Float32Array(seeds.length * 3);\n\n const colorHelper = new THREE.Color();\n for (let i = 0; i < seeds.length; i += 1) {\n const seed = seeds[i];\n if (!seed) {\n continue;\n }\n const particle = this.pool.acquire();\n particle.x = launchPosition.x + seed.x;\n particle.y = launchPosition.y + seed.y;\n particle.z = launchPosition.z + seed.z;\n particle.vx = seed.vx;\n particle.vy = seed.vy;\n particle.vz = seed.vz;\n particle.life = seed.life;\n particle.maxLife = seed.life;\n\n colorHelper.set(seed.color);\n particle.r = colorHelper.r;\n particle.g = colorHelper.g;\n particle.b = colorHelper.b;\n\n particles.push(particle);\n\n const offset = i * 3;\n positions[offset] = particle.x;\n positions[offset + 1] = particle.y;\n positions[offset + 2] = particle.z;\n colors[offset] = particle.r;\n colors[offset + 1] = particle.g;\n colors[offset + 2] = particle.b;\n }\n\n if (this.totalParticleCount() + particles.length > this.maxParticles) {\n this.releaseParticles(particles);\n return;\n }\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n\n const material = new THREE.PointsMaterial({\n size: payload.kind === 'miku' ? 0.42 : 0.36,\n vertexColors: true,\n map: this.spriteTexture,\n transparent: true,\n opacity: 1,\n depthWrite: false,\n blending: THREE.AdditiveBlending,\n });\n\n const points = new THREE.Points(geometry, material);\n this.scene.add(points);\n\n const burst: Burst = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n points,\n geometry,\n material,\n positions,\n colors,\n particles,\n };\n\n this.bursts.push(burst);\n } catch (error) {\n this.onError?.(error instanceof Error ? error : new Error('Failed to launch firework.'));\n }\n }\n\n dispose(): void {\n this.stop();\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n\n for (const burst of this.bursts) {\n this.destroyBurst(burst);\n }\n this.bursts.length = 0;\n\n this.spriteTexture.dispose();\n this.renderer.dispose();\n }\n\n private loop = (): void => {\n const now = window.performance.now();\n const dt = Math.min((now - this.lastTick) / 1000, 0.05);\n this.lastTick = now;\n\n this.update(dt);\n this.renderer.render(this.scene, this.camera);\n\n this.animationFrameId = window.requestAnimationFrame(this.loop);\n };\n\n private update(dt: number): void {\n const gravity = -8.8;\n\n for (let b = this.bursts.length - 1; b >= 0; b -= 1) {\n const burst = this.bursts[b];\n if (!burst) {\n continue;\n }\n\n let alive = 0;\n for (let i = 0; i < burst.particles.length; i += 1) {\n const particle = burst.particles[i];\n if (!particle) {\n continue;\n }\n\n particle.life -= dt;\n if (particle.life <= 0) {\n continue;\n }\n\n particle.vx *= 0.992;\n particle.vy = particle.vy * 0.992 + gravity * dt;\n particle.vz *= 0.992;\n\n particle.x += particle.vx * dt;\n particle.y += particle.vy * dt;\n particle.z += particle.vz * dt;\n\n const idx = i * 3;\n burst.positions[idx] = particle.x;\n burst.positions[idx + 1] = particle.y;\n burst.positions[idx + 2] = particle.z;\n\n const alpha = Math.max(particle.life / particle.maxLife, 0);\n burst.colors[idx] = particle.r * alpha;\n burst.colors[idx + 1] = particle.g * alpha;\n burst.colors[idx + 2] = particle.b * alpha;\n\n alive += 1;\n }\n\n const positionAttr = burst.geometry.getAttribute('position') as THREE.BufferAttribute;\n const colorAttr = burst.geometry.getAttribute('color') as THREE.BufferAttribute;\n positionAttr.needsUpdate = true;\n colorAttr.needsUpdate = true;\n\n burst.material.opacity = Math.min(1, 0.22 + alive / Math.max(burst.particles.length, 1));\n\n if (alive === 0) {\n this.bursts.splice(b, 1);\n this.destroyBurst(burst);\n }\n }\n\n this.updateFpsStats(dt);\n }\n\n private updateFpsStats(dt: number): void {\n this.fpsWindow.frames += 1;\n this.fpsWindow.elapsed += dt;\n\n if (this.fpsWindow.elapsed < 0.6) {\n return;\n }\n\n const fps = this.fpsWindow.frames / this.fpsWindow.elapsed;\n this.fpsWindow.fps = fps;\n\n const policy = evaluateDegradePolicy(fps);\n this.fpsWindow.particleScale = policy.recommendedParticleScale;\n\n this.onFpsReport?.(Math.round(fps));\n\n this.fpsWindow.frames = 0;\n this.fpsWindow.elapsed = 0;\n }\n\n private totalParticleCount(): number {\n return this.bursts.reduce((sum, burst) => sum + burst.particles.length, 0);\n }\n\n private enforceBurstCap(): void {\n while (this.bursts.length >= this.maxActiveFireworks) {\n const burst = this.bursts.shift();\n if (!burst) {\n break;\n }\n this.destroyBurst(burst);\n }\n }\n\n private destroyBurst(burst: Burst): void {\n this.scene.remove(burst.points);\n burst.geometry.dispose();\n burst.material.dispose();\n this.releaseParticles(burst.particles);\n }\n\n private releaseParticles(particles: ParticleState[]): void {\n for (const particle of particles) {\n this.pool.release(particle);\n }\n }\n\n private attachResizeObserver(): void {\n this.resizeObserver = new ResizeObserver(() => this.resize());\n this.resizeObserver.observe(this.container);\n }\n\n private resize(): void {\n const width = Math.max(1, this.container.clientWidth);\n const height = Math.max(1, this.container.clientHeight);\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height, false);\n }\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FireworksEngine } from '../engine/FireworksEngine';\nimport type { FireworkEngineOptions, FireworkLaunchPayload } from '../types';\n\nexport interface UseFireworksEngineOptions extends FireworkEngineOptions {\n onLaunch?: (payload: FireworkLaunchPayload) => void;\n}\n\nexport function useFireworksEngine(options?: UseFireworksEngineOptions) {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const engineRef = useRef<FireworksEngine | null>(null);\n const pendingLaunchesRef = useRef<FireworkLaunchPayload[]>([]);\n const [fps, setFps] = useState(60);\n const [engineReady, setEngineReady] = useState(false);\n const [pendingLaunchCount, setPendingLaunchCount] = useState(0);\n const { maxParticles, maxActiveFireworks, onError, onFpsReport, onLaunch } = options || {};\n\n useEffect(() => {\n if (!containerRef.current || !canvasRef.current) {\n return;\n }\n\n const engine = new FireworksEngine({\n container: containerRef.current,\n canvas: canvasRef.current,\n options: {\n maxParticles,\n maxActiveFireworks,\n onError,\n onFpsReport: (nextFps) => {\n setFps(nextFps);\n onFpsReport?.(nextFps);\n },\n },\n });\n\n engine.start();\n engineRef.current = engine;\n setEngineReady(true);\n if (pendingLaunchesRef.current.length > 0) {\n const pending = [...pendingLaunchesRef.current];\n pendingLaunchesRef.current = [];\n setPendingLaunchCount(0);\n pending.forEach((payload) => {\n void engine.launch(payload);\n });\n }\n\n return () => {\n engineRef.current?.dispose();\n engineRef.current = null;\n pendingLaunchesRef.current = [];\n setPendingLaunchCount(0);\n setEngineReady(false);\n };\n }, [maxParticles, maxActiveFireworks, onError, onFpsReport]);\n\n const launch = useCallback(\n (payload: FireworkLaunchPayload) => {\n if (!engineRef.current) {\n pendingLaunchesRef.current.push(payload);\n if (pendingLaunchesRef.current.length > 120) {\n pendingLaunchesRef.current.splice(0, pendingLaunchesRef.current.length - 120);\n }\n setPendingLaunchCount(pendingLaunchesRef.current.length);\n } else {\n void engineRef.current.launch(payload);\n }\n onLaunch?.(payload);\n },\n [onLaunch]\n );\n\n const api = useMemo(\n () => ({\n containerRef,\n canvasRef,\n launch,\n fps,\n engineReady,\n pendingLaunchCount,\n }),\n [engineReady, fps, launch, pendingLaunchCount]\n );\n\n return api;\n}\n","import type {\n FireworkKind,\n FireworkLaunchPayload,\n FireworksRealtimeConfig,\n FireworksRealtimeState,\n FireworksRealtimeUser,\n} from '../types';\n\ninterface RealtimeDanmakuEvent {\n id: string;\n roomId: string;\n text: string;\n color?: string;\n kind?: FireworkKind;\n user: FireworksRealtimeUser;\n timestamp: number;\n}\n\ninterface RealtimeFireworkEvent {\n id: string;\n roomId: string;\n payload: FireworkLaunchPayload;\n user: FireworksRealtimeUser;\n timestamp: number;\n}\n\ntype ClientMessage =\n | {\n type: 'join';\n roomId: string;\n user: FireworksRealtimeUser;\n }\n | {\n type: 'leave';\n }\n | {\n type: 'danmaku.send';\n payload: {\n text: string;\n color?: string;\n kind?: FireworkKind;\n };\n }\n | {\n type: 'firework.launch';\n payload: FireworkLaunchPayload;\n };\n\ntype ServerMessage =\n | {\n type: 'joined';\n roomId: string;\n onlineCount: number;\n self: FireworksRealtimeUser;\n }\n | {\n type: 'room.snapshot';\n roomId: string;\n users: FireworksRealtimeUser[];\n danmakuHistory: RealtimeDanmakuEvent[];\n fireworkHistory: RealtimeFireworkEvent[];\n }\n | {\n type: 'room.user_joined';\n roomId: string;\n user: FireworksRealtimeUser;\n onlineCount: number;\n }\n | {\n type: 'room.user_left';\n roomId: string;\n userId: string;\n onlineCount: number;\n }\n | {\n type: 'danmaku.broadcast';\n roomId: string;\n event: RealtimeDanmakuEvent;\n }\n | {\n type: 'firework.broadcast';\n roomId: string;\n event: RealtimeFireworkEvent;\n }\n | {\n type: 'error';\n code: string;\n message: string;\n }\n | {\n type: 'pong';\n ts: number;\n };\n\nexport interface WebSocketTransportCallbacks {\n onStateChange?: (state: FireworksRealtimeState) => void;\n onDanmakuBroadcast?: (event: RealtimeDanmakuEvent) => void;\n onFireworkBroadcast?: (event: RealtimeFireworkEvent) => void;\n onSnapshot?: (snapshot: Extract<ServerMessage, { type: 'room.snapshot' }>) => void;\n onError?: (error: Error) => void;\n}\n\nexport class WebSocketTransport {\n private socket: WebSocket | null = null;\n private reconnectTimer: number | null = null;\n private isManualClose = false;\n private readonly pendingQueue: ClientMessage[] = [];\n private readonly config: FireworksRealtimeConfig;\n private readonly callbacks: WebSocketTransportCallbacks;\n private state: FireworksRealtimeState;\n\n constructor(config: FireworksRealtimeConfig, callbacks?: WebSocketTransportCallbacks) {\n this.config = config;\n this.callbacks = callbacks || {};\n this.state = {\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId: config.roomId,\n };\n }\n\n connect(): void {\n if (this.socket && (this.socket.readyState === window.WebSocket.OPEN || this.socket.readyState === window.WebSocket.CONNECTING)) {\n return;\n }\n\n this.isManualClose = false;\n\n try {\n this.socket = this.config.protocols\n ? new window.WebSocket(this.config.serverUrl, this.config.protocols)\n : new window.WebSocket(this.config.serverUrl);\n this.socket.binaryType = 'arraybuffer';\n } catch {\n this.callbacks.onError?.(new Error('Failed to create WebSocket connection.'));\n return;\n }\n\n this.socket.onopen = () => {\n this.updateState({ connected: true, joined: false });\n this.send({\n type: 'join',\n roomId: this.config.roomId,\n user: this.config.user,\n });\n };\n\n this.socket.onmessage = (event) => {\n const parsed = parseServerMessage(event.data);\n if (!parsed) {\n return;\n }\n this.handleServerMessage(parsed);\n };\n\n this.socket.onerror = () => {\n this.callbacks.onError?.(new Error('WebSocket transport error.'));\n };\n\n this.socket.onclose = () => {\n this.updateState({ connected: false, joined: false });\n this.scheduleReconnect();\n };\n }\n\n disconnect(): void {\n this.isManualClose = true;\n this.pendingQueue.length = 0;\n if (this.reconnectTimer != null) {\n window.clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (!this.socket) {\n return;\n }\n\n this.send({ type: 'leave' });\n this.socket.close();\n this.socket = null;\n }\n\n sendDanmaku(payload: { text: string; color?: string; kind?: FireworkKind }): void {\n this.send({\n type: 'danmaku.send',\n payload,\n });\n }\n\n sendFirework(payload: FireworkLaunchPayload): void {\n this.send({\n type: 'firework.launch',\n payload,\n });\n }\n\n getState(): FireworksRealtimeState {\n return this.state;\n }\n\n private send(message: ClientMessage): void {\n if (!this.socket || this.socket.readyState !== window.WebSocket.OPEN) {\n if (message.type === 'danmaku.send' || message.type === 'firework.launch') {\n this.pendingQueue.push(message);\n }\n return;\n }\n\n if ((message.type === 'danmaku.send' || message.type === 'firework.launch') && !this.state.joined) {\n this.pendingQueue.push(message);\n return;\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n private updateState(partial: Partial<FireworksRealtimeState>): void {\n this.state = {\n ...this.state,\n ...partial,\n };\n this.callbacks.onStateChange?.(this.state);\n }\n\n private handleServerMessage(message: ServerMessage): void {\n if (message.type === 'joined') {\n this.updateState({ roomId: message.roomId, onlineCount: message.onlineCount, joined: true });\n this.flushPendingQueue();\n return;\n }\n\n if (message.type === 'room.user_joined' || message.type === 'room.user_left') {\n this.updateState({ onlineCount: message.onlineCount, roomId: message.roomId, joined: true });\n this.flushPendingQueue();\n return;\n }\n\n if (message.type === 'room.snapshot') {\n this.updateState({ roomId: message.roomId, onlineCount: message.users.length, joined: true });\n this.flushPendingQueue();\n this.callbacks.onSnapshot?.(message);\n return;\n }\n\n if (message.type === 'danmaku.broadcast') {\n if (!this.state.joined) {\n this.updateState({ joined: true, roomId: message.roomId });\n this.flushPendingQueue();\n }\n this.callbacks.onDanmakuBroadcast?.(message.event);\n return;\n }\n\n if (message.type === 'firework.broadcast') {\n if (!this.state.joined) {\n this.updateState({ joined: true, roomId: message.roomId });\n this.flushPendingQueue();\n }\n this.callbacks.onFireworkBroadcast?.(message.event);\n return;\n }\n\n if (message.type === 'error') {\n this.callbacks.onError?.(new Error(`${message.code}: ${message.message}`));\n }\n }\n\n private scheduleReconnect(): void {\n const reconnect = this.config.reconnect ?? true;\n if (this.isManualClose || !reconnect) {\n return;\n }\n\n if (this.reconnectTimer != null) {\n return;\n }\n\n const delay = this.config.reconnectIntervalMs ?? 1500;\n this.reconnectTimer = window.setTimeout(() => {\n this.reconnectTimer = null;\n this.connect();\n }, delay);\n }\n\n private flushPendingQueue(): void {\n if (!this.socket || this.socket.readyState !== window.WebSocket.OPEN || !this.state.joined) {\n return;\n }\n\n while (this.pendingQueue.length > 0) {\n const message = this.pendingQueue.shift();\n if (!message) {\n break;\n }\n this.socket.send(JSON.stringify(message));\n }\n }\n}\n\nfunction parseServerMessage(raw: unknown): ServerMessage | null {\n const text = decodeMessage(raw);\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as ServerMessage;\n } catch {\n return null;\n }\n}\n\nfunction decodeMessage(raw: unknown): string | null {\n if (typeof raw === 'string') {\n return raw;\n }\n\n if (raw instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(raw));\n }\n\n if (ArrayBuffer.isView(raw)) {\n return new TextDecoder().decode(raw);\n }\n\n return null;\n}\n","'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { WebSocketTransport } from '../client/WebSocketTransport';\nimport type {\n FireworkLaunchPayload,\n FireworksRealtimeConfig,\n FireworksRealtimeState,\n FireworkKind,\n} from '../types';\n\ninterface UseFireworksRealtimeOptions {\n config?: FireworksRealtimeConfig;\n enabled?: boolean;\n onDanmakuBroadcast?: (event: {\n text: string;\n color?: string;\n kind?: FireworkKind;\n userId: string;\n timestamp: number;\n id: string;\n }) => void;\n onFireworkBroadcast?: (event: {\n id: string;\n payload: FireworkLaunchPayload;\n userId: string;\n timestamp: number;\n }) => void;\n onSnapshot?: (snapshot: {\n roomId: string;\n danmakuHistory: Array<{\n id: string;\n text: string;\n color?: string;\n kind?: FireworkKind;\n userId: string;\n timestamp: number;\n }>;\n fireworkHistory: Array<{\n id: string;\n payload: FireworkLaunchPayload;\n userId: string;\n timestamp: number;\n }>;\n }) => void;\n onError?: (error: Error) => void;\n onStateChange?: (state: FireworksRealtimeState) => void;\n}\n\nexport function useFireworksRealtime(options: UseFireworksRealtimeOptions) {\n const { config, enabled, onDanmakuBroadcast, onFireworkBroadcast, onSnapshot, onError, onStateChange } = options;\n const transportRef = useRef<WebSocketTransport | null>(null);\n const callbackRef = useRef({\n onDanmakuBroadcast,\n onFireworkBroadcast,\n onSnapshot,\n onError,\n onStateChange,\n });\n const serverUrl = config?.serverUrl ?? '';\n const roomId = config?.roomId ?? '';\n const userId = config?.user.userId ?? '';\n const nickname = config?.user.nickname ?? '';\n const avatarUrl = config?.user.avatarUrl ?? '';\n const reconnect = config?.reconnect ?? true;\n const reconnectIntervalMs = config?.reconnectIntervalMs ?? 1500;\n const [state, setState] = useState<FireworksRealtimeState>({\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId,\n });\n\n useEffect(() => {\n callbackRef.current = {\n onDanmakuBroadcast,\n onFireworkBroadcast,\n onSnapshot,\n onError,\n onStateChange,\n };\n }, [onDanmakuBroadcast, onError, onFireworkBroadcast, onSnapshot, onStateChange]);\n\n const normalizedConfig = useMemo(() => {\n if (!serverUrl || !roomId || !userId) {\n return undefined;\n }\n const protocols = Array.isArray(config?.protocols)\n ? [...config.protocols]\n : config?.protocols;\n\n return {\n serverUrl,\n roomId,\n user: {\n userId,\n nickname: nickname || undefined,\n avatarUrl: avatarUrl || undefined,\n },\n protocols,\n reconnect,\n reconnectIntervalMs,\n } satisfies FireworksRealtimeConfig;\n }, [avatarUrl, config?.protocols, nickname, reconnect, reconnectIntervalMs, roomId, serverUrl, userId]);\n\n useEffect(() => {\n if (!enabled || !normalizedConfig) {\n transportRef.current?.disconnect();\n transportRef.current = null;\n setState({\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId: normalizedConfig?.roomId,\n });\n return;\n }\n\n const transport = new WebSocketTransport(normalizedConfig, {\n onStateChange: (nextState) => {\n setState(nextState);\n callbackRef.current.onStateChange?.(nextState);\n },\n onDanmakuBroadcast: (event) => {\n callbackRef.current.onDanmakuBroadcast?.({\n id: event.id,\n text: event.text,\n color: event.color,\n kind: event.kind,\n userId: event.user.userId,\n timestamp: event.timestamp,\n });\n },\n onFireworkBroadcast: (event) => {\n callbackRef.current.onFireworkBroadcast?.({\n id: event.id,\n payload: event.payload,\n userId: event.user.userId,\n timestamp: event.timestamp,\n });\n },\n onSnapshot: (snapshot) => {\n callbackRef.current.onSnapshot?.({\n roomId: snapshot.roomId,\n danmakuHistory: snapshot.danmakuHistory.map((item) => ({\n id: item.id,\n text: item.text,\n color: item.color,\n kind: item.kind,\n userId: item.user.userId,\n timestamp: item.timestamp,\n })),\n fireworkHistory: snapshot.fireworkHistory.map((item) => ({\n id: item.id,\n payload: item.payload,\n userId: item.user.userId,\n timestamp: item.timestamp,\n })),\n });\n },\n onError: (error) => {\n callbackRef.current.onError?.(error);\n },\n });\n\n transport.connect();\n transportRef.current = transport;\n\n return () => {\n transport.disconnect();\n if (transportRef.current === transport) {\n transportRef.current = null;\n }\n };\n }, [enabled, normalizedConfig]);\n\n return useMemo(\n () => ({\n state,\n sendDanmaku: (payload: { text: string; color?: string; kind?: FireworkKind }) => {\n transportRef.current?.sendDanmaku(payload);\n },\n sendFirework: (payload: FireworkLaunchPayload) => {\n transportRef.current?.sendFirework(payload);\n },\n }),\n [state]\n );\n}\n","'use client';\n\nimport React, { useMemo, useRef, useState } from 'react';\nimport { DanmakuPanel } from './DanmakuPanel';\nimport { FireworksCanvas } from './FireworksCanvas';\nimport { FireworksControlPanel } from './FireworksControlPanel';\nimport { useDanmakuController } from '../hooks/useDanmakuController';\nimport { useFireworksEngine } from '../hooks/useFireworksEngine';\nimport { useFireworksRealtime } from '../hooks/useFireworksRealtime';\nimport type { FireworkKind, MikuFireworks3DProps } from '../types';\n\nexport function MikuFireworks3D({\n width = '100%',\n height = 520,\n className,\n defaultKind = 'normal',\n autoLaunchOnDanmaku = true,\n maxParticles,\n maxActiveFireworks,\n defaultAvatarUrl = '',\n onLaunch,\n onDanmakuSend,\n onError,\n onFpsReport,\n onRealtimeStateChange,\n realtime,\n}: MikuFireworks3DProps) {\n const [selectedKind, setSelectedKind] = useState<FireworkKind>(defaultKind);\n const [avatarUrl, setAvatarUrl] = useState(defaultAvatarUrl);\n const [autoLaunch, setAutoLaunch] = useState(autoLaunchOnDanmaku);\n const seenDanmakuIdsRef = useRef<Set<string>>(new Set());\n const seenFireworkIdsRef = useRef<Set<string>>(new Set());\n\n const {\n containerRef,\n canvasRef,\n launch,\n fps,\n engineReady,\n pendingLaunchCount,\n } = useFireworksEngine({\n maxParticles,\n maxActiveFireworks,\n onLaunch,\n onError,\n onFpsReport,\n });\n\n const { items, send, addIncoming, removeItem } = useDanmakuController({\n onSend: onDanmakuSend,\n });\n\n const realtimeEnabled = Boolean(realtime && (realtime.enabled ?? true));\n\n const logSync = (phase: string, eventId: string, extra?: Record<string, unknown>) => {\n const payload = {\n phase,\n eventId,\n engineReady,\n pendingLaunchCount,\n connected: realtimeApi.state.connected,\n joined: realtimeApi.state.joined,\n ...extra,\n };\n globalThis.console?.log('[MikuFireworks3D][sync_event]', payload);\n };\n\n const realtimeApi = useFireworksRealtime({\n enabled: realtimeEnabled,\n config: realtime,\n onStateChange: onRealtimeStateChange,\n onError,\n onDanmakuBroadcast: (event) => {\n if (seenDanmakuIdsRef.current.has(event.id)) {\n return;\n }\n seenDanmakuIdsRef.current.add(event.id);\n addIncoming({\n id: event.id,\n userId: event.userId,\n text: event.text,\n color: event.color,\n timestamp: event.timestamp,\n });\n },\n onFireworkBroadcast: (event) => {\n logSync('firework.broadcast.received', event.id, { kind: event.payload.kind });\n if (seenFireworkIdsRef.current.has(event.id)) {\n logSync('firework.broadcast.deduped', event.id);\n return;\n }\n seenFireworkIdsRef.current.add(event.id);\n launch(event.payload);\n logSync('firework.broadcast.dispatched', event.id, { kind: event.payload.kind });\n },\n onSnapshot: (snapshot) => {\n for (const danmaku of snapshot.danmakuHistory) {\n if (seenDanmakuIdsRef.current.has(danmaku.id)) {\n continue;\n }\n seenDanmakuIdsRef.current.add(danmaku.id);\n addIncoming({\n id: danmaku.id,\n userId: danmaku.userId,\n text: danmaku.text,\n color: danmaku.color,\n timestamp: danmaku.timestamp,\n });\n }\n for (const firework of snapshot.fireworkHistory) {\n logSync('firework.snapshot.received', firework.id, { kind: firework.payload.kind });\n if (seenFireworkIdsRef.current.has(firework.id)) {\n logSync('firework.snapshot.deduped', firework.id);\n continue;\n }\n seenFireworkIdsRef.current.add(firework.id);\n launch(firework.payload);\n logSync('firework.snapshot.dispatched', firework.id, { kind: firework.payload.kind });\n }\n },\n });\n\n const handleLaunch = (kind: FireworkKind) => {\n const payload = {\n kind,\n avatarUrl: kind === 'avatar' ? avatarUrl || undefined : undefined,\n };\n\n if (realtimeEnabled) {\n realtimeApi.sendFirework(payload);\n return;\n }\n\n launch(payload);\n };\n\n const handleSendDanmaku = (text: string) => {\n const result = send(text, undefined, {\n optimistic: !realtimeEnabled,\n });\n if (!result) {\n return;\n }\n\n const launchKind = result.launchKind ?? selectedKind;\n if (realtimeEnabled) {\n realtimeApi.sendDanmaku({\n text: result.message.text,\n color: result.message.color,\n kind: result.launchKind,\n });\n\n if (autoLaunch) {\n realtimeApi.sendFirework({\n kind: launchKind,\n avatarUrl: launchKind === 'avatar' ? avatarUrl || undefined : undefined,\n message: result.message,\n });\n }\n return;\n }\n\n if (autoLaunch || result.launchKind) {\n launch({\n kind: launchKind,\n avatarUrl: launchKind === 'avatar' ? avatarUrl || undefined : undefined,\n message: result.message,\n });\n }\n };\n\n const containerStyle = useMemo<React.CSSProperties>(\n () => ({\n width,\n height,\n minHeight: 360,\n }),\n [height, width]\n );\n\n return (\n <div className={`mx-auto flex w-full max-w-5xl flex-col gap-3 ${className || ''}`}>\n <div ref={containerRef} className=\"relative overflow-hidden rounded-2xl border border-slate-700\" style={containerStyle}>\n <FireworksCanvas canvasRef={canvasRef} />\n\n <div className=\"pointer-events-none absolute inset-0 overflow-hidden\">\n {items.map((item) => (\n <div\n key={item.id}\n onAnimationEnd={() => removeItem(item.id)}\n className=\"absolute right-[-30%] whitespace-nowrap text-sm font-semibold text-white drop-shadow\"\n style={{\n top: `${8 + item.track * 11}%`,\n color: item.color || '#ffffff',\n animation: `sa2kit-danmaku-move ${item.durationMs}ms linear forwards`,\n }}\n >\n {item.text}\n </div>\n ))}\n </div>\n </div>\n\n <FireworksControlPanel\n selectedKind={selectedKind}\n onKindChange={setSelectedKind}\n autoLaunchOnDanmaku={autoLaunch}\n onAutoLaunchChange={setAutoLaunch}\n avatarUrl={avatarUrl}\n onAvatarUrlChange={setAvatarUrl}\n onLaunch={() => handleLaunch(selectedKind)}\n fps={fps}\n realtimeConnected={realtimeEnabled ? realtimeApi.state.connected : undefined}\n onlineCount={realtimeEnabled ? realtimeApi.state.onlineCount : undefined}\n />\n\n <DanmakuPanel onSend={handleSendDanmaku} />\n\n <style>{`\\n @keyframes sa2kit-danmaku-move {\\n 0% {\\n transform: translateX(0);\\n opacity: 1;\\n }\\n 100% {\\n transform: translateX(-160vw);\\n opacity: 0.92;\\n }\\n }\\n `}</style>\n </div>\n );\n}\n","import type { RefObject } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n ScreenReceiverJoinedMessage,\n ScreenReceiverPeerLeftMessage,\n ScreenReceiverRoomStateMessage,\n} from './types';\n\nconst DEFAULT_STUN_SERVER: RTCIceServer = { urls: 'stun:stun.l.google.com:19302' };\n\nexport interface ScreenReceiverLogEntry {\n id: number;\n text: string;\n}\n\nexport interface UseScreenReceiverOptions {\n wsUrl: string;\n roomId: string;\n iceServers?: RTCIceServer[];\n maxLogs?: number;\n}\n\nexport interface UseScreenReceiverReturn {\n connect: () => Promise<void>;\n disconnect: () => void;\n clearLogs: () => void;\n logs: ScreenReceiverLogEntry[];\n isConnected: boolean;\n connectionState: RTCPeerConnectionState | 'idle';\n iceConnectionState: RTCIceConnectionState | 'idle';\n videoRef: RefObject<HTMLVideoElement>;\n stream: MediaStream | null;\n}\n\ntype PeerContext = {\n ws?: WebSocket;\n pc?: RTCPeerConnection;\n pendingCandidates: RTCIceCandidateInit[];\n selfPeerId?: string;\n publisherPeerId?: string;\n};\n\nfunction parseMessage(payload: MessageEvent['data']): Record<string, any> | null {\n try {\n if (typeof payload === 'string') return JSON.parse(payload);\n if (payload instanceof ArrayBuffer) return JSON.parse(new TextDecoder().decode(payload));\n return JSON.parse(String(payload));\n } catch {\n return null;\n }\n}\n\nexport function useScreenReceiver(options: UseScreenReceiverOptions): UseScreenReceiverReturn {\n const { wsUrl, roomId, iceServers = [DEFAULT_STUN_SERVER], maxLogs = 80 } = options;\n const [logs, setLogs] = useState<ScreenReceiverLogEntry[]>([]);\n const [isConnected, setIsConnected] = useState(false);\n const [connectionState, setConnectionState] = useState<RTCPeerConnectionState | 'idle'>('idle');\n const [iceConnectionState, setIceConnectionState] = useState<RTCIceConnectionState | 'idle'>('idle');\n const [stream, setStream] = useState<MediaStream | null>(null);\n const logIdRef = useRef(0);\n const peerRef = useRef<PeerContext>({ pendingCandidates: [] });\n const videoRef = useRef<HTMLVideoElement>(null);\n\n const appendLog = useCallback(\n (text: string) => {\n logIdRef.current += 1;\n setLogs((prev) => [...prev, { id: logIdRef.current, text }].slice(-maxLogs));\n },\n [maxLogs],\n );\n\n const disconnect = useCallback(() => {\n peerRef.current.ws?.close();\n peerRef.current.pc?.close();\n peerRef.current = { pendingCandidates: [] };\n setIsConnected(false);\n setConnectionState('idle');\n setIceConnectionState('idle');\n setStream(null);\n }, []);\n\n const connect = useCallback(async () => {\n disconnect();\n\n const normalizedWsUrl = wsUrl.trim();\n const normalizedRoomId = roomId.trim();\n if (!normalizedWsUrl) {\n appendLog('ws url is empty');\n return;\n }\n if (!normalizedRoomId) {\n appendLog('room id is empty');\n return;\n }\n\n appendLog(`connecting: ${normalizedWsUrl}`);\n\n let ws: WebSocket;\n try {\n ws = new WebSocket(normalizedWsUrl);\n } catch (error) {\n appendLog(`ws create error: ${String(error)}`);\n return;\n }\n\n const pc = new RTCPeerConnection({ iceServers });\n pc.addTransceiver('video', { direction: 'recvonly' });\n\n peerRef.current.ws = ws;\n peerRef.current.pc = pc;\n peerRef.current.pendingCandidates = [];\n\n ws.onopen = () => {\n appendLog('ws connected');\n setIsConnected(true);\n ws.send(JSON.stringify({ type: 'join', roomId: normalizedRoomId, role: 'viewer' }));\n };\n\n ws.onclose = () => {\n appendLog('ws closed');\n setIsConnected(false);\n };\n\n ws.onerror = (event) => {\n appendLog(`ws error: ${event.type}`);\n };\n\n ws.onmessage = async (event) => {\n const message = parseMessage(event.data);\n if (!message) {\n appendLog('ws message parse error');\n return;\n }\n\n if (message.type === 'joined') {\n const joined = message as ScreenReceiverJoinedMessage;\n peerRef.current.selfPeerId = joined.peerId;\n appendLog(`joined room ${joined.roomId} as ${joined.peerId}`);\n return;\n }\n\n if (message.type === 'room_state') {\n const roomState = message as ScreenReceiverRoomStateMessage;\n const broadcaster = roomState.peers.find((peer) => peer.role === 'broadcaster');\n if (broadcaster) {\n peerRef.current.publisherPeerId = broadcaster.peerId;\n appendLog(`broadcaster online: ${broadcaster.peerId}`);\n }\n return;\n }\n\n if (message.type === 'offer' && typeof message.sdp === 'string') {\n appendLog('offer received');\n peerRef.current.publisherPeerId = typeof message.fromPeerId === 'string' ? message.fromPeerId : undefined;\n await pc.setRemoteDescription({ type: 'offer', sdp: message.sdp });\n for (const candidate of peerRef.current.pendingCandidates) {\n try {\n await pc.addIceCandidate(candidate);\n } catch (error) {\n appendLog(`ice err: ${String(error)}`);\n }\n }\n peerRef.current.pendingCandidates = [];\n\n const answer = await pc.createAnswer();\n await pc.setLocalDescription(answer);\n ws.send(\n JSON.stringify({\n type: 'answer',\n sdp: answer.sdp,\n targetPeerId: peerRef.current.publisherPeerId,\n }),\n );\n appendLog('answer sent');\n return;\n }\n\n if (message.type === 'ice' && message.candidate) {\n if (!pc.remoteDescription) {\n peerRef.current.pendingCandidates.push(message.candidate as RTCIceCandidateInit);\n return;\n }\n try {\n await pc.addIceCandidate(message.candidate as RTCIceCandidateInit);\n } catch (error) {\n appendLog(`ice err: ${String(error)}`);\n }\n return;\n }\n\n if (message.type === 'peer_left') {\n const peerLeft = message as ScreenReceiverPeerLeftMessage;\n if (peerLeft.peerId === peerRef.current.publisherPeerId) {\n peerRef.current.publisherPeerId = undefined;\n appendLog(`publisher left: ${peerLeft.peerId}`);\n }\n return;\n }\n\n if (message.type === 'error') {\n appendLog(`server error: ${String(message.reason ?? 'unknown')}`);\n }\n };\n\n pc.ontrack = (event) => {\n const receivedStream = event.streams[0];\n if (receivedStream) {\n setStream(receivedStream);\n appendLog('track received');\n }\n };\n\n pc.onicecandidate = (event) => {\n if (!event.candidate) return;\n ws.send(\n JSON.stringify({\n type: 'ice',\n candidate: event.candidate,\n targetPeerId: peerRef.current.publisherPeerId,\n }),\n );\n };\n\n pc.onconnectionstatechange = () => {\n const state = pc.connectionState || 'new';\n setConnectionState(state);\n appendLog(`pc state: ${state}`);\n };\n\n pc.oniceconnectionstatechange = () => {\n const state = pc.iceConnectionState || 'new';\n setIceConnectionState(state);\n appendLog(`ice state: ${state}`);\n };\n }, [appendLog, disconnect, iceServers, roomId, wsUrl]);\n\n useEffect(() => () => disconnect(), [disconnect]);\n\n useEffect(() => {\n if (!videoRef.current) return;\n videoRef.current.srcObject = stream;\n }, [stream]);\n\n const clearLogs = useCallback(() => setLogs([]), []);\n\n return useMemo(\n () => ({\n connect,\n disconnect,\n clearLogs,\n logs,\n isConnected,\n connectionState,\n iceConnectionState,\n videoRef,\n stream,\n }),\n [clearLogs, connect, connectionState, disconnect, iceConnectionState, isConnected, logs, stream],\n );\n}\n","const DEFAULT_PORT = 8787;\nconst DEFAULT_PATH = '/ws';\n\nexport interface ResolveScreenReceiverSignalUrlOptions {\n signalUrl?: string;\n path?: string;\n port?: number;\n}\n\nexport function resolveScreenReceiverSignalUrl(\n options: ResolveScreenReceiverSignalUrlOptions = {},\n): string {\n const { signalUrl, path = DEFAULT_PATH, port = DEFAULT_PORT } = options;\n if (signalUrl && signalUrl.trim()) return signalUrl.trim();\n\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n if (typeof window !== 'undefined') {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n return `${protocol}//${window.location.host}${normalizedPath}`;\n }\n\n return `ws://127.0.0.1:${port}${normalizedPath}`;\n}\n","import React, { useMemo, useState } from 'react';\nimport { resolveScreenReceiverSignalUrl } from './signalUrl';\nimport { useScreenReceiver } from './useScreenReceiver';\n\nexport interface ScreenReceiverPanelProps {\n defaultSignalUrl?: string;\n defaultRoomId?: string;\n className?: string;\n}\n\nconst DEFAULT_ROOM_ID = 'screen-room-1';\n\nexport function ScreenReceiverPanel(props: ScreenReceiverPanelProps) {\n const { defaultSignalUrl, defaultRoomId = DEFAULT_ROOM_ID, className } = props;\n const initialSignalUrl = useMemo(\n () => resolveScreenReceiverSignalUrl({ signalUrl: defaultSignalUrl }),\n [defaultSignalUrl],\n );\n const [wsUrl, setWsUrl] = useState(initialSignalUrl);\n const [roomId, setRoomId] = useState(defaultRoomId);\n const receiver = useScreenReceiver({ wsUrl, roomId });\n const logs = useMemo(() => receiver.logs.map((entry) => entry.text).join('\\n'), [receiver.logs]);\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-4\">\n <div className=\"grid gap-3 md:grid-cols-[2fr,1fr,auto]\">\n <label className=\"flex flex-col gap-1 text-sm\">\n <span>Signaling WS</span>\n <input\n className=\"rounded-md border px-3 py-2\"\n value={wsUrl}\n onChange={(event) => setWsUrl(event.target.value)}\n />\n </label>\n <label className=\"flex flex-col gap-1 text-sm\">\n <span>Room</span>\n <input\n className=\"rounded-md border px-3 py-2\"\n value={roomId}\n onChange={(event) => setRoomId(event.target.value)}\n />\n </label>\n <div className=\"flex items-end gap-2\">\n <button\n onClick={() => void receiver.connect()}\n className=\"rounded-md border bg-black px-4 py-2 text-sm text-white\"\n >\n {receiver.isConnected ? 'Reconnect' : 'Connect'}\n </button>\n <button\n onClick={receiver.disconnect}\n className=\"rounded-md border px-4 py-2 text-sm\"\n >\n Disconnect\n </button>\n </div>\n </div>\n\n <div className=\"grid gap-3 md:grid-cols-3\">\n <StatusItem label=\"WebSocket\" value={receiver.isConnected ? 'connected' : 'idle'} />\n <StatusItem label=\"PeerConnection\" value={receiver.connectionState} />\n <StatusItem label=\"ICE State\" value={receiver.iceConnectionState} />\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-[3fr,2fr]\">\n <div className=\"rounded-xl border bg-black p-3\">\n <video\n ref={receiver.videoRef}\n autoPlay\n playsInline\n controls\n muted\n className=\"h-[360px] w-full rounded-lg bg-black\"\n />\n </div>\n <div className=\"rounded-xl border p-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-semibold\">Session Log</p>\n <button\n onClick={receiver.clearLogs}\n className=\"text-xs underline-offset-2 hover:underline\"\n >\n Clear\n </button>\n </div>\n <pre className=\"mt-3 h-[320px] overflow-auto rounded-lg border bg-slate-50 p-3 text-xs\">\n {logs || 'No logs yet.'}\n </pre>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction StatusItem({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"rounded-md border px-3 py-2\">\n <p className=\"text-xs text-slate-500\">{label}</p>\n <p className=\"text-sm font-medium\">{value}</p>\n </div>\n );\n}\n","import type { FestivalCardConfig } from '../types';\n\nexport const DEFAULT_FESTIVAL_CARD_CONFIG: FestivalCardConfig = {\n id: 'default-festival-card',\n name: 'Holiday Card',\n theme: 'winter',\n coverTitle: 'Happy Holidays',\n coverSubtitle: 'Warm wishes for you',\n background: {\n colorA: '#0c1a34',\n colorB: '#1f4f8a',\n },\n backgroundMusic: {\n src: '',\n loop: true,\n autoPlay: false,\n volume: 0.5,\n },\n pages: [\n {\n id: 'page-1',\n title: '封面',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p1-text-1',\n type: 'text',\n x: 50,\n y: 20,\n content: '新年快乐',\n fontSize: 34,\n fontWeight: 700,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p1-text-2',\n type: 'text',\n x: 50,\n y: 36,\n content: '愿这一年平安喜乐',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#dbeafe',\n },\n {\n id: 'p1-image-1',\n type: 'image',\n x: 50,\n y: 68,\n width: 72,\n height: 42,\n src: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 16,\n alt: 'holiday',\n isBackground: false,\n },\n ],\n },\n {\n id: 'page-2',\n title: '祝福',\n background: { color: '#1a3766' },\n elements: [\n {\n id: 'p2-text-1',\n type: 'text',\n x: 50,\n y: 28,\n content: '愿你新岁:',\n fontSize: 28,\n fontWeight: 700,\n align: 'center',\n color: '#fef3c7',\n },\n {\n id: 'p2-text-2',\n type: 'text',\n x: 50,\n y: 42,\n content: '所得皆所期,所失亦无碍',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p2-text-3',\n type: 'text',\n x: 50,\n y: 55,\n content: '愿你的每一步都走向光亮',\n fontSize: 16,\n fontWeight: 400,\n align: 'center',\n color: '#dbeafe',\n },\n ],\n },\n {\n id: 'page-3',\n title: '落款',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p3-image-1',\n type: 'image',\n x: 50,\n y: 34,\n width: 60,\n height: 42,\n src: 'https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 14,\n alt: 'gift',\n isBackground: false,\n },\n {\n id: 'p3-text-1',\n type: 'text',\n x: 50,\n y: 72,\n content: 'Best wishes, from SA2Kit',\n fontSize: 18,\n fontWeight: 600,\n align: 'center',\n color: '#f8fafc',\n },\n ],\n },\n ],\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG } from './defaults';\nimport type { FestivalCardConfig, FestivalCardPage } from '../types';\n\nconst ensurePage = (page: FestivalCardPage, index: number): FestivalCardPage => ({\n id: page.id || `page-${index + 1}`,\n title: page.title || `第 ${index + 1} 页`,\n elements: Array.isArray(page.elements) ? page.elements : [],\n background: page.background || {},\n});\n\nexport const normalizeFestivalCardConfig = (\n config?: Partial<FestivalCardConfig> | null\n): FestivalCardConfig => {\n const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;\n\n return {\n ...DEFAULT_FESTIVAL_CARD_CONFIG,\n ...config,\n background: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.background,\n ...(config?.background || {}),\n },\n backgroundMusic: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,\n ...(config?.backgroundMusic || {}),\n src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? '',\n },\n pages: pages.map(ensurePage),\n };\n};\n\nexport const resizeFestivalCardPages = (config: FestivalCardConfig, pageCount: number): FestivalCardConfig => {\n const safeCount = Math.max(1, Math.min(12, Math.floor(pageCount || 1)));\n const nextPages = [...config.pages];\n\n while (nextPages.length < safeCount) {\n const idx = nextPages.length;\n nextPages.push({\n id: `page-${idx + 1}`,\n title: `第 ${idx + 1} 页`,\n elements: [],\n background: {},\n });\n }\n\n return {\n ...config,\n pages: nextPages.slice(0, safeCount),\n };\n};\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig } from '../types';\n\ninterface UseFestivalCardConfigOptions {\n initialConfig?: FestivalCardConfig;\n fetchConfig?: () => Promise<FestivalCardConfig>;\n onSave?: (config: FestivalCardConfig) => Promise<void> | void;\n}\n\nexport const useFestivalCardConfig = (options?: UseFestivalCardConfigOptions) => {\n const [config, setConfig] = useState<FestivalCardConfig>(() =>\n normalizeFestivalCardConfig(options?.initialConfig || DEFAULT_FESTIVAL_CARD_CONFIG)\n );\n const [loading, setLoading] = useState(Boolean(options?.fetchConfig));\n const [saving, setSaving] = useState(false);\n\n useEffect(() => {\n const fetchConfig = options?.fetchConfig;\n if (!fetchConfig) return;\n\n let active = true;\n void fetchConfig()\n .then((value) => {\n if (!active) return;\n setConfig(normalizeFestivalCardConfig(value));\n })\n .finally(() => {\n if (active) setLoading(false);\n });\n\n return () => {\n active = false;\n };\n }, [options?.fetchConfig]);\n\n const save = useCallback(async () => {\n const onSave = options?.onSave;\n if (!onSave) return;\n setSaving(true);\n try {\n await onSave(config);\n } finally {\n setSaving(false);\n }\n }, [config, options?.onSave]);\n\n return useMemo(\n () => ({\n config,\n setConfig,\n loading,\n saving,\n save,\n }),\n [config, loading, save, saving]\n );\n};\n","'use client';\n\nimport React from 'react';\nimport type { FestivalCardElement, FestivalCardPage } from '../types';\n\nconst elementStyle = (element: FestivalCardElement): React.CSSProperties => ({\n position: 'absolute',\n zIndex: 2,\n left: `${element.x}%`,\n top: `${element.y}%`,\n width: `${element.width ?? 70}%`,\n height: element.height ? `${element.height}%` : undefined,\n transform: 'translate(-50%, -50%)',\n});\n\nconst renderElement = (element: FestivalCardElement) => {\n if (element.type === 'text') {\n return (\n <div\n key={element.id}\n style={{\n ...elementStyle(element),\n color: element.color || '#f8fafc',\n fontSize: element.fontSize || 18,\n fontWeight: element.fontWeight || 500,\n fontFamily: element.fontFamily || 'inherit',\n textAlign: element.align || 'left',\n lineHeight: 1.45,\n whiteSpace: 'pre-wrap',\n }}\n >\n {element.content}\n </div>\n );\n }\n\n return (\n <img\n key={element.id}\n src={element.src}\n alt={element.alt || 'festival-card-image'}\n style={{\n ...elementStyle(element),\n objectFit: element.fit || 'cover',\n borderRadius: element.borderRadius || 0,\n overflow: 'hidden',\n boxShadow: '0 12px 30px rgba(2, 6, 23, 0.32)',\n }}\n />\n );\n};\n\ninterface FestivalCardPageRendererProps {\n page: FestivalCardPage;\n}\n\nexport const FestivalCardPageRenderer: React.FC<FestivalCardPageRendererProps> = ({ page }) => {\n const backgroundElement = page.elements.find(\n (element): element is Extract<FestivalCardElement, { type: 'image' }> => element.type === 'image' && Boolean(element.isBackground)\n );\n const foregroundElements = page.elements.filter((element) => !(element.type === 'image' && element.isBackground));\n\n return (\n <div\n className=\"relative h-full w-full overflow-hidden rounded-2xl\"\n style={{\n backgroundColor: page.background?.color || '#0f172a',\n backgroundImage: backgroundElement\n ? `url(${backgroundElement.src})`\n : page.background?.image\n ? `url(${page.background.image})`\n : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n <div className=\"absolute inset-0 bg-slate-950/20\" />\n {foregroundElements.map(renderElement)}\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig } from '../types';\nimport { FestivalCardPageRenderer } from './FestivalCardPageRenderer';\n\nexport interface FestivalCardBook3DProps {\n config: FestivalCardConfig;\n className?: string;\n}\n\nexport const FestivalCardBook3D: React.FC<FestivalCardBook3DProps> = ({ config, className }) => {\n const [currentPage, setCurrentPage] = useState(0);\n const normalized = useMemo(() => normalizeFestivalCardConfig(config), [config]);\n const pages = normalized.pages;\n\n const canPrev = currentPage > 0;\n const canNext = currentPage < pages.length - 1;\n\n return (\n <div className={className}>\n <div className=\"w-full min-h-screen px-0 py-4\">\n <div className=\"mx-auto w-full text-center text-slate-100\">\n <h3 className=\"mb-3 text-lg font-semibold\">{normalized.coverTitle || 'Festival Card'}</h3>\n </div>\n\n <div className=\"mx-auto w-full\">\n <div className=\"relative h-[calc(100vh-170px)] min-h-[460px]\">\n {pages.map((page, index) => (\n <div\n key={page.id}\n className=\"absolute inset-0 transition-opacity duration-500 ease-out\"\n style={{\n opacity: index === currentPage ? 1 : 0,\n pointerEvents: index === currentPage ? 'auto' : 'none',\n }}\n >\n <FestivalCardPageRenderer page={page} />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-4 flex justify-center gap-3\">\n <button\n type=\"button\"\n disabled={!canPrev}\n onClick={() => setCurrentPage((p) => Math.max(0, p - 1))}\n className=\"rounded-full bg-white px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n 上一页\n </button>\n <button\n type=\"button\"\n disabled={!canNext}\n onClick={() => setCurrentPage((p) => Math.min(pages.length - 1, p + 1))}\n className=\"rounded-full bg-sky-300 px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n 下一页\n </button>\n </div>\n </div>\n\n {normalized.backgroundMusic?.src ? (\n <audio\n src={normalized.backgroundMusic.src}\n autoPlay={normalized.backgroundMusic.autoPlay}\n loop={normalized.backgroundMusic.loop}\n controls\n className=\"mt-3 w-full\"\n />\n ) : null}\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { resizeFestivalCardPages } from '../core';\nimport type { FestivalCardConfig, FestivalCardElement } from '../types';\n\ninterface FestivalCardConfigEditorProps {\n value: FestivalCardConfig;\n onChange: (config: FestivalCardConfig) => void;\n}\n\nconst createTextElement = (pageIndex: number): FestivalCardElement => ({\n id: `text-${Date.now()}-${pageIndex}`,\n type: 'text',\n x: 50,\n y: 50,\n width: 70,\n content: '请输入文字',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#ffffff',\n fontFamily: 'inherit',\n});\n\nconst createImageElement = (pageIndex: number): FestivalCardElement => ({\n id: `image-${Date.now()}-${pageIndex}`,\n type: 'image',\n x: 50,\n y: 50,\n width: 60,\n height: 40,\n src: 'https://images.unsplash.com/photo-1482517967863-00e15c9b44be?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 12,\n});\n\nexport const FestivalCardConfigEditor: React.FC<FestivalCardConfigEditorProps> = ({ value, onChange }) => {\n const [activePageIndex, setActivePageIndex] = useState(0);\n const page = value.pages[activePageIndex];\n const canEditPage = Boolean(page);\n const pageOptions = useMemo(() => value.pages.map((_, index) => index), [value.pages]);\n\n const handlePageCountChange = (nextRaw: number) => {\n const next = Number.isFinite(nextRaw) ? Math.max(1, Math.min(12, Math.floor(nextRaw))) : value.pages.length;\n const resized = resizeFestivalCardPages(value, next);\n onChange(resized);\n if (activePageIndex > resized.pages.length - 1) {\n setActivePageIndex(resized.pages.length - 1);\n }\n };\n\n const updateElement = (elementId: string, patch: Partial<FestivalCardElement>) => {\n onChange({\n ...value,\n pages: value.pages.map((p, pIndex) =>\n pIndex === activePageIndex\n ? {\n ...p,\n elements: p.elements.map((el) => (el.id === elementId ? { ...el, ...patch } as FestivalCardElement : el)),\n }\n : p\n ),\n });\n };\n\n const removeElement = (elementId: string) => {\n onChange({\n ...value,\n pages: value.pages.map((p, pIndex) =>\n pIndex === activePageIndex\n ? {\n ...p,\n elements: p.elements.filter((el) => el.id !== elementId),\n }\n : p\n ),\n });\n };\n\n const updatePage = (patch: Partial<FestivalCardConfig['pages'][number]>) => {\n onChange({\n ...value,\n pages: value.pages.map((p, index) => (index === activePageIndex ? { ...p, ...patch } : p)),\n });\n };\n\n const numberFieldClassName =\n 'w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100';\n\n return (\n <div className=\"rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm\">\n <div className=\"grid gap-3\">\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面数量</span>\n <input\n type=\"number\"\n min={1}\n max={12}\n value={value.pages.length}\n onChange={(event) => handlePageCountChange(Number(event.target.value))}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">背景音乐 URL</span>\n <input\n type=\"url\"\n value={value.backgroundMusic?.src || ''}\n onChange={(event) =>\n onChange({\n ...value,\n backgroundMusic: {\n ...value.backgroundMusic,\n src: event.target.value,\n },\n })\n }\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面标题</span>\n <input\n type=\"text\"\n value={page?.title || ''}\n onChange={(event) => updatePage({ title: event.target.value })}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面背景色</span>\n <input\n type=\"color\"\n value={page?.background?.color || '#0f172a'}\n onChange={(event) =>\n updatePage({\n background: {\n ...page?.background,\n color: event.target.value,\n },\n })\n }\n className=\"h-10 w-full rounded-lg border border-slate-300 bg-white p-1\"\n />\n </label>\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面背景图 URL</span>\n <input\n type=\"url\"\n value={page?.background?.image || ''}\n onChange={(event) =>\n updatePage({\n background: {\n ...page?.background,\n image: event.target.value,\n },\n })\n }\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n </div>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">编辑页面</span>\n <select\n value={activePageIndex}\n onChange={(event) => setActivePageIndex(Number(event.target.value))}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n >\n {pageOptions.map((index) => (\n <option key={index} value={index}>\n 第 {index + 1} 页\n </option>\n ))}\n </select>\n </label>\n </div>\n\n {canEditPage ? (\n <div className=\"mt-4\">\n <div className=\"mb-3 flex gap-2\">\n <button\n type=\"button\"\n onClick={() =>\n onChange({\n ...value,\n pages: value.pages.map((p, index) =>\n index === activePageIndex ? { ...p, elements: [...p.elements, createTextElement(index)] } : p\n ),\n })\n }\n className=\"rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white\"\n >\n + 文字\n </button>\n <button\n type=\"button\"\n onClick={() =>\n onChange({\n ...value,\n pages: value.pages.map((p, index) =>\n index === activePageIndex ? { ...p, elements: [...p.elements, createImageElement(index)] } : p\n ),\n })\n }\n className=\"rounded-lg bg-sky-600 px-3 py-2 text-sm font-medium text-white\"\n >\n + 图片\n </button>\n </div>\n\n <div className=\"grid max-h-[340px] gap-2.5 overflow-auto pr-1\">\n {(page?.elements ?? []).map((element) => (\n <div key={element.id} className=\"rounded-xl border border-slate-200 bg-slate-50 p-3\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-semibold tracking-wide text-slate-500\">{element.type.toUpperCase()}</div>\n <button\n type=\"button\"\n onClick={() => removeElement(element.id)}\n className=\"rounded-md border border-rose-300 bg-rose-50 px-2 py-1 text-xs font-medium text-rose-700\"\n >\n 删除\n </button>\n </div>\n {element.type === 'text' ? (\n <div className=\"grid gap-2\">\n <textarea\n value={element.content}\n onChange={(event) => updateElement(element.id, { content: event.target.value })}\n rows={3}\n className=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1 text-xs text-slate-600\">\n X(%)\n <input\n type=\"number\"\n value={element.x}\n onChange={(event) => updateElement(element.id, { x: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n Y(%)\n <input\n type=\"number\"\n value={element.y}\n onChange={(event) => updateElement(element.id, { y: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 宽度(%)\n <input\n type=\"number\"\n value={element.width ?? 70}\n onChange={(event) => updateElement(element.id, { width: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 字号(px)\n <input\n type=\"number\"\n value={element.fontSize ?? 18}\n onChange={(event) => updateElement(element.id, { fontSize: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 字重\n <input\n type=\"number\"\n min={100}\n max={900}\n step={100}\n value={element.fontWeight ?? 500}\n onChange={(event) => updateElement(element.id, { fontWeight: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 对齐\n <select\n value={element.align || 'left'}\n onChange={(event) =>\n updateElement(element.id, { align: event.target.value as 'left' | 'center' | 'right' })\n }\n className={numberFieldClassName}\n >\n <option value=\"left\">left</option>\n <option value=\"center\">center</option>\n <option value=\"right\">right</option>\n </select>\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600 sm:col-span-2\">\n 字体\n <input\n type=\"text\"\n value={element.fontFamily || ''}\n onChange={(event) => updateElement(element.id, { fontFamily: event.target.value })}\n placeholder=\"inherit / serif / sans-serif / PingFang SC\"\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600 sm:col-span-2\">\n 文字颜色\n <div className=\"grid grid-cols-[64px_1fr] gap-2\">\n <input\n type=\"color\"\n value={element.color || '#ffffff'}\n onChange={(event) => updateElement(element.id, { color: event.target.value })}\n className=\"h-10 rounded-lg border border-slate-300 bg-white p-1\"\n />\n <input\n type=\"text\"\n value={element.color || '#ffffff'}\n onChange={(event) => updateElement(element.id, { color: event.target.value })}\n className={numberFieldClassName}\n />\n </div>\n </label>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-2\">\n <input\n type=\"url\"\n value={element.src}\n onChange={(event) => updateElement(element.id, { src: event.target.value })}\n className=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1 text-xs text-slate-600\">\n X(%)\n <input\n type=\"number\"\n value={element.x}\n onChange={(event) => updateElement(element.id, { x: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n Y(%)\n <input\n type=\"number\"\n value={element.y}\n onChange={(event) => updateElement(element.id, { y: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 宽度(%)\n <input\n type=\"number\"\n value={element.width ?? 60}\n onChange={(event) => updateElement(element.id, { width: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 高度(%)\n <input\n type=\"number\"\n value={element.height ?? 40}\n onChange={(event) => updateElement(element.id, { height: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 圆角(px)\n <input\n type=\"number\"\n value={element.borderRadius ?? 0}\n onChange={(event) => updateElement(element.id, { borderRadius: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 填充\n <select\n value={element.fit || 'cover'}\n onChange={(event) => updateElement(element.id, { fit: event.target.value as 'cover' | 'contain' })}\n className={numberFieldClassName}\n >\n <option value=\"cover\">cover</option>\n <option value=\"contain\">contain</option>\n </select>\n </label>\n </div>\n <label className=\"inline-flex items-center gap-2 text-sm text-slate-700\">\n <input\n type=\"checkbox\"\n checked={Boolean(element.isBackground)}\n onChange={(event) => updateElement(element.id, { isBackground: event.target.checked })}\n className=\"h-4 w-4 rounded border-slate-300 text-sky-600\"\n />\n 作为本页背景图\n </label>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { normalizeFestivalCardConfig } from '../core';\nimport { useFestivalCardConfig } from '../hooks/useFestivalCardConfig';\nimport type { FestivalCardConfig } from '../types';\nimport { FestivalCardBook3D } from './FestivalCardBook3D';\nimport { FestivalCardConfigEditor } from './FestivalCardConfigEditor';\n\ninterface FestivalCardStudioProps {\n initialConfig?: FestivalCardConfig;\n fetchConfig?: () => Promise<FestivalCardConfig>;\n onSave?: (config: FestivalCardConfig) => Promise<void> | void;\n}\n\nexport const FestivalCardStudio: React.FC<FestivalCardStudioProps> = ({ initialConfig, fetchConfig, onSave }) => {\n const { config, setConfig, loading, save, saving } = useFestivalCardConfig({\n initialConfig: normalizeFestivalCardConfig(initialConfig),\n fetchConfig,\n onSave,\n });\n\n if (loading) return <div>加载中...</div>;\n\n return (\n <div className=\"grid items-start gap-4 lg:grid-cols-[1.45fr_1fr]\">\n <FestivalCardBook3D config={config} className=\"h-full\" />\n <div className=\"lg:sticky lg:top-4\">\n <FestivalCardConfigEditor value={config} onChange={setConfig} />\n {onSave ? (\n <button\n type=\"button\"\n onClick={() => void save()}\n disabled={saving}\n className=\"mt-3 w-full rounded-lg bg-slate-900 px-4 py-2.5 text-sm font-medium text-white disabled:opacity-60\"\n >\n {saving ? '保存中...' : '保存配置'}\n </button>\n ) : null}\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FestivalCardStudio } from './FestivalCardStudio';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../types';\n\ninterface FestivalCardConfigPageProps {\n apiBase?: string;\n cardId?: string;\n mainPagePath?: string;\n}\n\nexport const FestivalCardConfigPage: React.FC<FestivalCardConfigPageProps> = ({\n apiBase = '/api/festivalCard',\n cardId,\n mainPagePath = '/festivalCard',\n}) => {\n const [list, setList] = useState<FestivalCardConfigSummary[]>([]);\n const [selectedId, setSelectedId] = useState(cardId || 'default-festival-card');\n\n const parseListResponse = (data: unknown): FestivalCardConfigSummary[] => {\n if (!data || typeof data !== 'object') return [];\n const payload = (data as { data?: unknown }).data;\n if (!Array.isArray(payload)) return [];\n return payload\n .filter((item): item is FestivalCardConfigSummary => Boolean(item && typeof item === 'object' && typeof (item as { id?: unknown }).id === 'string'))\n .map((item) => ({ id: item.id, name: item.name }));\n };\n\n const parseConfigResponse = (data: unknown): FestivalCardConfig => {\n if (!data || typeof data !== 'object') return normalizeFestivalCardConfig();\n const payload = (data as { data?: unknown }).data;\n if (!payload || typeof payload !== 'object') return normalizeFestivalCardConfig();\n return normalizeFestivalCardConfig(payload as Partial<FestivalCardConfig>);\n };\n\n const reloadList = useCallback(async () => {\n try {\n const response = await fetch(apiBase, { cache: 'no-store' });\n if (!response.ok) throw new Error(`加载卡片列表失败: ${response.status}`);\n const data: unknown = await response.json();\n const items = parseListResponse(data);\n if (items.length === 0) {\n const fallbackId = 'default-festival-card';\n const fallbackConfig = normalizeFestivalCardConfig({ id: fallbackId, name: 'Holiday Card' });\n await fetch(`${apiBase}/${encodeURIComponent(fallbackId)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config: fallbackConfig }),\n });\n setList([{ id: fallbackId, name: fallbackConfig.name }]);\n setSelectedId(fallbackId);\n return;\n }\n setList(items);\n } catch (error) {\n window.alert((error as Error).message || '加载卡片列表失败');\n }\n }, [apiBase]);\n\n useEffect(() => {\n void reloadList();\n }, [reloadList]);\n\n const fetchConfig = async (): Promise<FestivalCardConfig> => {\n const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, { cache: 'no-store' });\n if (!response.ok) {\n const message = `加载配置失败: ${response.status}`;\n window.alert(message);\n throw new Error(message);\n }\n const data: unknown = await response.json();\n return parseConfigResponse(data);\n };\n\n const saveConfig = async (config: FestivalCardConfig) => {\n try {\n const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config }),\n });\n if (!response.ok) throw new Error(`保存失败: ${response.status}`);\n await reloadList();\n window.alert('保存成功');\n } catch (error) {\n window.alert((error as Error).message || '保存失败');\n throw error;\n }\n };\n\n const createNew = async () => {\n const name = window.prompt('请输入新卡片名称');\n if (!name) return;\n const id = `festival-${Date.now()}`;\n const config = normalizeFestivalCardConfig({\n id,\n name,\n });\n try {\n const response = await fetch(`${apiBase}/${encodeURIComponent(id)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config }),\n });\n if (!response.ok) throw new Error(`创建失败: ${response.status}`);\n setSelectedId(id);\n await reloadList();\n window.alert('新卡片创建成功');\n } catch (error) {\n window.alert((error as Error).message || '创建失败');\n }\n };\n\n const mainLink = useMemo(() => `${mainPagePath}?cardId=${encodeURIComponent(selectedId)}`, [mainPagePath, selectedId]);\n\n return (\n <div className=\"grid gap-4\">\n <div className=\"flex flex-wrap items-center gap-2 rounded-xl border border-slate-800 bg-slate-900/50 p-3\">\n <select\n value={selectedId}\n onChange={(event) => setSelectedId(event.target.value)}\n className=\"min-w-[240px] rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n >\n {list.map((item) => (\n <option key={item.id} value={item.id}>\n {item.name || item.id}\n </option>\n ))}\n </select>\n <button type=\"button\" onClick={() => void createNew()} className=\"rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white\">\n 新建卡片\n </button>\n <a href={mainLink} className=\"rounded-lg border border-sky-200 bg-sky-50 px-3 py-2 text-sm text-sky-700\">\n 打开主页面\n </a>\n </div>\n\n <FestivalCardStudio fetchConfig={fetchConfig} onSave={saveConfig} />\n </div>\n );\n};\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { FestivalCardBook3D } from './FestivalCardBook3D';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../types';\n\ninterface FestivalCardManagedPageProps {\n apiBase?: string;\n cardId?: string;\n}\n\nconst isSummary = (value: unknown): value is FestivalCardConfigSummary => {\n if (!value || typeof value !== 'object') return false;\n return typeof (value as { id?: unknown }).id === 'string';\n};\n\nconst parseListResponse = (data: unknown): FestivalCardConfigSummary[] => {\n if (!data || typeof data !== 'object') return [];\n const payload = (data as { data?: unknown }).data;\n if (!Array.isArray(payload)) return [];\n return payload.filter(isSummary).map((item) => ({ id: item.id, name: item.name }));\n};\n\nconst parseConfigResponse = (data: unknown): FestivalCardConfig | null => {\n if (!data || typeof data !== 'object') return null;\n const payload = (data as { data?: unknown }).data;\n if (!payload || typeof payload !== 'object') return null;\n if (!Array.isArray((payload as FestivalCardConfig).pages)) return null;\n return payload as FestivalCardConfig;\n};\n\nexport const FestivalCardManagedPage: React.FC<FestivalCardManagedPageProps> = ({\n apiBase = '/api/festivalCard',\n cardId,\n}) => {\n const [currentCardId, setCurrentCardId] = useState<string>(cardId || '');\n const [config, setConfig] = useState<FestivalCardConfig | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const fetchList = async () => {\n const response = await fetch(apiBase, { cache: 'no-store' });\n const data: unknown = await response.json();\n const items = parseListResponse(data);\n const first = items[0];\n if (!currentCardId && first) {\n setCurrentCardId(first.id);\n }\n };\n\n void fetchList();\n }, [apiBase, currentCardId]);\n\n useEffect(() => {\n if (!currentCardId) return;\n setLoading(true);\n void fetch(`${apiBase}/${encodeURIComponent(currentCardId)}`, { cache: 'no-store' })\n .then((res) => res.json() as Promise<unknown>)\n .then((data) => setConfig(parseConfigResponse(data)))\n .finally(() => setLoading(false));\n }, [apiBase, currentCardId]);\n\n return (\n <div>{loading || !config ? <div className=\"py-12 text-center text-slate-400\">加载中...</div> : <FestivalCardBook3D config={config} />}</div>\n );\n};\n","import type { FestivalCardDbAdapter } from '../types';\n\nlet dbAdapter: FestivalCardDbAdapter | null = null;\n\nexport const initializeFestivalCardDb = (adapter: FestivalCardDbAdapter): void => {\n dbAdapter = adapter;\n};\n\nexport const getFestivalCardDb = (): FestivalCardDbAdapter | null => dbAdapter;\n","import { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport { getFestivalCardDb } from '../server/db';\nimport type {\n FestivalCardConfig,\n FestivalCardConfigSummary,\n FestivalCardDbAdapter,\n FestivalCardServiceOptions,\n} from '../types';\n\nexport class FestivalCardService {\n private db: FestivalCardDbAdapter | null;\n\n constructor(options?: FestivalCardServiceOptions) {\n this.db = options?.db || getFestivalCardDb();\n }\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n if (!this.db) {\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n if (this.db.listConfigs) {\n const list = await this.db.listConfigs();\n return list.length > 0\n ? list\n : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n async getConfig(cardId = 'default-festival-card'): Promise<FestivalCardConfig> {\n if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;\n const config = await this.db.getConfig(cardId);\n return normalizeFestivalCardConfig(config);\n }\n\n async saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig> {\n const normalized = normalizeFestivalCardConfig(config);\n if (!this.db) return normalized;\n await this.db.saveConfig(cardId, normalized);\n return normalized;\n }\n\n async deleteConfig(cardId: string): Promise<void> {\n if (!this.db?.deleteConfig) return;\n await this.db.deleteConfig(cardId);\n }\n}\n\nconst memoryStore = new Map<string, FestivalCardConfig>();\nconst defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card';\nif (!memoryStore.has(defaultId)) {\n memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);\n}\n\nexport const createInMemoryFestivalCardDb = (): FestivalCardDbAdapter => ({\n listConfigs() {\n return Promise.resolve(\n Array.from(memoryStore.entries()).map(([id, config]) => ({\n id,\n name: config.name || id,\n }))\n );\n },\n getConfig(id: string) {\n return Promise.resolve(memoryStore.get(id) || null);\n },\n saveConfig(id: string, config: FestivalCardConfig) {\n memoryStore.set(id, config);\n return Promise.resolve();\n },\n deleteConfig(id: string) {\n memoryStore.delete(id);\n return Promise.resolve();\n },\n});\n","/**\n * React Native 平台存储适配器 (AsyncStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 动态导入 AsyncStorage(避免在非 RN 环境报错)\nlet AsyncStorage: any = null;\n\ntry {\n AsyncStorage = require('@react-native-async-storage/async-storage').default;\n} catch (e) {\n // AsyncStorage 不可用(非 React Native 环境)\n // 这是正常的,不需要警告\n}\n\nexport class ReactNativeStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n if (!AsyncStorage) return null;\n\n try {\n return await AsyncStorage.getItem(key);\n } catch (error) {\n console.error('[ReactNativeStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.setItem(key, value);\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[ReactNativeStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.removeItem(key);\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[ReactNativeStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.clear();\n } catch (error) {\n console.error('[ReactNativeStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // React Native 没有原生的跨实例存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * React Native AsyncStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ReactNativeStorageAdapter } from '../adapters/react-native-adapter';\n\n// 创建单例适配器\nconst asyncStorage = new ReactNativeStorageAdapter();\n\n/**\n * React Native 的 AsyncStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useAsyncStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(asyncStorage, key, defaultValue);\n}\n\n","/**\n * 小程序平台存储适配器 (wx.storage / Taro.storage)\n * 仅在小程序环境下加载和使用\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 延迟加载 Taro(仅在小程序环境)\nlet Taro: any = null;\nlet taroLoadPromise: Promise<void> | null = null;\nlet isMiniAppEnvironment: boolean | null = null;\n\n/**\n * 检测是否是小程序环境\n */\nfunction checkIsMiniApp(): boolean {\n if (isMiniAppEnvironment !== null) return isMiniAppEnvironment;\n\n // 服务端环境,不是小程序\n if (typeof window === 'undefined') {\n isMiniAppEnvironment = false;\n return false;\n }\n\n // 检测是否有小程序全局对象\n const globalObj = window as any;\n isMiniAppEnvironment = !!(\n globalObj.wx || // 微信小程序\n globalObj.my || // 支付宝小程序\n globalObj.swan || // 百度小程序\n globalObj.tt || // 抖音小程序\n globalObj.qq || // QQ 小程序\n globalObj.Taro // Taro 环境\n );\n\n return isMiniAppEnvironment;\n}\n\n/**\n * 加载 Taro(仅在小程序环境)\n */\nasync function loadTaro() {\n // 如果不是小程序环境,直接返回\n if (!checkIsMiniApp()) {\n return;\n }\n\n if (Taro) return;\n if (taroLoadPromise) return taroLoadPromise;\n\n taroLoadPromise = (async () => {\n try {\n // 使用动态导入,仅在小程序环境加载\n // 使用 Function 构造器来避免 TypeScript 在编译时解析模块\n const importTaro = new Function('return import(\"@tarojs/taro\")');\n const taroModule = await importTaro();\n Taro = taroModule.default || taroModule;\n } catch (e) {\n // Taro 不可用(非小程序环境或未安装)\n console.warn('[MiniAppStorage] Taro is not available. This is expected in non-MiniApp environments.');\n }\n })();\n\n return taroLoadPromise;\n}\n\nexport class MiniAppStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非小程序环境,直接返回 null\n if (!checkIsMiniApp()) {\n return null;\n }\n\n await loadTaro();\n if (!Taro) return null;\n\n try {\n const result = await Taro.getStorage({ key });\n return result.data;\n } catch (error: any) {\n // 如果 key 不存在,Taro 会抛出错误\n if (error.errMsg?.includes('data not found')) {\n return null;\n }\n console.error('[MiniAppStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.setStorage({ key, data: value });\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[MiniAppStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.removeStorage({ key });\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[MiniAppStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.clearStorage();\n } catch (error) {\n console.error('[MiniAppStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // 小程序没有原生的存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * 小程序 Taro Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { MiniAppStorageAdapter } from '../adapters/miniapp-adapter';\n\n// 创建单例适配器\nconst taroStorage = new MiniAppStorageAdapter();\n\n/**\n * 小程序的 Taro Storage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useTaroStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(taroStorage, key, defaultValue);\n}\n\n","/**\n * Electron 桌面端存储适配器\n *\n * Electron 渲染进程可以使用 localStorage(和 Web 相同)\n * 但我们提供专门的适配器以支持未来可能的主进程存储需求\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查 localStorage 是否可用(Electron 渲染进程)\n */\nconst hasLocalStorage = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class ElectronStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非 Electron 或无 localStorage 环境返回 null\n if (!hasLocalStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[ElectronStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非 Electron 或无 localStorage 环境静默忽略\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n this.notifyListeners(key, value);\n\n // 触发自定义事件(用于跨窗口同步)\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n this.notifyListeners(key, null);\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.clear();\n\n // 通知所有监听器\n this.listeners.forEach((listeners, key) => {\n listeners.forEach((listener) => {\n listener(key, null);\n });\n });\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key: '*', value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n /**\n * 添加存储变化监听器\n * 支持跨 Electron 窗口同步\n */\n addChangeListener(listener: (key: string, newValue: string | null) => void): () => void {\n // 添加到监听器集合\n const allListeners = this.listeners.get('*') || new Set();\n allListeners.add(listener);\n this.listeners.set('*', allListeners);\n\n // Storage 事件监听(同源窗口)\n const storageHandler = (e: StorageEvent) => {\n if (e.key) {\n listener(e.key, e.newValue);\n }\n };\n\n // 自定义事件监听(Electron 窗口间通信)\n const customHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { key, value } = customEvent.detail;\n if (key === '*') {\n // clear 操作\n this.listeners.forEach((_, k) => listener(k, null));\n } else {\n listener(key, value);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', storageHandler);\n window.addEventListener('electron-storage-change', customHandler);\n }\n\n // 返回清理函数\n return () => {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n window.removeEventListener('electron-storage-change', customHandler);\n }\n };\n }\n\n removeChangeListener(listener: (key: string, newValue: string | null) => void): void {\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n }\n }\n\n /**\n * 通知监听器\n */\n private notifyListeners(key: string, value: string | null): void {\n // 通知特定 key 的监听器\n const keyListeners = this.listeners.get(key);\n if (keyListeners) {\n keyListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n\n // 通知通配符监听器\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n }\n}\n\n","'use client';\n\n/**\n * Electron 桌面端 Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ElectronStorageAdapter } from '../adapters/electron-adapter';\n\n// 创建单例适配器\nconst electronStorage = new ElectronStorageAdapter();\n\n/**\n * Electron 桌面端的 Storage Hook\n *\n * 在 Electron 渲染进程中使用 localStorage\n * 支持跨窗口同步\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n *\n * @example\n * ```tsx\n * const [token, setToken, removeToken] = useElectronStorage('auth-token', '')\n * ```\n */\nexport function useElectronStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(electronStorage, key, defaultValue);\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/logger/types.ts","../src/logger/console-adapter.ts","../src/logger/Logger.ts","../src/ai/ocr/hooks/useOCR.ts","../src/ai/ocr/components/OCRScanner.tsx","../src/ai/background-removal/hooks/useBackgroundRemoval.ts","../src/ai/background-removal/components/BackgroundRemover.tsx","../src/ai/sentiment-analysis/hooks/useSentimentAnalysis.ts","../src/ai/sentiment-analysis/components/SentimentAnalyzer.tsx","../src/ai/text-generation/hooks/useTextGeneration.ts","../src/ai/text-generation/components/SmartAssistant.tsx","../src/ai/llm/client/request.ts","../src/ai/llm/providers/openai-compatible.ts","../src/ai/llm/client/createAiClient.ts","../src/ai/llm/prompt/variables.ts","../src/ai/llm/prompt/template.ts","../src/ai/llm/client/createChatSession.ts","../src/ai/llm/hooks/useAiChat.ts","../src/ai/llm/skills/registry.ts","../src/utils/time.ts","../src/utils/japanese.ts","../src/utils/validators.ts","../src/utils/file.ts","../src/utils/array.ts","../src/utils/string.ts","../src/utils/debug.ts","../src/utils/error.ts","../src/utils/cn.ts","../src/components/Button.tsx","../src/components/Card.tsx","../src/components/Badge.tsx","../src/components/Input.tsx","../src/components/Label.tsx","../src/components/internal/ui-core.tsx","../src/components/Tabs.tsx","../src/components/Dialog.tsx","../src/components/AlertDialog.tsx","../src/components/DropdownMenu.tsx","../src/components/Popover.tsx","../src/components/Progress.tsx","../src/components/ScrollArea.tsx","../src/components/Select.tsx","../src/components/Separator.tsx","../src/components/Sheet.tsx","../src/components/Textarea.tsx","../src/components/Tooltip.tsx","../src/components/Avatar.tsx","../src/components/Grid.tsx","../src/components/SearchBox.tsx","../src/components/Timeline.tsx","../src/components/CollisionBalls.tsx","../src/components/GenericOrderManager.tsx","../src/components/BackButton.tsx","../src/components/FilterButtonGroup.tsx","../src/components/SearchResultHint.tsx","../src/components/PopWindow.tsx","../src/components/ImageMappingPanel.tsx","../src/storage/hooks/useStorage.ts","../src/storage/adapters/web-adapter.ts","../src/storage/hooks/useLocalStorage.ts","../src/components/LocalImageMappingPanel.tsx","../src/profile/ProfileModal.tsx","../src/profile/internal/BadgeList.tsx","../src/profile/internal/Stat.tsx","../src/profile/internal/StatList.tsx","../src/profile/ProfileButton.tsx","../src/profile/AutoOpenModal.tsx","../src/profile/EnhancedAvatar.tsx","../src/portfolio/About.tsx","../src/portfolio/Contact.tsx","../src/portfolio/Home.tsx","../src/portfolio/ExperimentCard.tsx","../src/portfolio/ProjectCarousel.tsx","../src/navigation/NavigationItem.tsx","../src/navigation/Navigation.tsx","../src/navigation/NavigationToggle.tsx","../src/navigation/FloatingMenu.tsx","../src/navigation/FloatingMenuExample.tsx","../src/testField/utils/index.ts","../src/testField/components/CategoryFilter.tsx","../src/testField/components/CompletionFilter.tsx","../src/testField/components/PageHeader.tsx","../src/testField/components/ExperimentGrid.tsx","../src/testField/components/EmptyState.tsx","../src/testField/components/SortControl.tsx","../src/testField/components/SortModeToggle.tsx","../src/testField/components/SortableExperimentItem.tsx","../src/testField/components/DraggableExperimentGrid.tsx","../src/auth/schema/enums.ts","../src/auth/schema/user.ts","../src/auth/schema/session.ts","../src/auth/schema/account.ts","../src/auth/schema/verification.ts","../src/auth/schema/relations.ts","../src/auth/hooks/useAuth.ts","../src/testField/components/PermissionGuard.tsx","../src/testField/components/UserInfoBar.tsx","../src/mikuFireworks3D/components/DanmakuPanel.tsx","../src/mikuFireworks3D/components/FireworksCanvas.tsx","../src/mikuFireworks3D/constants.ts","../src/mikuFireworks3D/components/FireworksControlPanel.tsx","../src/mikuFireworks3D/hooks/useDanmakuController.ts","../src/mikuFireworks3D/utils/textureFactory.ts","../src/mikuFireworks3D/utils/colorPalettes.ts","../src/mikuFireworks3D/utils/avatarSprite.ts","../src/mikuFireworks3D/engine/patterns/avatar.ts","../src/mikuFireworks3D/engine/patterns/miku.ts","../src/mikuFireworks3D/engine/patterns/normal.ts","../src/mikuFireworks3D/engine/emitters.ts","../src/mikuFireworks3D/engine/particlePool.ts","../src/mikuFireworks3D/engine/postfx.ts","../src/mikuFireworks3D/engine/FireworksEngine.ts","../src/mikuFireworks3D/hooks/useFireworksEngine.ts","../src/mikuFireworks3D/client/WebSocketTransport.ts","../src/mikuFireworks3D/hooks/useFireworksRealtime.ts","../src/mikuFireworks3D/components/MikuFireworks3D.tsx","../src/screenReceiver/useScreenReceiver.ts","../src/screenReceiver/signalUrl.ts","../src/screenReceiver/ScreenReceiverPanel.tsx","../src/festivalCard/core/defaults.ts","../src/festivalCard/core/normalize.ts","../src/festivalCard/hooks/useFestivalCardConfig.ts","../src/festivalCard/components/FestivalCardPageRenderer.tsx","../src/festivalCard/components/FestivalCardBook3D.tsx","../src/festivalCard/components/FestivalCardConfigEditor.tsx","../src/festivalCard/components/FestivalCardStudio.tsx","../src/festivalCard/components/FestivalCardConfigPage.tsx","../src/festivalCard/components/FestivalCardManagedPage.tsx","../src/festivalCard/server/db.ts","../src/festivalCard/services/festivalCardService.ts","../src/vocaloidBooth/core/code.ts","../src/vocaloidBooth/core/boothVaultService.ts","../src/vocaloidBooth/core/config.ts","../src/vocaloidBooth/components/BoothUploadPanel.tsx","../src/vocaloidBooth/components/BoothRedeemPanel.tsx","../src/vocaloidBooth/components/BoothSuccessCard.tsx","../src/vocaloidBooth/components/BoothConfigPage.tsx","../src/storage/adapters/react-native-adapter.ts","../src/storage/hooks/useAsyncStorage.ts","../src/storage/adapters/miniapp-adapter.ts","../src/storage/hooks/useTaroStorage.ts","../src/storage/adapters/electron-adapter.ts","../src/storage/hooks/useElectronStorage.ts"],"names":["LogLevel","timestamp","useState","useRef","React","useCallback","useEffect","clsx","Loader2","X","text","Send","buildBaseMessages","React6","React7","cva","React8","React9","React10","React11","React12","React13","React14","React15","React16","React17","React18","React19","Check","React20","React21","React22","React23","React24","draggedBall","width","height","mousePos","ChevronUp","ChevronDown","createPortal","pgTable","sql","uniqueIndex","foreignKey","user","User","THREE","useMemo","parseListResponse","parseConfigResponse"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4, // 禁用所有日志\n}\n\n/**\n * 日志条目\n */\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n data?: any;\n context?: string;\n error?: Error;\n}\n\n/**\n * 日志适配器接口\n * 不同平台实现不同的日志输出方式\n */\nexport interface LoggerAdapter {\n /**\n * 输出日志\n */\n log(entry: LogEntry): void;\n\n /**\n * 批量输出日志(可选)\n */\n logBatch?(entries: LogEntry[]): void;\n}\n\n/**\n * 日志配置\n */\nexport interface LoggerConfig {\n /**\n * 最小日志级别\n * 只有大于等于此级别的日志才会输出\n */\n minLevel: LogLevel;\n\n /**\n * 是否启用时间戳\n */\n enableTimestamp?: boolean;\n\n /**\n * 是否启用上下文(模块名)\n */\n enableContext?: boolean;\n\n /**\n * 环境(development/production)\n */\n environment?: 'development' | 'production';\n\n /**\n * 自定义适配器\n */\n adapter?: LoggerAdapter;\n}\n\n","import type { LoggerAdapter, LogEntry, LogLevel } from './types';\n\n/**\n * 控制台日志适配器\n * 使用 console.info/warn/error 输出日志\n */\nexport class ConsoleLoggerAdapter implements LoggerAdapter {\n private readonly colors = {\n DEBUG: '\\x1b[36m', // Cyan\n INFO: '\\x1b[32m', // Green\n WARN: '\\x1b[33m', // Yellow\n ERROR: '\\x1b[31m', // Red\n RESET: '\\x1b[0m',\n };\n\n log(entry: LogEntry): void {\n const { level, message, timestamp, data, context, error } = entry;\n\n // 构建日志消息\n let logMessage = '';\n\n // 添加时间戳\n if (timestamp) {\n logMessage += '[' + (this.formatTimestamp(timestamp)) + '] ';\n }\n\n // 添加日志级别\n const levelName = this.getLevelName(level);\n logMessage += (levelName) + ': ';\n\n // 添加上下文\n if (context) {\n logMessage += '[' + (context) + '] ';\n }\n\n // 添加消息\n logMessage += message;\n\n // 根据日志级别选择输出方式\n switch (level) {\n case 0: // DEBUG\n console.debug(this.colorize(logMessage, 'DEBUG'), data || '');\n break;\n case 1: // INFO\n console.info(this.colorize(logMessage, 'INFO'), data || '');\n break;\n case 2: // WARN\n console.warn(this.colorize(logMessage, 'WARN'), data || '');\n break;\n case 3: // ERROR\n console.error(this.colorize(logMessage, 'ERROR'), data || '');\n if (error) {\n console.error(error);\n }\n break;\n }\n }\n\n private formatTimestamp(date: Date): string {\n return date.toISOString();\n }\n\n private getLevelName(level: LogLevel): string {\n const names = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'NONE'];\n return names[level] || 'UNKNOWN';\n }\n\n private colorize(message: string, level: keyof typeof this.colors): string {\n // 只在支持颜色的环境中使用颜色\n if (typeof process !== 'undefined' && process.stdout?.isTTY) {\n return (this.colors[level]) + (message) + (this.colors.RESET);\n }\n return message;\n }\n}\n\n","import type { LogLevel, LogEntry, LoggerConfig, LoggerAdapter } from './types';\nimport { ConsoleLoggerAdapter } from './console-adapter';\n\n/**\n * 统一日志管理类\n */\nexport class Logger {\n private config: Required<LoggerConfig>;\n private adapter: LoggerAdapter;\n private context?: string;\n\n constructor(config?: Partial<LoggerConfig>, context?: string) {\n const isProduction =\n typeof process !== 'undefined' ? process.env.NODE_ENV === 'production' : false;\n\n this.config = {\n minLevel: config?.minLevel ?? (isProduction ? 1 : 0), // INFO in prod, DEBUG in dev\n enableTimestamp: config?.enableTimestamp ?? true,\n enableContext: config?.enableContext ?? true,\n environment: config?.environment ?? (isProduction ? 'production' : 'development'),\n adapter: config?.adapter ?? new ConsoleLoggerAdapter(),\n };\n this.adapter = this.config.adapter;\n this.context = context;\n }\n\n /**\n * 创建带上下文的子 Logger\n */\n createChild(context: string): Logger {\n return new Logger(this.config, context);\n }\n\n /**\n * 调试日志\n */\n debug(message: string, data?: any): void {\n this.log(0, message, data); // LogLevel.DEBUG\n }\n\n /**\n * 信息日志\n */\n info(message: string, data?: any): void {\n this.log(1, message, data); // LogLevel.INFO\n }\n\n /**\n * 警告日志\n */\n warn(message: string, data?: any): void {\n this.log(2, message, data); // LogLevel.WARN\n }\n\n /**\n * 错误日志\n */\n error(message: string, error?: Error | any): void {\n this.log(\n 3, // LogLevel.ERROR\n message,\n error instanceof Error ? undefined : error,\n error instanceof Error ? error : undefined\n );\n }\n\n /**\n * 核心日志方法\n */\n private log(level: LogLevel, message: string, data?: any, error?: Error): void {\n // 检查日志级别\n if (level < this.config.minLevel) {\n return;\n }\n\n // 检查动态调试配置(仅在浏览器环境)\n if (typeof window !== 'undefined' && typeof localStorage !== 'undefined') {\n const loggerDebug = localStorage.getItem('logger-debug');\n // 如果明确设置为 false,则不输出(但 Error 级别始终输出)\n if (loggerDebug === 'false' && level < 3) {\n // level < ERROR\n return;\n }\n }\n\n const entry: LogEntry = {\n level,\n message,\n timestamp: this.config.enableTimestamp ? new Date() : (undefined as any),\n data,\n context: this.config.enableContext ? this.context : undefined,\n error,\n };\n\n this.adapter.log(entry);\n }\n\n /**\n * 设置日志级别\n */\n setLevel(level: LogLevel): void {\n this.config.minLevel = level;\n }\n\n /**\n * 获取当前日志级别\n */\n getLevel(): LogLevel {\n return this.config.minLevel;\n }\n}\n\n/**\n * 默认全局 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带上下文的 Logger\n */\nexport function createLogger(context: string, config?: Partial<LoggerConfig>): Logger {\n return new Logger(config, context);\n}\n\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { createWorker, Worker } from 'tesseract.js';\nimport { OCRResult, OCROptions, OCRState } from '../types';\n\nexport const useOCR = (options: OCROptions = {}) => {\n const [state, setState] = useState<OCRState>({\n isProcessing: false,\n progress: 0,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const workerRef = useRef<Worker | null>(null);\n\n const cleanup = useCallback(async () => {\n if (workerRef.current) {\n await workerRef.current.terminate();\n workerRef.current = null;\n }\n }, []);\n\n const recognize = useCallback(\n async (image: string | File | Blob | HTMLImageElement | HTMLCanvasElement) => {\n setState((prev) => ({\n ...prev,\n isProcessing: true,\n error: null,\n progress: 0,\n status: 'initializing',\n }));\n\n try {\n const worker = await createWorker(options.language || 'eng', 1, {\n logger: (m) => {\n if (m.status === 'recognizing text') {\n setState((prev) => ({\n ...prev,\n status: 'recognizing',\n progress: m.progress,\n }));\n }\n options.logger?.(m);\n },\n });\n\n workerRef.current = worker;\n\n const { data } = await worker.recognize(image);\n\n // In some versions of tesseract.js, words and lines are not directly on data\n // We extract them from blocks if needed\n const words = (data as any).words || data.blocks?.flatMap(b => b.paragraphs.flatMap(p => p.lines.flatMap(l => l.words))) || [];\n const lines = (data as any).lines || data.blocks?.flatMap(b => b.paragraphs.flatMap(p => p.lines)) || [];\n\n const result: OCRResult = {\n text: data.text,\n confidence: data.confidence,\n words: words.map((w: any) => ({\n text: w.text,\n confidence: w.confidence,\n bbox: w.bbox,\n })),\n lines: lines.map((l: any) => l.text),\n };\n\n setState((prev) => ({\n ...prev,\n isProcessing: false,\n progress: 1,\n status: 'completed',\n result,\n }));\n\n await worker.terminate();\n workerRef.current = null;\n\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setState((prev) => ({\n ...prev,\n isProcessing: false,\n status: 'error',\n error,\n }));\n throw error;\n }\n },\n [options]\n );\n\n useEffect(() => {\n return () => {\n cleanup();\n };\n }, [cleanup]);\n\n return {\n ...state,\n recognize,\n cleanup,\n };\n};\n\n\n\n\n\n\n\n\n\n","import React, { useState, useRef } from 'react';\nimport { useOCR } from '../hooks/useOCR';\nimport { Loader2, Upload, FileText, Image as ImageIcon, X } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface OCRScannerProps {\n onResult?: (text: string) => void;\n className?: string;\n language?: string;\n}\n\nexport const OCRScanner: React.FC<OCRScannerProps> = ({\n onResult,\n className = '',\n language = 'eng',\n}) => {\n const [imagePreview, setImagePreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n \n const { recognize, isProcessing, progress, status, result, error } = useOCR({\n language,\n });\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n // Create preview\n const reader = new FileReader();\n reader.onload = (event) => {\n setImagePreview(event.target?.result as string);\n };\n reader.readAsDataURL(file);\n\n try {\n const ocrResult = await recognize(file);\n onResult?.(ocrResult.text);\n } catch (err) {\n console.error('OCR Error:', err);\n }\n };\n\n const reset = () => {\n setImagePreview(null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n \n const file = e.dataTransfer.files?.[0];\n if (file && file.type.startsWith('image/')) {\n const mockEvent = { target: { files: [file] } } as unknown as React.ChangeEvent<HTMLInputElement>;\n handleFileChange(mockEvent);\n }\n };\n\n return (\n <div \n className={clsx('p-6 border-2 border-dashed rounded-xl transition-all', isProcessing ? 'border-blue-400 bg-blue-50/10' : 'border-gray-200 hover:border-blue-400', className)}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n {!imagePreview ? (\n <div \n className=\"flex flex-col items-center justify-center cursor-pointer space-y-4\"\n onClick={() => fileInputRef.current?.click()}\n >\n <div className=\"p-4 bg-blue-50 rounded-full text-blue-500\">\n <Upload size={32} />\n </div>\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-700\">点击或拖拽图片进行 OCR 识别</p>\n <p className=\"text-sm text-gray-500\">支持 JPG, PNG, WebP</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"relative group rounded-lg overflow-hidden border border-gray-200\">\n <img \n src={imagePreview} \n alt=\"Preview\" \n className={clsx('max-h-64 mx-auto object-contain transition-opacity', isProcessing ? 'opacity-50' : 'opacity-100')}\n />\n {!isProcessing && (\n <button \n onClick={reset}\n className=\"absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm\"\n >\n <X size={18} />\n </button>\n )}\n \n {isProcessing && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center bg-black/5\">\n <Loader2 className=\"animate-spin text-blue-500 mb-2\" size={32} />\n <div className=\"w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden\">\n <div \n className=\"bg-blue-500 h-full transition-all duration-300\"\n style={{ width: (progress * 100) + '%' }}\n />\n </div>\n <p className=\"text-xs font-medium text-blue-600 mt-2\">\n {status === 'initializing' ? '正在加载引擎...' : '识别中 ' + (Math.round(progress * 100)) + '%'}\n </p>\n </div>\n )}\n </div>\n\n {result && !isProcessing && (\n <div className=\"bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2\">\n <div className=\"flex items-center gap-2 mb-2 text-gray-600 font-medium\">\n <FileText size={18} />\n <span>识别结果 (置信度: {Math.round(result.confidence)}%)</span>\n </div>\n <pre className=\"text-sm text-gray-800 whitespace-pre-wrap font-sans\">\n {result.text}\n </pre>\n </div>\n )}\n\n {error && (\n <div className=\"p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 识别失败: {error.message}\n </div>\n )}\n </div>\n )}\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={isProcessing}\n />\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useEffect } from 'react';\nimport { BackgroundRemovalOptions, BackgroundRemovalState } from '../types';\n\nexport const useBackgroundRemoval = (options: BackgroundRemovalOptions = {}) => {\n const [state, setState] = useState<BackgroundRemovalState>({\n isProcessing: false,\n progress: 0,\n status: 'idle',\n error: null,\n resultBlob: null,\n resultUrl: null,\n });\n\n const remove = useCallback(async (image: string | File | Blob | HTMLImageElement | URL) => {\n setState(prev => ({\n ...prev,\n isProcessing: true,\n error: null,\n progress: 0,\n status: 'initializing',\n }));\n\n try {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n let backgroundRemoval;\n\n try {\n // 环境盾牌:防止库初始化时 Object.keys(null) 崩溃\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' } },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n \n backgroundRemoval = await import('@imgly/background-removal');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', {\n value: originalProcess,\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n }\n\n const { removeBackground } = backgroundRemoval;\n\n const config: any = {\n progress: (status: string, progress: number) => {\n setState(prev => ({\n ...prev,\n status,\n progress,\n }));\n options.progress?.(status, progress);\n },\n model: options.model || 'small',\n publicPath: options.publicPath,\n fetchArgs: options.fetchArgs,\n };\n\n const blob = await removeBackground(image, config);\n const url = URL.createObjectURL(blob);\n\n setState(prev => ({\n ...prev,\n isProcessing: false,\n progress: 1,\n status: 'completed',\n resultBlob: blob,\n resultUrl: url,\n }));\n\n return { blob, url };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('AI Background Removal Error:', msg);\n setState(prev => ({\n ...prev,\n isProcessing: false,\n status: 'error',\n error: new Error(msg),\n }));\n throw err;\n }\n }, [options]);\n\n const cleanup = useCallback(() => {\n if (state.resultUrl) {\n URL.revokeObjectURL(state.resultUrl);\n }\n }, [state.resultUrl]);\n\n useEffect(() => {\n return () => cleanup();\n }, [cleanup]);\n\n return {\n ...state,\n remove,\n cleanup,\n };\n};\n","import React, { useState, useRef } from 'react';\nimport { useBackgroundRemoval } from '../hooks/useBackgroundRemoval';\nimport { Loader2, Upload, Download, Image as ImageIcon, X, Eraser } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface BackgroundRemoverProps {\n onResult?: (blob: Blob, url: string) => void;\n className?: string;\n}\n\nexport const BackgroundRemover: React.FC<BackgroundRemoverProps> = ({\n onResult,\n className = '',\n}) => {\n const [imagePreview, setImagePreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n \n const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n\n const reader = new FileReader();\n reader.onload = (event) => {\n setImagePreview(event.target?.result as string);\n };\n reader.readAsDataURL(file);\n\n try {\n const { blob, url } = await remove(file);\n onResult?.(blob, url);\n } catch (err) {\n console.error('Background Removal Error:', err);\n }\n };\n\n const reset = () => {\n setImagePreview(null);\n if (fileInputRef.current) fileInputRef.current.value = '';\n };\n\n const downloadResult = () => {\n if (!resultUrl) return;\n const a = document.createElement('a');\n a.href = resultUrl;\n a.download = 'removed_background.png';\n a.click();\n };\n\n return (\n <div className={clsx('p-6 border-2 border-dashed rounded-xl transition-all', isProcessing ? 'border-purple-400 bg-purple-50/10' : 'border-gray-200 hover:border-purple-400', className)}>\n {!imagePreview ? (\n <div \n className=\"flex flex-col items-center justify-center cursor-pointer space-y-4\"\n onClick={() => fileInputRef.current?.click()}\n >\n <div className=\"p-4 bg-purple-50 rounded-full text-purple-500\">\n <Eraser size={32} />\n </div>\n <div className=\"text-center\">\n <p className=\"text-lg font-medium text-gray-700\">上传图片移除背景</p>\n <p className=\"text-sm text-gray-500\">建议使用主体明确的图片</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium text-gray-500 uppercase tracking-wider\">原图</p>\n <div className=\"relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50\">\n <img src={imagePreview} alt=\"Original\" className=\"max-h-64 mx-auto object-contain\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-xs font-medium text-gray-500 uppercase tracking-wider\">处理结果</p>\n <div className=\"relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]\">\n {resultUrl ? (\n <img src={resultUrl} alt=\"Result\" className=\"max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500\" />\n ) : (\n <div className=\"h-64 flex flex-col items-center justify-center text-gray-400\">\n {isProcessing ? (\n <>\n <Loader2 className=\"animate-spin text-purple-500 mb-2\" size={32} />\n <div className=\"w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden\">\n <div \n className=\"bg-purple-500 h-full transition-all duration-300\"\n style={{ width: (progress * 100) + '%' }}\n />\n </div>\n <p className=\"text-[10px] mt-2 font-mono uppercase\">{status.replace(/-/g, ' ')}</p>\n </>\n ) : (\n <span className=\"text-sm italic\">等待处理...</span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"flex justify-between items-center pt-2\">\n {!isProcessing && (\n <button \n onClick={reset}\n className=\"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors\"\n >\n <X size={16} />\n 重新开始\n </button>\n )}\n \n {resultUrl && !isProcessing && (\n <button \n onClick={downloadResult}\n className=\"flex items-center gap-2 px-6 py-2 bg-purple-600 hover:bg-purple-700 text-white rounded-lg shadow-sm transition-all\"\n >\n <Download size={16} />\n 下载 PNG\n </button>\n )}\n </div>\n\n {error && (\n <div className=\"p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 处理失败: {error.message}\n </div>\n )}\n </div>\n )}\n\n <input\n type=\"file\"\n ref={fileInputRef}\n className=\"hidden\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={isProcessing}\n />\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useRef } from 'react';\nimport { SentimentResult, SentimentOptions, SentimentState } from '../types';\n\nexport const useSentimentAnalysis = (options: SentimentOptions = {}) => {\n const [state, setState] = useState<SentimentState>({\n isProcessing: false,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const pipelineRef = useRef<any | null>(null);\n\n const analyze = useCallback(async (text: string) => {\n setState(prev => ({\n ...prev,\n isProcessing: true,\n error: null,\n status: 'loading model',\n }));\n\n try {\n if (!pipelineRef.current) {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n\n let transformers;\n try {\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' }, nextTick: (cb: any) => setTimeout(cb, 0) },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n transformers = await import('@xenova/transformers');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', { value: originalProcess, configurable: true, writable: true });\n } catch (e) {}\n }\n }\n\n const { pipeline, env } = transformers;\n env.allowLocalModels = false;\n if (env.backends?.onnx) {\n env.backends.onnx.wasm.proxy = true;\n }\n\n const defaultModel = 'Xenova/distilbert-base-multilingual-cased-sentiments-student';\n \n pipelineRef.current = await pipeline('sentiment-analysis', options.model || defaultModel);\n }\n\n setState(prev => ({ ...prev, status: 'analyzing' }));\n \n const output = await pipelineRef.current(text);\n const resultData = output[0];\n\n const label = resultData.label.toLowerCase();\n let sentiment: 'positive' | 'negative' | 'neutral' = 'neutral';\n \n // 增强逻辑:针对中文常见消极词汇进行本地加权\n const negativeKeywords = ['累', '惨', '绝望', '难受', '伤心', '差', '坏', '糟', '不行'];\n const hasNegativeKeyword = negativeKeywords.some(k => text.includes(k));\n\n if (label.includes('positive') && !hasNegativeKeyword) {\n sentiment = 'positive';\n } else if (label.includes('negative') || label.includes('0') || hasNegativeKeyword) {\n sentiment = 'negative';\n }\n\n const result: SentimentResult = {\n label: resultData.label,\n score: resultData.score,\n sentiment,\n };\n\n setState(prev => ({\n ...prev,\n isProcessing: false,\n status: 'completed',\n result,\n }));\n\n return result;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('AI Sentiment Error:', msg);\n setState(prev => ({ ...prev, isProcessing: false, status: 'error', error: new Error(msg) }));\n throw err;\n }\n }, [options.model]);\n\n return { ...state, analyze };\n};\n\n\n\n\n\n\n\n\n\n","import React, { useState } from 'react';\nimport { useSentimentAnalysis } from '../hooks/useSentimentAnalysis';\nimport { MessageSquare, Send, Loader2, Smile, Frown, Meh } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface SentimentAnalyzerProps {\n onResult?: (result: any) => void;\n className?: string;\n placeholder?: string;\n}\n\nexport const SentimentAnalyzer: React.FC<SentimentAnalyzerProps> = ({\n onResult,\n className = '',\n placeholder = '输入一段中文或英文,分析其情感倾向...',\n}) => {\n const [text, setText] = useState('');\n const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();\n\n const handleAnalyze = async () => {\n if (!text.trim() || isProcessing) return;\n try {\n const res = await analyze(text);\n onResult?.(res);\n } catch (err) {\n console.error('Sentiment Analysis Error:', err);\n }\n };\n\n const getSentimentIcon = () => {\n if (!result) return null;\n switch (result.sentiment) {\n case 'positive': return <Smile className=\"text-green-500\" size={24} />;\n case 'negative': return <Frown className=\"text-red-500\" size={24} />;\n default: return <Meh className=\"text-yellow-500\" size={24} />;\n }\n };\n\n const getSentimentColor = () => {\n if (!result) return '';\n switch (result.sentiment) {\n case 'positive': return 'bg-green-50 border-green-200 text-green-700';\n case 'negative': return 'bg-red-50 border-red-200 text-red-700';\n default: return 'bg-yellow-50 border-yellow-200 text-yellow-700';\n }\n };\n\n return (\n <div className={clsx('p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm', className)}>\n <div className=\"flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium\">\n <MessageSquare size={20} />\n <span>文本情感分析</span>\n </div>\n\n <div className=\"relative\">\n <textarea\n value={text}\n onChange={(e) => setText(e.target.value)}\n placeholder={placeholder}\n className=\"w-full h-32 p-4 bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all outline-none resize-none text-gray-800 dark:text-gray-200\"\n disabled={isProcessing}\n />\n <button\n onClick={handleAnalyze}\n disabled={!text.trim() || isProcessing}\n className=\"absolute bottom-3 right-3 p-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-md transition-colors shadow-sm\"\n >\n {isProcessing ? <Loader2 className=\"animate-spin\" size={18} /> : <Send size={18} />}\n </button>\n </div>\n\n {isProcessing && (\n <div className=\"mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse\">\n <Loader2 size={14} className=\"animate-spin\" />\n <span>正在分析 (首次运行将加载模型资源)...</span>\n </div>\n )}\n\n {result && !isProcessing && (\n <div className={clsx('mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2', getSentimentColor())}>\n <div className=\"p-2 bg-white rounded-full shadow-sm\">\n {getSentimentIcon()}\n </div>\n <div>\n <p className=\"font-bold text-lg capitalize\">{result.sentiment}</p>\n <p className=\"text-sm opacity-80\">\n 置信度: {(result.score * 100).toFixed(1)}% ({result.label})\n </p>\n </div>\n </div>\n )}\n\n {error && (\n <div className=\"mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100\">\n 分析失败: {error.message}\n </div>\n )}\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import { useState, useCallback, useRef } from 'react';\nimport { TextGenerationOptions, TextGenerationState } from '../types';\n\nexport const useTextGeneration = (options: TextGenerationOptions = {}) => {\n const [state, setState] = useState<TextGenerationState>({\n isProcessing: false,\n status: 'idle',\n error: null,\n result: null,\n });\n\n const pipelineRef = useRef<any | null>(null);\n\n const generate = useCallback(async (prompt: string) => {\n console.log('[AI] Generating for prompt:', prompt);\n \n setState((prev: TextGenerationState) => ({\n ...prev,\n isProcessing: true,\n error: null,\n status: 'initializing',\n }));\n\n try {\n if (!pipelineRef.current) {\n const originalKeys = Object.keys;\n const win = (typeof window !== 'undefined' ? window : globalThis) as any;\n const originalProcess = win.process;\n\n let transformers;\n try {\n (Object as any).keys = function(obj: any) {\n if (obj === null || obj === undefined) return [];\n return originalKeys.call(Object, obj);\n };\n if (typeof window !== 'undefined') {\n try {\n Object.defineProperty(win, 'process', {\n value: { env: {}, versions: {}, release: { name: 'node' }, nextTick: (cb: any) => setTimeout(cb, 0), cwd: () => '/', browser: true },\n configurable: true,\n writable: true\n });\n } catch (e) {}\n }\n transformers = await import('@xenova/transformers');\n } finally {\n Object.keys = originalKeys;\n if (typeof window !== 'undefined' && originalProcess) {\n try {\n Object.defineProperty(win, 'process', { value: originalProcess, configurable: true, writable: true });\n } catch (e) {}\n }\n }\n\n const { pipeline, env } = transformers;\n env.allowLocalModels = false;\n if (env.backends?.onnx) {\n env.backends.onnx.wasm.proxy = true;\n }\n\n const modelName = options.model || 'Xenova/LaMini-Flan-T5-77M';\n pipelineRef.current = await pipeline('text2text-generation', modelName, {\n progress_callback: (info: any) => {\n if (info.status === 'progress') {\n setState((prev: TextGenerationState) => ({ ...prev, status: 'loading model: ' + (Math.round(info.progress)) + '%' }));\n }\n }\n });\n }\n\n setState((prev: TextGenerationState) => ({ ...prev, status: 'thinking' }));\n \n // 优化生成参数,使其对小模型更友好\n const output = await pipelineRef.current(prompt, {\n max_new_tokens: options.max_new_tokens || 64,\n temperature: options.temperature || 0.5, // 稍微提高温度\n do_sample: true, // 开启采样,避免空输出\n top_k: 50,\n repetition_penalty: 1.1,\n });\n\n const result = output[0].generated_text || '';\n console.log('[AI] Raw result:', result);\n\n setState((prev: TextGenerationState) => ({\n ...prev,\n isProcessing: false,\n status: 'completed',\n result,\n }));\n\n return result;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error('[AI] Error:', err);\n setState((prev: TextGenerationState) => ({ ...prev, isProcessing: false, status: 'error', error: new Error(msg) }));\n throw err;\n }\n }, [options.model, options.max_new_tokens, options.temperature]);\n\n return { ...state, generate };\n};\n\n\n","import React, { useState, useRef, useEffect } from 'react';\nimport { useTextGeneration } from '../hooks/useTextGeneration';\nimport { Bot, User, Send, Loader2 } from 'lucide-react';\nimport { clsx } from 'clsx';\n\ninterface SmartAssistantProps {\n className?: string;\n}\n\nexport const SmartAssistant: React.FC<SmartAssistantProps> = ({ className = '' }) => {\n const [input, setInput] = useState('');\n const [chatHistory, setChatHistory] = useState<Array<{ role: 'user' | 'assistant', content: string }>>([]);\n const scrollRef = useRef<HTMLDivElement>(null);\n \n const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();\n\n useEffect(() => {\n if (scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }\n }, [chatHistory, isGenerating]);\n\n const handleSend = async () => {\n if (!input.trim() || isGenerating) return;\n\n const userMessage = input.trim();\n setInput('');\n setChatHistory(prev => [...prev, { role: 'user', content: userMessage }]);\n\n // --- 1. 本地硬规则匹配 (意图识别) ---\n // 对于 77M 模型,某些固定回复由逻辑生成效果更好\n let finalContent = '';\n const lowerMessage = userMessage.toLowerCase();\n \n if (lowerMessage.includes('你好') || lowerMessage.includes('hello') || lowerMessage.includes('hi')) {\n finalContent = '你好呀!我是 sa2kit 的本地 AI 助手,很高兴能和你聊天。😊';\n } else if (lowerMessage.includes('谁') || lowerMessage.includes('who are you')) {\n finalContent = '我是一个完全运行在你浏览器本地的小型 AI 模型,我不需要服务器,非常保护你的隐私。';\n } else if (lowerMessage.includes('天气')) {\n finalContent = '虽然我看不见外面的阳光,但听你的语气,今天一定是个适合出门的好天气!☀️';\n } else if (lowerMessage.includes('累') || lowerMessage.includes('难过') || lowerMessage.includes('绝望')) {\n finalContent = '听起来你现在心情不太好... 抱抱你,我会一直在这里陪你聊天的。❤️';\n }\n\n // 如果命中了硬规则,直接显示并返回,不再调用模型\n if (finalContent) {\n // 模拟一点点思考时间,体验更自然\n setTimeout(() => {\n setChatHistory(prev => [...prev, { role: 'assistant', content: finalContent }]);\n }, 500);\n return;\n }\n\n // --- 2. 调用模型生成 (针对非固定意图) ---\n const prompt = `对话。\n人说:\"${userMessage}\"\nAI回应:\"`;\n\n try {\n const response = await generate(prompt);\n \n // 深度清理模型输出\n let modelOutput = response\n .replace(/^AI回应:|^AI:|^Assistant:|^回答:|^答:|^Answer:/i, '')\n .replace(/[. ]*Positive[. ]*|[. ]*Negative[. ]*|[. ]*Neutral[. ]*/gi, '') // 拦截情绪单词\n .replace(/^[\"'“]|[\"'”]$/g, '') // 去掉引号\n .trim();\n\n // --- 3. 结果质量检查 (Recovery) ---\n // 如果模型返回包含大量英文、或者是废话、或者太短\n const isEnglishTrash = /[a-zA-Z]{5,}/.test(modelOutput) && !/[一-龥]/.test(modelOutput);\n const isTooShort = modelOutput.length < 1;\n\n if (isEnglishTrash || isTooShort) {\n console.warn('[AI] Model failure, triggering smart recovery. Raw was:', response);\n modelOutput = '嗯嗯,我正在听。关于“' + userMessage.slice(0, 6) + '...”,你还有什么想分享的吗?';\n }\n\n setChatHistory(prev => [...prev, { role: 'assistant', content: modelOutput }]);\n } catch (err) {\n setChatHistory(prev => [...prev, { role: 'assistant', content: '(本地模型思考过度,暂时休息中...)' }]);\n }\n };\n\n return (\n <div className={clsx('flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden', className)}>\n <div ref={scrollRef} className=\"flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50\">\n {chatHistory.length === 0 && (\n <div className=\"h-full flex flex-col items-center justify-center text-gray-400 space-y-2\">\n <Bot size={48} className=\"opacity-20\" />\n <p className=\"text-sm italic text-center px-8 text-gray-400 font-sans\">\n 你好!我是 100% 本地运行的 AI。<br/>\n 你可以和我聊聊天,我会尝试理解你的意思。\n </p>\n </div>\n )}\n {chatHistory.map((msg, i) => (\n <div key={i} className={clsx('flex', msg.role === 'user' ? 'justify-end' : 'justify-start', 'animate-in fade-in slide-in-from-bottom-2')}>\n <div className={clsx('flex gap-3 max-w-[85%]', msg.role === 'user' ? 'flex-row-reverse' : '')}>\n <div className={clsx('p-2 rounded-lg h-fit', msg.role === 'user' ? 'bg-blue-100 text-blue-600' : 'bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400')}>\n {msg.role === 'user' ? <User size={18} /> : <Bot size={18} />}\n </div>\n <div className={clsx('p-3 rounded-2xl shadow-sm text-sm', msg.role === 'user' \n ? 'bg-blue-600 text-white rounded-tr-none' \n : 'bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed')}>\n {msg.content}\n </div>\n </div>\n </div>\n ))}\n {isGenerating && (\n <div className=\"flex justify-start\">\n <div className=\"flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600\">\n <Loader2 className=\"animate-spin text-blue-500\" size={16} />\n <div className=\"flex flex-col\">\n <span className=\"text-xs text-gray-500 font-medium\">思考中...</span>\n <span className=\"text-[10px] text-blue-400 font-mono tracking-tighter\">{genStatus}</span>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700\">\n <div className=\"relative flex items-center gap-2\">\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleSend()}\n placeholder=\"输入文字...\"\n className=\"flex-1 bg-gray-50 dark:bg-gray-900 border-none rounded-full px-5 py-3 pr-12 text-sm focus:ring-2 focus:ring-blue-500 outline-none dark:text-white text-gray-800\"\n disabled={isGenerating}\n />\n <button\n onClick={handleSend}\n disabled={!input.trim() || isGenerating}\n className=\"absolute right-1 p-2.5 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-full transition-all shadow-md active:scale-95 flex items-center justify-center\"\n >\n <Send size={18} />\n </button>\n </div>\n </div>\n </div>\n );\n};\n\n\n\n\n\n\n\n\n\n","import type { RequestAdapter } from '../../../request';\n\nexport type JsonRequestOptions = {\n url: string;\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n headers?: Record<string, string>;\n body?: any;\n timeoutMs?: number;\n requestAdapter?: RequestAdapter;\n};\n\nexport const requestJson = async <T>(options: JsonRequestOptions): Promise<T> => {\n const { url, method = 'POST', headers = {}, body, timeoutMs, requestAdapter } = options;\n\n if (requestAdapter) {\n return requestAdapter.request<T>({\n url,\n method,\n headers,\n body,\n });\n }\n\n const controller = timeoutMs ? new AbortController() : undefined;\n const timeoutId = timeoutMs\n ? setTimeout(() => {\n controller?.abort();\n }, timeoutMs)\n : undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: controller?.signal,\n });\n\n const text = await response.text();\n let data: any = null;\n\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = text;\n }\n }\n\n if (!response.ok) {\n const errorMessage =\n data?.error?.message ||\n data?.error ||\n data?.message ||\n `Request failed with status ${response.status}`;\n const error = new Error(errorMessage);\n (error as any).status = response.status;\n (error as any).data = data;\n throw error;\n }\n\n return data as T;\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n};\n","import type {\n AiChatRequest,\n AiChatResponse,\n AiMessage,\n AiToolCall,\n AiUsage,\n ResolvedAiClientConfig,\n} from '../types';\nimport type { AiProvider } from './types';\nimport { requestJson } from '../client/request';\n\nexport const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1';\nexport const DEFAULT_OPENAI_MODEL = 'gpt-3.5-turbo';\n\ntype OpenAIToolCall = {\n id?: string;\n type?: string;\n function?: {\n name?: string;\n arguments?: string;\n };\n};\n\ntype OpenAIMessage = {\n role?: string;\n content?: string | null;\n tool_calls?: OpenAIToolCall[];\n};\n\ntype OpenAIChatResponse = {\n id: string;\n choices?: Array<{\n message?: OpenAIMessage;\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n};\n\nconst joinUrl = (base: string, path: string): string => {\n const trimmedBase = base.replace(/\\/+$/, '');\n const trimmedPath = path.replace(/^\\/+/, '');\n return `${trimmedBase}/${trimmedPath}`;\n};\n\nconst normalizeToolCalls = (toolCalls?: OpenAIToolCall[]): AiToolCall[] | undefined => {\n if (!toolCalls || !toolCalls.length) {\n return undefined;\n }\n\n return toolCalls.map((call, index) => ({\n id: call?.id ?? String(index),\n type: 'function',\n function: {\n name: call?.function?.name ?? '',\n arguments: call?.function?.arguments ?? '',\n },\n }));\n};\n\nconst normalizeUsage = (usage?: OpenAIChatResponse['usage']): AiUsage | undefined => {\n if (!usage) {\n return undefined;\n }\n\n return {\n promptTokens: usage.prompt_tokens,\n completionTokens: usage.completion_tokens,\n totalTokens: usage.total_tokens,\n };\n};\n\nconst mapMessage = (message: AiMessage): Record<string, any> => {\n const mapped: Record<string, any> = {\n role: message.role,\n content: message.content,\n };\n\n if (message.name) {\n mapped.name = message.name;\n }\n if (message.toolCallId) {\n mapped.tool_call_id = message.toolCallId;\n }\n if (message.toolCalls?.length) {\n mapped.tool_calls = message.toolCalls.map((call) => ({\n id: call.id,\n type: call.type,\n function: {\n name: call.function.name,\n arguments: call.function.arguments,\n },\n }));\n }\n\n return mapped;\n};\n\nexport const createOpenAICompatibleProvider = (): AiProvider => {\n return {\n id: 'openai-compatible',\n sendChat: async (request: AiChatRequest, config: ResolvedAiClientConfig): Promise<AiChatResponse> => {\n if (request.stream) {\n throw new Error('Streaming is not supported in sendChat. Use streamChat when available.');\n }\n\n const model = request.model ?? config.model ?? DEFAULT_OPENAI_MODEL;\n if (!model) {\n throw new Error('Model is required for chat completion requests.');\n }\n\n const payload: Record<string, any> = {\n model,\n messages: request.messages.map(mapMessage),\n };\n\n if (request.temperature !== undefined) {\n payload.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n payload.max_tokens = request.maxTokens;\n }\n if (request.topP !== undefined) {\n payload.top_p = request.topP;\n }\n if (request.stop !== undefined) {\n payload.stop = request.stop;\n }\n if (request.tools) {\n payload.tools = request.tools;\n }\n if (request.toolChoice) {\n payload.tool_choice = request.toolChoice;\n }\n\n const url = joinUrl(config.baseUrl || DEFAULT_OPENAI_BASE_URL, 'chat/completions');\n const response = await requestJson<OpenAIChatResponse>({\n url,\n method: 'POST',\n headers: config.headers,\n body: payload,\n timeoutMs: config.timeoutMs,\n requestAdapter: config.requestAdapter,\n });\n\n const firstMessage = response.choices?.[0]?.message;\n const toolCalls = normalizeToolCalls(firstMessage?.tool_calls);\n const content = firstMessage?.content ?? '';\n const assistantMessage: AiMessage = {\n role: 'assistant',\n content,\n toolCalls,\n };\n\n return {\n id: response.id ?? '',\n content,\n message: assistantMessage,\n usage: normalizeUsage(response.usage),\n toolCalls,\n raw: response,\n };\n },\n };\n};\n","import type {\n AiChatRequest,\n AiChatRequestOptions,\n AiChatResponse,\n AiClient,\n AiClientConfig,\n AiMessage,\n ResolvedAiClientConfig,\n} from '../types';\nimport type { AiProvider } from '../providers/types';\nimport { createOpenAICompatibleProvider } from '../providers/openai-compatible';\n\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nconst resolveApiKey = async (config: AiClientConfig): Promise<string | undefined> => {\n if (config.apiKey) {\n return config.apiKey;\n }\n if (config.getApiKey) {\n return await config.getApiKey();\n }\n return undefined;\n};\n\nconst hasAuthorizationHeader = (headers: Record<string, string>): boolean => {\n return Object.keys(headers).some((key) => key.toLowerCase() === 'authorization');\n};\n\nconst resolveHeaders = async (config: AiClientConfig): Promise<Record<string, string>> => {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(config.headers ?? {}),\n };\n\n if (!hasAuthorizationHeader(headers)) {\n const apiKey = await resolveApiKey(config);\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`;\n }\n }\n\n return headers;\n};\n\nconst resolveClientConfig = async (config: AiClientConfig): Promise<ResolvedAiClientConfig> => {\n const headers = await resolveHeaders(config);\n\n return {\n ...config,\n baseUrl: config.baseUrl ?? 'https://api.openai.com/v1',\n headers,\n timeoutMs: config.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n };\n};\n\nconst resolveProvider = (provider?: AiProvider): AiProvider => {\n return provider ?? createOpenAICompatibleProvider();\n};\n\nexport const createAiClient = (config: AiClientConfig): AiClient => {\n const provider = resolveProvider(config.provider);\n\n const sendChat = async (request: AiChatRequest): Promise<AiChatResponse> => {\n const resolvedConfig = await resolveClientConfig(config);\n config.logger?.debug?.('ai.sendChat', {\n model: request.model ?? resolvedConfig.model,\n messageCount: request.messages.length,\n });\n try {\n return await provider.sendChat(request, resolvedConfig);\n } catch (error) {\n config.logger?.error?.('ai.sendChat.error', error);\n throw error;\n }\n };\n\n type SendMessageOptions = AiChatRequestOptions & { systemPrompt?: string };\n\n const sendMessage = async (\n content: string,\n options?: SendMessageOptions\n ): Promise<AiChatResponse> => {\n const resolvedOptions: SendMessageOptions = options ?? {};\n const { systemPrompt, ...requestOptions } = resolvedOptions;\n\n const messages: AiMessage[] = [];\n if (systemPrompt) {\n messages.push({ role: 'system', content: systemPrompt });\n }\n messages.push({ role: 'user', content });\n\n return sendChat({\n messages,\n ...requestOptions,\n });\n };\n\n return {\n sendChat,\n sendMessage,\n };\n};\n","export type PromptVariableValue = string | number | boolean | null | undefined;\n\nexport type PromptVariables = Record<string, PromptVariableValue>;\n\nexport const normalizePromptVariables = (\n variables: PromptVariables = {}\n): Record<string, string> => {\n const normalized: Record<string, string> = {};\n\n Object.entries(variables).forEach(([key, value]) => {\n if (value === null || value === undefined) {\n normalized[key] = '';\n } else {\n normalized[key] = String(value);\n }\n });\n\n return normalized;\n};\n","import { normalizePromptVariables, PromptVariables } from './variables';\n\nexport interface PromptTemplateOptions {\n missingValue?: string;\n preserveUnknown?: boolean;\n}\n\nexport const applyPromptTemplate = (\n template: string,\n variables: PromptVariables = {},\n options: PromptTemplateOptions = {}\n): string => {\n if (!template) {\n return '';\n }\n\n const resolved = normalizePromptVariables(variables);\n const missingValue = options.missingValue ?? '';\n\n return template.replace(/\\{\\{\\s*([a-zA-Z0-9_.-]+)\\s*\\}\\}/g, (_match, key: string) => {\n if (Object.prototype.hasOwnProperty.call(resolved, key)) {\n return resolved[key] ?? '';\n }\n\n return options.preserveUnknown ? `{{${key}}}` : missingValue;\n });\n};\n","import { applyPromptTemplate } from '../prompt/template';\nimport type { AiChatInputOptions, AiChatResponse, AiChatSession, AiChatSessionOptions, AiMessage } from '../types';\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const createChatSession = (options: AiChatSessionOptions): AiChatSession => {\n let systemPrompt = options.systemPrompt;\n let messages = buildBaseMessages(systemPrompt, options.initialMessages);\n\n const reset = () => {\n messages = buildBaseMessages(systemPrompt, options.initialMessages);\n };\n\n const setSystemPrompt = (prompt?: string) => {\n systemPrompt = prompt;\n reset();\n };\n\n const sendMessage = async (\n input: string,\n requestOptions: AiChatInputOptions = {}\n ): Promise<AiChatResponse> => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? options.template;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messages, userMessage];\n\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n\n messages = [...nextMessages, assistantMessage];\n\n return response;\n };\n\n return {\n getMessages: () => messages,\n setSystemPrompt,\n reset,\n sendMessage,\n };\n};\n","import { useCallback, useRef, useState } from 'react';\nimport { applyPromptTemplate } from '../prompt/template';\nimport type {\n AiChatInputOptions,\n AiChatResponse,\n AiChatStatus,\n AiClient,\n AiMessage,\n} from '../types';\n\nexport interface UseAiChatOptions {\n client: AiClient;\n systemPrompt?: string;\n template?: string;\n initialMessages?: AiMessage[];\n}\n\nconst buildBaseMessages = (systemPrompt?: string, initialMessages?: AiMessage[]): AiMessage[] => {\n const baseMessages: AiMessage[] = [];\n if (systemPrompt) {\n baseMessages.push({ role: 'system', content: systemPrompt });\n }\n if (initialMessages?.length) {\n baseMessages.push(...initialMessages);\n }\n return baseMessages;\n};\n\nexport const useAiChat = (options: UseAiChatOptions) => {\n const systemPromptRef = useRef(options.systemPrompt);\n const templateRef = useRef(options.template);\n const [messages, setMessages] = useState<AiMessage[]>(() =>\n buildBaseMessages(systemPromptRef.current, options.initialMessages)\n );\n const messagesRef = useRef(messages);\n const [status, setStatus] = useState<AiChatStatus>('idle');\n const [error, setError] = useState<Error | null>(null);\n const [lastResponse, setLastResponse] = useState<AiChatResponse | null>(null);\n\n const syncMessages = (nextMessages: AiMessage[]) => {\n messagesRef.current = nextMessages;\n setMessages(nextMessages);\n };\n\n const reset = useCallback(() => {\n syncMessages(buildBaseMessages(systemPromptRef.current, options.initialMessages));\n setStatus('idle');\n setError(null);\n setLastResponse(null);\n }, [options.initialMessages]);\n\n const setSystemPrompt = useCallback(\n (prompt?: string) => {\n systemPromptRef.current = prompt;\n reset();\n },\n [reset]\n );\n\n const sendMessage = useCallback(\n async (input: string, requestOptions: AiChatInputOptions = {}) => {\n const { template, variables, ...chatOptions } = requestOptions;\n const activeTemplate = template ?? templateRef.current;\n const mergedVariables = { input, ...(variables ?? {}) };\n const content = activeTemplate ? applyPromptTemplate(activeTemplate, mergedVariables) : input;\n\n const userMessage: AiMessage = { role: 'user', content };\n const nextMessages = [...messagesRef.current, userMessage];\n syncMessages(nextMessages);\n setStatus('loading');\n setError(null);\n\n try {\n const response = await options.client.sendChat({\n messages: nextMessages,\n ...chatOptions,\n });\n\n const assistantMessage: AiMessage =\n response.message ?? {\n role: 'assistant',\n content: response.content,\n toolCalls: response.toolCalls,\n };\n const updatedMessages = [...nextMessages, assistantMessage];\n syncMessages(updatedMessages);\n setStatus('success');\n setLastResponse(response);\n return response;\n } catch (err) {\n const nextError = err instanceof Error ? err : new Error(String(err));\n setStatus('error');\n setError(nextError);\n throw nextError;\n }\n },\n [options.client]\n );\n\n return {\n status,\n isLoading: status === 'loading',\n error,\n messages,\n lastResponse,\n sendMessage,\n reset,\n setSystemPrompt,\n };\n};\n","import type { AiToolDefinition } from '../types';\nimport type { SkillDefinition, SkillExecutionContext, SkillRegistry } from './types';\n\nexport const skillToToolDefinition = (skill: SkillDefinition): AiToolDefinition => {\n const toolDefinition: AiToolDefinition = {\n type: 'function',\n function: {\n name: skill.name,\n description: skill.description,\n },\n };\n\n if (skill.inputSchema) {\n toolDefinition.function.parameters = skill.inputSchema;\n }\n\n return toolDefinition;\n};\n\nexport class InMemorySkillRegistry implements SkillRegistry {\n private skills = new Map<string, SkillDefinition>();\n\n constructor(initialSkills?: SkillDefinition[]) {\n initialSkills?.forEach((skill) => {\n this.skills.set(skill.name, skill);\n });\n }\n\n registerSkill(skill: SkillDefinition): void {\n this.skills.set(skill.name, skill);\n }\n\n unregisterSkill(name: string): boolean {\n return this.skills.delete(name);\n }\n\n getSkill(name: string): SkillDefinition | undefined {\n return this.skills.get(name);\n }\n\n listSkills(): SkillDefinition[] {\n return Array.from(this.skills.values());\n }\n\n async executeSkill(name: string, input: any, context?: SkillExecutionContext): Promise<any> {\n const skill = this.skills.get(name);\n if (!skill) {\n throw new Error(`Skill not found: ${name}`);\n }\n return await skill.execute(input, context);\n }\n\n toToolDefinitions(): AiToolDefinition[] {\n return this.listSkills().map(skillToToolDefinition);\n }\n}\n\nexport const createSkillRegistry = (initialSkills?: SkillDefinition[]): InMemorySkillRegistry => {\n return new InMemorySkillRegistry(initialSkills);\n};\n","/**\n * 时间格式化工具\n */\n\nexport const formatTime = {\n /**\n * 将秒数转换为 MM:SS 格式\n */\n toMinutesSeconds(seconds: number): string {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 将秒数转换为 HH:MM:SS 格式\n */\n toHoursMinutesSeconds(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n\n if (hours > 0) {\n return hours + ':' + minutes.toString().padStart(2, '0') + ':' + remainingSeconds.toString().padStart(2, '0');\n }\n return minutes + ':' + remainingSeconds.toString().padStart(2, '0');\n },\n\n /**\n * 格式化日期为用户友好的格式\n */\n formatDate(date: string | Date, locale = 'zh-CN'): string {\n const d = new Date(date);\n const now = new Date();\n const diffMs = now.getTime() - d.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) {\n return locale === 'zh-CN' ? '今天' : 'Today';\n } else if (diffDays === 1) {\n return locale === 'zh-CN' ? '昨天' : 'Yesterday';\n } else if (diffDays < 7) {\n return locale === 'zh-CN' ? diffDays + '天前' : diffDays + ' days ago';\n } else {\n return d.toLocaleDateString(locale);\n }\n },\n};\n\n","/**\n * 日语文本处理工具\n */\n\nexport const japaneseUtils = {\n /**\n * 提取文本中的汉字\n */\n extractKanji(text: string): string[] {\n return text.match(/[\\u4E00-\\u9FAF]/g) || [];\n },\n\n /**\n * 提取文本中的假名\n */\n extractKana(text: string): string[] {\n return text.match(/[\\u3040-\\u309F\\u30A0-\\u30FF]/g) || [];\n },\n\n /**\n * 清理文本,移除特殊字符但保留日语字符\n */\n cleanText(text: string): string {\n return text.replace(/[^\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FAF\\w\\s]/g, '');\n },\n};\n","/**\n * 验证工具\n */\n\nexport const validators = {\n /**\n * 验证邮箱格式\n */\n isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n },\n\n /**\n * 验证密码强度\n */\n isValidPassword(password: string): {\n isValid: boolean;\n errors: string[];\n } {\n const errors: string[] = [];\n\n if (password.length < 6) {\n errors.push('Password must be at least 6 characters');\n }\n\n if (password.length > 50) {\n errors.push('Password must not exceed 50 characters');\n }\n\n if (!/[a-zA-Z]/.test(password)) {\n errors.push('Password must contain at least one letter');\n }\n\n if (!/[0-9]/.test(password)) {\n errors.push('Password must contain at least one number');\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n /**\n * 验证用户名格式\n */\n isValidUsername(username: string): boolean {\n const usernameRegex = /^[a-zA-Z0-9_]{3,20}$/;\n return usernameRegex.test(username);\n },\n\n /**\n * 验证文件大小\n */\n isValidFileSize(size: number, maxSize: number): boolean {\n return size > 0 && size <= maxSize;\n },\n\n /**\n * 验证文件类型\n */\n isValidFileType(type: string, supportedTypes: string[]): boolean {\n return supportedTypes.includes(type);\n },\n\n /**\n * 验证 URL 格式\n */\n isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n },\n};\n\n","/**\n * 文件处理工具\n */\n\nexport const fileUtils = {\n /**\n * 格式化文件大小\n */\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n },\n\n /**\n * 获取文件扩展名\n */\n getFileExtension(filename: string): string {\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2);\n },\n\n /**\n * 生成唯一文件名\n */\n generateUniqueFileName(originalName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 15);\n const extension = this.getFileExtension(originalName);\n const baseName = originalName.replace('.' + (extension), '');\n return extension ? (baseName) + '_' + (timestamp) + '_' + (random) + '.' + (extension) : (baseName) + '_' + (timestamp) + '_' + (random);\n },\n\n /**\n * 验证文件名是否有效\n */\n isValidFilename(filename: string): boolean {\n // 不允许包含特殊字符\n const invalidChars = /[<>:\"/\\\\|?*\\x00-\\x1F]/g;\n return !invalidChars.test(filename) && filename.length > 0 && filename.length <= 255;\n },\n};\n\n","/**\n * 数组和对象工具\n */\n\nexport const arrayUtils = {\n /**\n * 数组去重\n */\n unique<T>(array: T[]): T[] {\n return [...new Set(array)];\n },\n\n /**\n * 数组分组\n */\n groupBy<T>(array: T[], key: keyof T): Record<string, T[]> {\n return array.reduce(\n (groups, item) => {\n const groupKey = String(item[key]);\n const group = groups[groupKey] || [];\n group.push(item);\n groups[groupKey] = group;\n return groups;\n },\n {} as Record<string, T[]>\n );\n },\n\n /**\n * 数组分页\n */\n paginate<T>(\n array: T[],\n page: number,\n limit: number\n ): {\n data: T[];\n total: number;\n page: number;\n pages: number;\n hasNext: boolean;\n hasPrev: boolean;\n } {\n const total = array.length;\n const pages = Math.ceil(total / limit);\n const start = (page - 1) * limit;\n const end = start + limit;\n const data = array.slice(start, end);\n\n return {\n data,\n total,\n page,\n pages,\n hasNext: page < pages,\n hasPrev: page > 1,\n };\n },\n\n /**\n * 数组随机排序\n */\n shuffle<T>(array: T[]): T[] {\n const shuffled = [...array];\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [shuffled[i], shuffled[j]] = [shuffled[j]!, shuffled[i]!];\n }\n return shuffled;\n },\n};\n\n","/**\n * 字符串工具\n */\n\nexport const stringUtils = {\n /**\n * 截断文本\n */\n truncate(text: string, length: number, suffix = '...'): string {\n if (text.length <= length) return text;\n return text.substring(0, length - suffix.length) + suffix;\n },\n\n /**\n * 首字母大写\n */\n capitalize(text: string): string {\n if (!text) return '';\n return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();\n },\n\n /**\n * 驼峰转下划线\n */\n camelToSnake(text: string): string {\n return text.replace(/[A-Z]/g, (letter) => '_' + (letter.toLowerCase()));\n },\n\n /**\n * 下划线转驼峰\n */\n snakeToCamel(text: string): string {\n return text.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\n },\n\n /**\n * 生成随机字符串\n */\n generateRandom(length: number): string {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n },\n};\n\n","/**\n * 调试工具\n */\n\nimport { logger } from '../logger';\nimport { fileUtils } from './file';\n\nexport const debugUtils = {\n /**\n * 安全的 JSON 序列化\n */\n safeStringify(obj: any): string {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (error) {\n return '[Circular Reference or Invalid JSON: ' + (error) + ']';\n }\n },\n\n /**\n * 性能计时器\n */\n createTimer(label?: string) {\n const start = typeof performance !== 'undefined' ? performance.now() : Date.now();\n return {\n end: () => {\n const end = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const duration = end - start;\n const message = (label || 'Timer') + ': ' + (duration.toFixed(2)) + 'ms';\n logger.info(message);\n return duration;\n },\n };\n },\n\n /**\n * 内存使用情况(仅在 Node.js 环境)\n */\n getMemoryUsage(): Record<string, string> | null {\n if (typeof process !== 'undefined' && process.memoryUsage) {\n const usage = process.memoryUsage();\n return {\n rss: fileUtils.formatFileSize(usage.rss),\n heapTotal: fileUtils.formatFileSize(usage.heapTotal),\n heapUsed: fileUtils.formatFileSize(usage.heapUsed),\n external: fileUtils.formatFileSize(usage.external),\n };\n }\n return null;\n },\n};\n\n","/**\n * 错误处理工具\n */\n\nexport const errorUtils = {\n /**\n * 创建标准化的错误对象\n */\n createError(\n code: string,\n message: string,\n details?: any\n ): Error & { code: string; details?: any } {\n const error = new Error(message) as Error & { code: string; details?: any };\n error.code = code;\n if (details) {\n error.details = details;\n }\n return error;\n },\n\n /**\n * 安全的错误信息提取\n */\n extractErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error) {\n return String(error.message);\n }\n return 'Unknown error';\n },\n\n /**\n * 错误重试机制\n */\n async retry<T>(fn: () => Promise<T>, maxAttempts = 3, delay = 1000): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === maxAttempts) {\n throw lastError;\n }\n\n // 指数退避延迟\n await new Promise((resolve) => setTimeout(resolve, delay * Math.pow(2, attempt - 1)));\n }\n }\n\n throw lastError!;\n },\n};\n\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\nimport { cva } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', asChild = false, children, ...props }, ref) => {\n if (asChild && React.isValidElement(children)) {\n const childProps = children.props as { className?: string }\n return React.cloneElement(children, {\n ...(props as object),\n className: cn(buttonVariants({ variant, size, className }), childProps.className),\n })\n }\n\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n >\n {children}\n </button>\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow\",\n className\n )}\n {...(props as any)}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...(props as any)}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"font-semibold leading-none tracking-tight\", className)}\n {...(props as any)}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...(props as any)} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...(props as any)}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n {\n variants: {\n variant: {\n default:\n \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n secondary:\n \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive:\n \"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n outline: \"text-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...(props as any)} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n HTMLLabelElement,\n React.LabelHTMLAttributes<HTMLLabelElement> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={cn(labelVariants(), className)}\n {...(props as any)}\n />\n))\nLabel.displayName = \"Label\"\n\nexport { Label }\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T;\n defaultValue: T;\n onChange?: (next: T) => void;\n}) {\n const [internal, setInternal] = React.useState<T>(defaultValue);\n const isControlled = value !== undefined;\n const state = isControlled ? (value as T) : internal;\n\n const setState = React.useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n return [state, setState] as const;\n}\n\nexport function Portal({\n children,\n container,\n}: {\n children: React.ReactNode;\n container?: Element | null;\n}) {\n const [mounted, setMounted] = React.useState(false);\n\n React.useEffect(() => {\n setMounted(true);\n }, []);\n\n if (!mounted) return null;\n return createPortal(children, container ?? document.body);\n}\n\nexport function useOnClickOutside(\n refs: Array<React.RefObject<HTMLElement | null>>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled: boolean\n) {\n React.useEffect(() => {\n if (!enabled) return;\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node;\n const clickedInside = refs.some((ref) => {\n const el = ref.current;\n return el && el.contains(target);\n });\n if (!clickedInside) {\n handler(event);\n }\n };\n\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n };\n }, [refs, handler, enabled]);\n}\n\nexport function mergeRefs<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(value);\n } else {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { useControllableState } from \"./internal/ui-core\"\n\ninterface TabsContextValue {\n value: string\n setValue: (next: string) => void\n}\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null)\n\ninterface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nconst Tabs = ({\n value,\n defaultValue = \"\",\n onValueChange,\n className,\n ...props\n}: TabsProps) => {\n const [current, setCurrent] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n })\n\n return (\n <TabsContext.Provider value={{ value: current, setValue: setCurrent }}>\n <div className={className} {...(props as any)} />\n </TabsContext.Provider>\n )\n}\n\nconst TabsList = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground\",\n className\n )}\n {...(props as any)}\n />\n))\nTabsList.displayName = \"TabsList\"\n\ninterface TabsTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n ({ className, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n data-state={active ? \"active\" : \"inactive\"}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n active && \"bg-background text-foreground shadow\",\n className\n )}\n onClick={(e) => {\n ctx?.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n }\n)\nTabsTrigger.displayName = \"TabsTrigger\"\n\ninterface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n forceMount?: boolean\n}\n\nconst TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ className, value, forceMount = false, ...props }, ref) => {\n const ctx = React.useContext(TabsContext)\n const active = ctx?.value === value\n if (!active && !forceMount) return null\n\n return (\n <div\n ref={ref}\n data-state={active ? \"active\" : \"inactive\"}\n hidden={!active && forceMount}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...(props as any)}\n />\n )\n }\n)\nTabsContent.displayName = \"TabsContent\"\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DialogContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DialogContext = React.createContext<DialogContextValue | null>(null)\n\ninterface DialogProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, defaultOpen = false, onOpenChange, children }: DialogProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DialogContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\ninterface TriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, TriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(true)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nDialogTrigger.displayName = \"DialogTrigger\"\n\nconst DialogPortal = ({ children }: { children: React.ReactNode }) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return <Portal>{children}</Portal>\n}\n\nconst DialogClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ onClick, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={(e) => {\n ctx?.setOpen(false)\n onClick?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nDialogClose.displayName = \"DialogClose\"\n\nconst DialogOverlay = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n if (!ctx?.open) return null\n return (\n <div\n ref={ref}\n className={cn(\"fixed inset-0 z-[9999] bg-black/80\", className)}\n {...(props as any)}\n />\n )\n})\nDialogOverlay.displayName = \"DialogOverlay\"\n\nexport interface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n onPointerDownOutside?: (event: PointerEvent) => void\n onEscapeKeyDown?: (event: KeyboardEvent) => void\n showCloseButton?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, onPointerDownOutside, onEscapeKeyDown, showCloseButton = true, overlayClassName, ...props }, ref) => {\n const ctx = React.useContext(DialogContext)\n const open = !!ctx?.open\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n (evt) => {\n onPointerDownOutside?.(evt as PointerEvent)\n if (!(evt as Event).defaultPrevented) {\n ctx?.setOpen(false)\n }\n },\n open\n )\n\n React.useEffect(() => {\n if (!open) return\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return\n onEscapeKeyDown?.(e)\n if (!e.defaultPrevented) {\n ctx?.setOpen(false)\n }\n }\n document.addEventListener(\"keydown\", onKey)\n return () => document.removeEventListener(\"keydown\", onKey)\n }, [ctx, onEscapeKeyDown, open])\n\n if (!ctx || !open) return null\n\n return (\n <DialogPortal>\n <DialogOverlay className={overlayClassName} />\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"fixed left-[50%] top-[50%] z-[10000] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg sm:rounded-lg\",\n className\n )}\n {...(props as any)}\n >\n {children}\n {showCloseButton ? (\n <DialogClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogClose>\n ) : null}\n </div>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...(props as any)}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nDialogDescription.displayName = \"DialogDescription\"\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { buttonVariants } from \"./Button\"\nimport {\n Dialog as AlertDialog,\n DialogPortal as AlertDialogPortal,\n DialogOverlay as AlertDialogOverlay,\n DialogTrigger as AlertDialogTrigger,\n DialogContent as AlertDialogContentBase,\n DialogHeader as AlertDialogHeader,\n DialogFooter as AlertDialogFooter,\n DialogTitle as AlertDialogTitle,\n DialogDescription as AlertDialogDescription,\n DialogClose,\n} from \"./Dialog\"\n\nconst AlertDialogContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof AlertDialogContentBase>\n>(({ className, ...props }, ref) => (\n <AlertDialogContentBase\n ref={ref}\n className={cn(\"z-[9999]\", className)}\n {...(props as any)}\n />\n))\nAlertDialogContent.displayName = \"AlertDialogContent\"\n\nconst AlertDialogAction = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...(props as any)}\n />\n))\nAlertDialogAction.displayName = \"AlertDialogAction\"\n\nconst AlertDialogCancel = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, ...props }, ref) => (\n <DialogClose\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...(props as any)}\n />\n))\nAlertDialogCancel.displayName = \"AlertDialogCancel\"\n\nexport {\n AlertDialog,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface DropdownMenuContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst DropdownMenuContext = React.createContext<DropdownMenuContextValue | null>(null)\nconst DropdownMenuRadioGroupContext = React.createContext<{\n value?: string\n onValueChange?: (value: string) => void\n} | null>(null)\n\ninterface DropdownMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst DropdownMenu = ({ open, defaultOpen = false, onOpenChange, children }: DropdownMenuProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <DropdownMenuContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, contentRef }}>\n {children}\n </DropdownMenuContext.Provider>\n )\n}\n\nconst DropdownMenuTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n})\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\"\n\nconst DropdownMenuGroup = ({ children }: { children: React.ReactNode }) => <>{children}</>\nconst DropdownMenuPortal = ({ children }: { children: React.ReactNode }) => <Portal>{children}</Portal>\nconst DropdownMenuSub = ({ children }: { children: React.ReactNode }) => <>{children}</>\n\nconst DropdownMenuContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + sideOffset, left: rect.left })\n }, [trigger, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <DropdownMenuPortal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n className\n )}\n style={{ position: \"fixed\", top: pos.top, left: pos.left, ...style }}\n {...(props as any)}\n />\n </DropdownMenuPortal>\n )\n})\nDropdownMenuContent.displayName = \"DropdownMenuContent\"\n\ntype SelectEventLike = Event & { preventDefault: () => void; defaultPrevented: boolean }\n\nconst DropdownMenuItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n inset?: boolean\n onSelect?: (event: SelectEventLike) => void\n }\n>(({ className, inset, onSelect, onClick, ...props }, ref) => {\n const ctx = React.useContext(DropdownMenuContext)\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n inset && \"pl-8\",\n className\n )}\n onClick={(e) => {\n onSelect?.(e.nativeEvent as SelectEventLike)\n onClick?.(e)\n if (!e.isDefaultPrevented()) {\n ctx?.setOpen(false)\n }\n }}\n {...(props as any)}\n />\n )\n})\nDropdownMenuItem.displayName = \"DropdownMenuItem\"\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & {\n checked?: boolean\n onCheckedChange?: (checked: boolean) => void\n }\n>(({ className, children, checked = false, onCheckedChange, onClick, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n onCheckedChange?.(!checked)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n {children}\n </button>\n))\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\"\n\nconst DropdownMenuRadioGroup = ({\n value,\n onValueChange,\n children,\n}: {\n value?: string\n onValueChange?: (value: string) => void\n children: React.ReactNode\n}) => (\n <DropdownMenuRadioGroupContext.Provider value={{ value, onValueChange }}>\n {children}\n </DropdownMenuRadioGroupContext.Provider>\n)\n\nconst DropdownMenuRadioItem = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { value: string }\n>(({ className, children, value, onClick, ...props }, ref) => {\n const radioCtx = React.useContext(DropdownMenuRadioGroupContext)\n const menuCtx = React.useContext(DropdownMenuContext)\n const checked = radioCtx?.value === value\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n radioCtx?.onValueChange?.(value)\n onClick?.(e)\n menuCtx?.setOpen(false)\n }}\n {...(props as any)}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {checked ? <Circle className=\"h-2 w-2 fill-current\" /> : null}\n </span>\n {children}\n </button>\n )\n})\nDropdownMenuRadioItem.displayName = \"DropdownMenuRadioItem\"\n\nconst DropdownMenuLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", inset && \"pl-8\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\"\n\nconst DropdownMenuSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\"\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...(props as any)}\n />\n)\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement> & { inset?: boolean }\n>(({ className, inset, children, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent\",\n inset && \"pl-8\",\n className\n )}\n {...(props as any)}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </button>\n))\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\"\n\nconst DropdownMenuSubContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg\",\n className\n )}\n {...(props as any)}\n />\n))\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n anchorRef: React.RefObject<HTMLSpanElement>\n contentRef: React.RefObject<HTMLDivElement>\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\ninterface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\nconst Popover = ({ open, defaultOpen = false, onOpenChange, children }: PopoverProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const anchorRef = React.useRef<HTMLSpanElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n\n return (\n <PopoverContext.Provider value={{ open: isOpen, setOpen: setIsOpen, triggerRef, anchorRef, contentRef }}>\n {children}\n </PopoverContext.Provider>\n )\n}\n\ninterface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n children: React.ReactNode\n}\n\nconst PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, onClick, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n const mergedRef = mergeRefs<HTMLButtonElement>(ctx.triggerRef, ref)\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }\n\n return (\n <button ref={mergedRef} type=\"button\" onClick={handleClick} {...(props as any)}>\n {children}\n </button>\n )\n }\n)\nPopoverTrigger.displayName = \"PopoverTrigger\"\n\nconst PopoverAnchor = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(\n ({ ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) return null\n\n return (\n <span ref={mergeRefs(ctx.anchorRef, ref)} {...(props as any)} />\n )\n }\n)\nPopoverAnchor.displayName = \"PopoverAnchor\"\n\ninterface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n align?: \"start\" | \"center\" | \"end\"\n sideOffset?: number\n}\n\nconst PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ className, align = \"center\", sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(PopoverContext)\n const [position, setPosition] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const anchor = ctx?.anchorRef.current ?? ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n let left = rect.left + rect.width / 2\n if (align === \"start\") left = rect.left\n if (align === \"end\") left = rect.right\n setPosition({ top: rect.bottom + sideOffset, left })\n }, [anchor, align, sideOffset])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n className\n )}\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n transform: align === \"center\" ? \"translateX(-50%)\" : align === \"end\" ? \"translateX(-100%)\" : undefined,\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n }\n)\nPopoverContent.displayName = \"PopoverContent\"\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface ProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: number\n max?: number\n}\n\nconst Progress = React.forwardRef<HTMLDivElement, ProgressProps>(\n ({ className, value = 0, max = 100, ...props }, ref) => {\n const safeMax = max <= 0 ? 100 : max\n const safeValue = Math.max(0, Math.min(value, safeMax))\n const percent = (safeValue / safeMax) * 100\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={safeValue}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...(props as any)}\n >\n <div\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - percent}%)` }}\n />\n </div>\n )\n }\n)\nProgress.displayName = \"Progress\"\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst ScrollArea = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"relative overflow-auto\", className)}\n {...(props as any)}\n >\n {children}\n </div>\n))\nScrollArea.displayName = \"ScrollArea\"\n\ninterface ScrollBarProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"vertical\" | \"horizontal\"\n}\n\nconst ScrollBar = React.forwardRef<HTMLDivElement, ScrollBarProps>(\n ({ className, orientation = \"vertical\", ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"pointer-events-none absolute\",\n orientation === \"vertical\"\n ? \"right-0 top-0 h-full w-2.5\"\n : \"bottom-0 left-0 h-2.5 w-full\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nScrollBar.displayName = \"ScrollBar\"\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal, useControllableState, useOnClickOutside } from \"./internal/ui-core\"\n\ninterface SelectContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n value?: string\n setValue: (value: string) => void\n triggerRef: React.RefObject<HTMLButtonElement>\n contentRef: React.RefObject<HTMLDivElement>\n itemsRef: React.MutableRefObject<Map<string, React.ReactNode>>\n}\n\nconst SelectContext = React.createContext<SelectContextValue | null>(null)\nconst SelectGroupContext = React.createContext<boolean>(false)\n\ninterface SelectProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nconst Select = ({\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen = false,\n onOpenChange,\n disabled = false,\n children,\n}: SelectProps) => {\n const [isOpen, setIsOpen] = useControllableState({\n value: open,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n })\n const [currentValue, setCurrentValue] = useControllableState<string | undefined>({\n value,\n defaultValue,\n onChange: (next) => {\n if (next !== undefined) {\n onValueChange?.(next)\n }\n },\n })\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const itemsRef = React.useRef<Map<string, React.ReactNode>>(new Map())\n\n return (\n <SelectContext.Provider\n value={{\n open: disabled ? false : isOpen,\n setOpen: disabled ? () => undefined : setIsOpen,\n value: currentValue,\n setValue: (next) => {\n if (disabled) return\n setCurrentValue(next)\n setIsOpen(false)\n },\n triggerRef,\n contentRef,\n itemsRef,\n }}\n >\n {children}\n </SelectContext.Provider>\n )\n}\n\nconst SelectGroup = ({ children }: { children: React.ReactNode }) => (\n <SelectGroupContext.Provider value={true}>{children}</SelectGroupContext.Provider>\n)\n\nconst SelectValue = ({\n placeholder,\n children,\n}: {\n placeholder?: React.ReactNode\n children?: React.ReactNode\n}) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n if (children) return <>{children}</>\n if (ctx.value && ctx.itemsRef.current.has(ctx.value)) {\n return <>{ctx.itemsRef.current.get(ctx.value)}</>\n }\n return <span className=\"text-muted-foreground\">{placeholder}</span>\n}\n\nconst SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, children, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n if (!ctx) return null\n\n return (\n <button\n ref={mergeRefs(ctx.triggerRef, ref)}\n type=\"button\"\n className={cn(\n \"flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n onClick={(e) => {\n ctx.setOpen(!ctx.open)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span>{children}</span>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </button>\n )\n})\nSelectTrigger.displayName = \"SelectTrigger\"\n\nconst SelectScrollUpButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollUpButton.displayName = \"SelectScrollUpButton\"\n\nconst SelectScrollDownButton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...(props as any)}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </div>\n))\nSelectScrollDownButton.displayName = \"SelectScrollDownButton\"\n\nconst SelectContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & {\n position?: \"item-aligned\" | \"popper\"\n }\n>(({ className, children, style, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0, width: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({ top: rect.bottom + 4, left: rect.left, width: rect.width })\n }, [trigger])\n\n useOnClickOutside(\n [ctx?.contentRef ?? { current: null }, ctx?.triggerRef ?? { current: null }],\n () => ctx?.setOpen(false),\n open\n )\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={mergeRefs(ctx.contentRef, ref)}\n className={cn(\n \"relative z-50 max-h-80 overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n minWidth: Math.max(pos.width, 128),\n ...style,\n }}\n {...(props as any)}\n >\n <div className=\"p-1\">{children}</div>\n </div>\n </Portal>\n )\n})\nSelectContent.displayName = \"SelectContent\"\n\nconst SelectLabel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...(props as any)}\n />\n))\nSelectLabel.displayName = \"SelectLabel\"\n\ninterface SelectItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n}\n\nconst SelectItem = React.forwardRef<HTMLButtonElement, SelectItemProps>(\n ({ className, children, value, onClick, ...props }, ref) => {\n const ctx = React.useContext(SelectContext)\n\n React.useEffect(() => {\n if (!ctx) return\n ctx.itemsRef.current.set(value, children)\n return () => {\n ctx.itemsRef.current.delete(value)\n }\n }, [ctx, value, children])\n\n if (!ctx) return null\n\n const selected = ctx.value === value\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none hover:bg-accent hover:text-accent-foreground disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n onClick={(e) => {\n ctx.setValue(value)\n onClick?.(e)\n }}\n {...(props as any)}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n {selected ? <Check className=\"h-4 w-4\" /> : null}\n </span>\n <span>{children}</span>\n </button>\n )\n }\n)\nSelectItem.displayName = \"SelectItem\"\n\nconst SelectSeparator = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...(props as any)}\n />\n))\nSelectSeparator.displayName = \"SelectSeparator\"\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\"\n decorative?: boolean\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n role={decorative ? undefined : \"separator\"}\n aria-orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...(props as any)}\n />\n )\n)\nSeparator.displayName = \"Separator\"\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../utils\"\nimport {\n Dialog as Sheet,\n DialogTrigger as SheetTrigger,\n DialogClose as SheetClose,\n DialogPortal as SheetPortal,\n DialogOverlay as SheetOverlay,\n DialogContent as BaseDialogContent,\n} from \"./Dialog\"\n\nconst sheetVariants = cva(\n \"fixed z-[10000] gap-4 bg-background p-6 shadow-lg transition ease-in-out translate-x-0 translate-y-0\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 left-0 border-b\",\n bottom: \"inset-x-0 bottom-0 left-0 border-t\",\n left: \"inset-y-0 left-0 top-0 h-full w-3/4 border-r sm:max-w-sm\",\n right: \"inset-y-0 right-0 top-0 h-full w-3/4 border-l sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends Omit<React.ComponentPropsWithoutRef<typeof BaseDialogContent>, \"children\">,\n VariantProps<typeof sheetVariants> {\n children?: React.ReactNode\n}\n\nconst SheetContent = React.forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = \"right\", className, children, ...props }, ref) => (\n <BaseDialogContent\n ref={ref}\n className={cn(\n \"max-w-none rounded-none\",\n sheetVariants({ side }),\n className\n )}\n showCloseButton={false}\n {...(props as any)}\n >\n <SheetClose className=\"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetClose>\n {children}\n </BaseDialogContent>\n )\n)\nSheetContent.displayName = \"SheetContent\"\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...(props as any)}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetTitle.displayName = \"SheetTitle\"\n\nconst SheetDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...(props as any)}\n />\n))\nSheetDescription.displayName = \"SheetDescription\"\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className\n )}\n ref={ref}\n {...(props as any)}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\nimport { mergeRefs, Portal } from \"./internal/ui-core\"\n\nconst TooltipConfigContext = React.createContext<{ delayDuration: number }>({\n delayDuration: 200,\n})\n\ninterface TooltipContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n triggerRef: React.RefObject<HTMLSpanElement>\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\nconst TooltipProvider = ({\n children,\n delayDuration = 200,\n}: {\n children: React.ReactNode\n delayDuration?: number\n}) => {\n return (\n <TooltipConfigContext.Provider value={{ delayDuration }}>\n {children}\n </TooltipConfigContext.Provider>\n )\n}\n\nconst Tooltip = ({ children }: { children: React.ReactNode }) => {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLSpanElement>(null)\n return (\n <TooltipContext.Provider value={{ open, setOpen, triggerRef }}>\n {children}\n </TooltipContext.Provider>\n )\n}\n\nconst TooltipTrigger = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement> & { asChild?: boolean; children: React.ReactNode }\n>(({ children, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const cfg = React.useContext(TooltipConfigContext)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n if (!ctx) return null\n\n const setRef = mergeRefs(ctx.triggerRef, ref)\n\n const openWithDelay = () => {\n if (timer.current) clearTimeout(timer.current)\n timer.current = setTimeout(() => ctx.setOpen(true), cfg.delayDuration)\n }\n\n const closeNow = () => {\n if (timer.current) clearTimeout(timer.current)\n ctx.setOpen(false)\n }\n\n const shared = {\n onMouseEnter: openWithDelay,\n onMouseLeave: closeNow,\n onFocus: openWithDelay,\n onBlur: closeNow,\n ...props,\n }\n\n return (\n <span ref={setRef} {...(shared as any)}>\n {children}\n </span>\n )\n})\nTooltipTrigger.displayName = \"TooltipTrigger\"\n\nconst TooltipContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & { sideOffset?: number }\n>(({ className, sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const [pos, setPos] = React.useState({ top: 0, left: 0 })\n const open = !!ctx?.open\n const trigger = ctx?.triggerRef.current ?? null\n\n React.useLayoutEffect(() => {\n if (!trigger) return\n const rect = trigger.getBoundingClientRect()\n setPos({\n top: rect.top - sideOffset,\n left: rect.left + rect.width / 2,\n })\n }, [trigger, sideOffset])\n\n if (!ctx || !open || !trigger) return null\n\n return (\n <Portal>\n <div\n ref={ref}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground\",\n className\n )}\n style={{\n position: \"fixed\",\n top: pos.top,\n left: pos.left,\n transform: \"translate(-50%, -100%)\",\n ...style,\n }}\n {...(props as any)}\n />\n </Portal>\n )\n})\nTooltipContent.displayName = \"TooltipContent\"\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"../utils\"\n\ntype AvatarStatus = \"idle\" | \"loaded\" | \"error\"\n\nconst AvatarContext = React.createContext<{\n status: AvatarStatus\n setStatus: (next: AvatarStatus) => void\n} | null>(null)\n\nconst Avatar = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const [status, setStatus] = React.useState<AvatarStatus>(\"idle\")\n\n return (\n <AvatarContext.Provider value={{ status, setStatus }}>\n <span\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...(props as any)}\n />\n </AvatarContext.Provider>\n )\n})\nAvatar.displayName = \"Avatar\"\n\nconst AvatarImage = React.forwardRef<\n HTMLImageElement,\n React.ImgHTMLAttributes<HTMLImageElement>\n>(({ className, onLoad, onError, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n\n return (\n <img\n ref={ref}\n className={cn(\n \"aspect-square h-full w-full\",\n ctx?.status === \"error\" ? \"hidden\" : undefined,\n className\n )}\n onLoad={(e) => {\n ctx?.setStatus(\"loaded\")\n onLoad?.(e)\n }}\n onError={(e) => {\n ctx?.setStatus(\"error\")\n onError?.(e)\n }}\n {...(props as any)}\n />\n )\n})\nAvatarImage.displayName = \"AvatarImage\"\n\nconst AvatarFallback = React.forwardRef<\n HTMLSpanElement,\n React.HTMLAttributes<HTMLSpanElement>\n>(({ className, ...props }, ref) => {\n const ctx = React.useContext(AvatarContext)\n const show = ctx?.status !== \"loaded\"\n\n if (!show) return null\n\n return (\n <span\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className\n )}\n {...(props as any)}\n />\n )\n})\nAvatarFallback.displayName = \"AvatarFallback\"\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import React from 'react';\nimport { clsx } from 'clsx';\n\n// ==================== 公共类型定义 ====================\n\n/** 基础网格项接口 */\nexport interface GridItem {\n id: string;\n [key: string]: any; // 允许额外的属性\n }\n \n /** 网格列数配置 */\n export interface GridColumns {\n /** 小屏幕列数 (640px+) */\n sm?: number;\n /** 中等屏幕列数 (768px+) */\n md?: number;\n /** 大屏幕列数 (1024px+) */\n lg?: number;\n /** 超大屏幕列数 (1280px+) */\n xl?: number;\n }\n \n /** 网格间距类型 */\n export type GridGap = 'sm' | 'md' | 'lg' | 'xl';\n \n // ==================== 公共工具函数 ====================\n \n /** 构建网格列数类名 */\n export function buildGridColsClasses(columns: GridColumns): string {\n return [\n 'grid-cols-1', // 默认单列\n columns.sm ? 'sm:grid-cols-' + (columns.sm) : '',\n columns.md ? 'md:grid-cols-' + (columns.md) : 'md:grid-cols-2',\n columns.lg ? 'lg:grid-cols-' + (columns.lg) : 'lg:grid-cols-3',\n columns.xl ? 'xl:grid-cols-' + (columns.xl) : ''\n ].filter(Boolean).join(' ');\n }\n \n /** 获取间距类名 */\n export function getGapClassName(gap: GridGap): string {\n const gapClasses: Record<GridGap, string> = {\n sm: 'gap-3',\n md: 'gap-6',\n lg: 'gap-8',\n xl: 'gap-10'\n };\n return gapClasses[gap];\n }\n \n // ==================== 通用网格组件 ====================\n \n /** 通用网格组件 Props */\n export interface GridProps<T extends GridItem> {\n /** 数据项数组 */\n items: T[];\n /** 渲染函数 */\n renderItem: (item: T, index: number) => React.ReactNode;\n /** 网格列数配置 */\n columns?: GridColumns;\n /** 间距配置 */\n gap?: GridGap;\n /** 额外的容器类名 */\n className?: string;\n /** 容器样式 */\n style?: React.CSSProperties;\n }\n \n /** 通用网格组件 */\n export function Grid<T extends GridItem>({\n items,\n renderItem,\n columns = { md: 2, lg: 3 },\n gap = 'md',\n className = '',\n style\n }: GridProps<T>) {\n const gridColsClasses = buildGridColsClasses(columns);\n const gapClass = getGapClassName(gap);\n \n return (\n <div \n className={clsx('grid', gridColsClasses, gapClass, className)}\n style={style}\n >\n {items.map((item, index) => (\n <div key={item.id}>\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n );\n }","import React from 'react';\nimport { clsx } from 'clsx';\n\ninterface SearchBoxProps {\n searchQuery: string;\n onSearchChange: (query: string) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n}\n\nexport const SearchBox: React.FC<SearchBoxProps> = ({ \n searchQuery, \n onSearchChange, \n placeholder = \"搜索实验项目的标题、描述或标签...\",\n size = 'large'\n}) => {\n // 根据尺寸获取样式\n const getSizeStyles = () => {\n switch (size) {\n case 'small':\n return {\n container: 'h-10',\n input: 'pl-10 pr-10 text-sm',\n icon: 'w-4 h-4',\n iconPosition: 'left-3',\n clearButton: 'right-2 w-6 h-6',\n clearIcon: 'w-3 h-3'\n };\n case 'medium':\n return {\n container: 'h-12',\n input: 'pl-12 pr-12 text-base',\n icon: 'w-5 h-5',\n iconPosition: 'left-3',\n clearButton: 'right-3 w-7 h-7',\n clearIcon: 'w-4 h-4'\n };\n case 'large':\n default:\n return {\n container: 'h-16',\n input: 'pl-6 pr-16 text-lg',\n icon: 'w-6 h-6',\n iconPosition: 'left-6',\n clearButton: 'right-4 w-8 h-8',\n clearIcon: 'w-4 h-4'\n };\n }\n };\n\n const styles = getSizeStyles();\n const isLarge = size === 'large';\n\n return (\n <div className=\"relative group w-full\">\n {/* 搜索输入框 */}\n <input\n type=\"text\"\n placeholder={placeholder}\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n className={clsx(\n 'w-full',\n styles.container,\n styles.input,\n isLarge ? 'border-2 border-gray-200 rounded-2xl shadow-lg' : 'border border-gray-300 rounded-lg shadow-sm',\n 'bg-white focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 hover:border-gray-400',\n isLarge ? 'hover:shadow-xl' : 'hover:shadow-md',\n 'transition-all duration-300 ease-out text-gray-800 placeholder-gray-500',\n isLarge ? 'font-medium' : 'font-normal'\n )}\n />\n\n {/* 清除按钮 */}\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n className={clsx(\n 'absolute top-1/2',\n styles.clearButton,\n 'transform -translate-y-1/2 z-10 group/clear'\n )}\n >\n <div className={clsx(\n styles.clearButton,\n 'flex items-center justify-center rounded-full bg-gray-100 hover:bg-gray-200 transition-all duration-200 group-hover/clear:scale-105'\n )}>\n <svg \n className={clsx(styles.clearIcon, 'text-gray-500 group-hover/clear:text-gray-700')}\n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\" \n strokeWidth={2} \n d=\"M6 18L18 6M6 6l12 12\" \n />\n </svg>\n </div>\n </button>\n )}\n </div>\n );\n}","'use client';\n\nimport React from 'react';\n\n// Timeline相关的类型定义\nexport interface TimelineItem {\n date: string;\n title: string;\n description: string;\n}\n\nexport interface TimelineConfig {\n items: TimelineItem[];\n}\n\ninterface TimelineProps {\n items?: TimelineItem[];\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ items = [] }) => {\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <div className=\"relative\">\n {/* 时间线 */}\n <div className=\"absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200\"></div>\n \n {/* 时间线项目 */}\n {items.map((item, index) => (\n <div key={index} className=\"relative pl-12 pb-8\">\n {/* 时间点 */}\n <div className=\"absolute left-0 w-8 h-8 rounded-full bg-blue-500 border-4 border-white shadow-md flex items-center justify-center\">\n <div className=\"w-2 h-2 rounded-full bg-white\"></div>\n </div>\n \n {/* 内容 */}\n <div className=\"bg-white rounded-lg p-4 shadow-md\">\n <div className=\"text-sm text-gray-500 mb-2\">{item.date}</div>\n <h4 className=\"text-lg font-semibold mb-2\">{item.title}</h4>\n <p className=\"text-gray-600\">{item.description}</p>\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default Timeline;\n","'use client';\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { clsx } from 'clsx';\n\n// CollisionBalls相关的类型定义\nexport interface Ball {\n x: number;\n y: number;\n vx: number;\n vy: number;\n radius: number;\n color: string;\n text?: string;\n isDragging?: boolean;\n}\n\nexport interface CollisionBallsConfig {\n balls: {\n id: string;\n label: string;\n color: string;\n size: number;\n }[];\n width: number;\n height: number;\n}\n\ninterface CollisionBallsProps {\n collisionBallsConfig: CollisionBallsConfig;\n}\n\nexport const CollisionBalls: React.FC<CollisionBallsProps> = ({\n collisionBallsConfig: {\n balls,\n width,\n height\n },\n}) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const ballsRef = useRef<Ball[]>([]);\n const [isShaking, setIsShaking] = useState(false);\n const [draggedBall, setDraggedBall] = useState<Ball | null>(null);\n const [mousePos, setMousePos] = useState({ x: 0, y: 0 });\n const animationRef = useRef<number | null>(null);\n\n // 更新canvas尺寸\n const updateCanvasSize = () => {\n const container = containerRef.current;\n const canvas = canvasRef.current;\n if (!container || !canvas) {\n console.error('Container or canvas not found');\n return;\n }\n\n const containerWidth = container.clientWidth;\n const containerHeight = container.clientHeight;\n \n console.log('Container size:', { containerWidth, containerHeight });\n \n // 设置canvas的实际尺寸\n canvas.width = containerWidth;\n canvas.height = containerHeight;\n \n // 设置canvas的显示尺寸\n canvas.style.width = (containerWidth) + 'px';\n canvas.style.height = (containerHeight) + 'px';\n \n console.log('Canvas size updated:', {\n width: canvas.width,\n height: canvas.height,\n containerWidth,\n containerHeight\n });\n };\n\n // 初始化小球\n const initBalls = () => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas not found during ball initialization');\n return [];\n }\n\n console.log('Initializing balls with canvas size:', {\n width: canvas.width,\n height: canvas.height\n });\n\n return balls.map((ballConfig) => ({\n x: Math.random() * (canvas.width - 100) + 50,\n y: Math.random() * (canvas.height - 100) + 50,\n vx: (Math.random() - 0.5) * 4,\n vy: (Math.random() - 0.5) * 4,\n radius: ballConfig.size,\n color: ballConfig.color,\n text: ballConfig.label,\n isDragging: false\n }));\n };\n\n // 添加resize监听\n useEffect(() => {\n const handleResize = () => {\n console.log('Window resized');\n updateCanvasSize();\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('resize', handleResize);\n // 初始设置尺寸\n updateCanvasSize();\n }\n\n return () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('resize', handleResize);\n }\n };\n }, []);\n\n // 动画循环\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n console.error('Canvas element not found');\n return;\n }\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n console.error('Failed to get canvas context');\n return;\n }\n\n console.log('Starting animation setup...');\n \n // 确保canvas尺寸已更新\n updateCanvasSize();\n \n // 初始化小球\n ballsRef.current = initBalls();\n console.log('Balls initialized:', ballsRef.current);\n\n let lastTime = performance.now();\n let frameCount = 0;\n\n const animate = (currentTime: number) => {\n try {\n // 计算帧率\n frameCount++;\n if (currentTime - lastTime >= 1000) {\n console.log('FPS: ' + (frameCount));\n frameCount = 0;\n lastTime = currentTime;\n }\n\n // 清除画布\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // 更新和绘制每个小球\n ballsRef.current.forEach((ball) => {\n if (!ball.isDragging) {\n updatePosition(ball, canvas.width, canvas.height);\n }\n\n for (let i = 0; i < ballsRef.current.length; i++) {\n for (let j = i + 1; j < ballsRef.current.length; j++) {\n const ball1 = ballsRef.current[i];\n const ball2 = ballsRef.current[j];\n if (ball1 && ball2) {\n checkCollision(ball1, ball2);\n }\n }\n }\n\n draw(ctx, ball);\n });\n\n // 继续动画循环\n animationRef.current = requestAnimationFrame(animate);\n } catch (error) {\n console.error('Animation error:', error);\n }\n };\n\n // 启动动画\n console.log('Starting animation loop...');\n animationRef.current = requestAnimationFrame(animate);\n\n // 清理函数\n return () => {\n console.log('Cleaning up animation...');\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current);\n animationRef.current = null;\n }\n };\n }, []);\n\n const shake = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = (Math.random() - 0.5) * 10;\n ball.vy = (Math.random() - 0.5) * 10;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const slowdown = () => {\n setIsShaking(true);\n ballsRef.current.forEach((ball) => {\n ball.vx = ball.vx * 0.5;\n ball.vy = ball.vy * 0.5;\n });\n setTimeout(() => setIsShaking(false), 200);\n };\n\n const checkCollision = (ball1: Ball, ball2: Ball) => {\n const dx = ball2.x - ball1.x;\n const dy = ball2.y - ball1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (distance < ball1.radius + ball2.radius) {\n const angle = Math.atan2(dy, dx);\n const overlap = (ball1.radius + ball2.radius - distance) / 2;\n\n if (ball1.isDragging || ball2.isDragging) {\n const draggedBall = ball1.isDragging ? ball1 : ball2;\n const otherBall = ball1.isDragging ? ball2 : ball1;\n\n otherBall.x += (draggedBall === ball1 ? 1 : -1) * overlap * Math.cos(angle);\n otherBall.y += (draggedBall === ball1 ? 1 : -1) * overlap * Math.sin(angle);\n\n const pushForce = 2;\n otherBall.vx = (draggedBall === ball1 ? -1 : 1) * Math.cos(angle) * pushForce;\n otherBall.vy = (draggedBall === ball1 ? -1 : 1) * Math.sin(angle) * pushForce;\n\n return;\n }\n\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n\n const vx1 = ball1.vx * cos + ball1.vy * sin;\n const vy1 = ball1.vy * cos - ball1.vx * sin;\n const vx2 = ball2.vx * cos + ball2.vy * sin;\n const vy2 = ball2.vy * cos - ball2.vx * sin;\n\n const newVx1 = vx2;\n const newVx2 = vx1;\n\n ball1.vx = newVx1 * cos - vy1 * sin;\n ball1.vy = vy1 * cos + newVx1 * sin;\n ball2.vx = newVx2 * cos - vy2 * sin;\n ball2.vy = vy2 * cos + newVx2 * sin;\n\n ball1.x -= overlap * Math.cos(angle);\n ball1.y -= overlap * Math.sin(angle);\n ball2.x += overlap * Math.cos(angle);\n ball2.y += overlap * Math.sin(angle);\n }\n };\n\n const updatePosition = (ball: Ball, width: number, height: number) => {\n const handleBoundaryCollision = (\n velocity: number,\n position: number,\n boundary: number,\n radius: number,\n ): [number, number] => {\n let newVelocity = velocity;\n let newPosition = position;\n\n if (position - radius < 0) {\n newPosition = radius;\n newVelocity = Math.abs(velocity);\n } else if (position + radius > boundary) {\n newPosition = boundary - radius;\n newVelocity = -Math.abs(velocity);\n }\n\n return [newVelocity, newPosition];\n };\n\n const [newVx, newX] = handleBoundaryCollision(\n ball.vx,\n ball.x,\n width,\n ball.radius,\n );\n const [newVy, newY] = handleBoundaryCollision(\n ball.vy,\n ball.y,\n height,\n ball.radius,\n );\n\n ball.vx = newVx;\n ball.vy = newVy;\n ball.x = newX;\n ball.y = newY;\n };\n\n const draw = (ctx: CanvasRenderingContext2D, ball: Ball) => {\n ctx.beginPath();\n ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);\n ctx.fillStyle = ball.color;\n ctx.fill();\n ctx.closePath();\n\n if (ball.text) {\n ctx.font = \"14px Arial\";\n ctx.fillStyle = \"#fff\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(ball.text, ball.x, ball.y);\n }\n };\n\n const handleMouseDown = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n const ball = ballsRef.current.find((b) => {\n const dx = b.x - mousePos.x;\n const dy = b.y - mousePos.y;\n return Math.sqrt(dx * dx + dy * dy) < b.radius;\n });\n\n if (ball) {\n ball.isDragging = true;\n setDraggedBall(ball);\n }\n };\n\n const handleMouseMove = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const mousePos = getMousePos(event);\n setMousePos(mousePos);\n\n if (draggedBall) {\n draggedBall.x = mousePos.x;\n draggedBall.y = mousePos.y;\n draggedBall.vx = 0;\n draggedBall.vy = 0;\n }\n };\n\n const handleMouseUp = () => {\n if (draggedBall) {\n draggedBall.isDragging = false;\n setDraggedBall(null);\n }\n };\n\n const getMousePos = (event: React.MouseEvent<HTMLCanvasElement>) => {\n const canvas = canvasRef.current;\n if (!canvas) return { x: 0, y: 0 };\n\n const rect = canvas.getBoundingClientRect();\n const scaleX = canvas.width / rect.width;\n const scaleY = canvas.height / rect.height;\n \n return {\n x: (event.clientX - rect.left) * scaleX,\n y: (event.clientY - rect.top) * scaleY\n };\n };\n\n return (\n <div style={{ width: '100%', height: '100%', position: 'relative', backgroundColor: '#f9fafb', borderRadius: '0.5rem' }}>\n <div ref={containerRef} style={{ width: '100%', height: '100%', position: 'absolute', top: 0, left: 0 }}>\n <canvas\n ref={canvasRef}\n style={{ \n width: '100%', \n height: '100%',\n display: 'block' // 确保canvas正确显示\n }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseUp}\n />\n </div>\n <div className=\"absolute bottom-4 right-4 flex gap-2\">\n <button\n onClick={shake}\n className={clsx('px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 摇一摇\n </button>\n <button\n onClick={slowdown}\n className={clsx('px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors', isShaking ? \"animate-pulse\" : \"\")}\n >\n 减速\n </button>\n </div>\n </div>\n );\n};\n\nexport default CollisionBalls;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { \n ChevronUp, \n ChevronDown, \n GripVertical, \n Save,\n RotateCcw,\n AlertCircle\n} from 'lucide-react';\nimport { cn } from '../utils';\n\nexport interface OrderableItem {\n id: number;\n [key: string]: any;\n}\n\nexport interface OrderManagerOperations<T extends OrderableItem> {\n loadItems: () => Promise<T[]>;\n moveItemUp: (id: number) => Promise<void>;\n moveItemDown: (id: number) => Promise<void>;\n updateItemOrder: (orders: { id: number; order: number }[]) => Promise<void>;\n}\n\nexport interface GenericOrderManagerProps<T extends OrderableItem> {\n operations: OrderManagerOperations<T>;\n renderItem: (item: T, index: number, isFirst: boolean, isLast: boolean) => React.ReactNode;\n className?: string;\n title?: string;\n description?: string;\n onOrderChanged?: () => void;\n emptyMessage?: string;\n loadingMessage?: string;\n}\n\nexport function GenericOrderManager<T extends OrderableItem>({\n operations,\n renderItem,\n className = '',\n title = '顺序管理',\n description = '拖拽或使用按钮调整显示顺序',\n onOrderChanged,\n emptyMessage = '暂无数据',\n loadingMessage = '加载数据...'\n}: GenericOrderManagerProps<T>) {\n const [items, setItems] = useState<T[]>([]);\n const [originalOrder, setOriginalOrder] = useState<T[]>([]);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasChanges, setHasChanges] = useState(false);\n const [draggedItem, setDraggedItem] = useState<number | null>(null);\n\n // 加载数据\n const loadItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n \n const data = await operations.loadItems();\n \n setItems(data);\n setOriginalOrder([...data]);\n setHasChanges(false);\n } catch (err) {\n console.error('❌ [通用排序] 加载数据错误:', err);\n setError(err instanceof Error ? err.message : '加载数据失败');\n } finally {\n setLoading(false);\n }\n }, [operations]);\n\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // 检查是否有变更\n useEffect(() => {\n const hasOrderChanged = items.some((item, index) => \n originalOrder[index]?.id !== item.id\n );\n setHasChanges(hasOrderChanged);\n }, [items, originalOrder]);\n\n // 上移项目\n const handleMoveUp = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === 0) {\n setError('项目已经在最前面,无法上移');\n return;\n }\n \n await operations.moveItemUp(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 上移项目错误:', err);\n setError(err instanceof Error ? err.message : '上移失败');\n }\n };\n\n // 下移项目\n const handleMoveDown = async (itemId: number) => {\n try {\n setError(null);\n \n const currentIndex = items.findIndex(item => item.id === itemId);\n if (currentIndex === -1) {\n setError('项目不存在');\n return;\n }\n if (currentIndex === items.length - 1) {\n setError('项目已经在最后面,无法下移');\n return;\n }\n \n await operations.moveItemDown(itemId);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 下移项目错误:', err);\n setError(err instanceof Error ? err.message : '下移失败');\n }\n };\n\n // 拖拽开始\n const handleDragStart = (e: React.DragEvent, index: number) => {\n setDraggedItem(index);\n e.dataTransfer.effectAllowed = 'move';\n };\n\n // 拖拽悬停\n const handleDragOver = (e: React.DragEvent, _index: number) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n };\n\n // 拖拽放置\n const handleDrop = async (e: React.DragEvent, dropIndex: number) => {\n e.preventDefault();\n \n if (draggedItem === null || draggedItem === dropIndex) {\n setDraggedItem(null);\n return;\n }\n\n try {\n setError(null);\n \n const newItems = [...items];\n const draggedItemData = newItems[draggedItem];\n if (!draggedItemData) return;\n \n newItems.splice(draggedItem, 1);\n newItems.splice(dropIndex, 0, draggedItemData);\n \n const itemOrders = newItems.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n \n await operations.updateItemOrder(itemOrders);\n await loadItems();\n onOrderChanged?.();\n \n } catch (err) {\n console.error('❌ [通用排序] 拖拽排序错误:', err);\n setError(err instanceof Error ? err.message : '排序失败');\n } finally {\n setDraggedItem(null);\n }\n };\n\n // 保存新顺序\n const handleSaveOrder = async () => {\n try {\n setSaving(true);\n setError(null);\n \n const itemOrders = items.map((item, index) => ({\n id: item.id,\n order: index,\n }));\n\n await operations.updateItemOrder(itemOrders);\n \n setOriginalOrder([...items]);\n setHasChanges(false);\n onOrderChanged?.();\n } catch (err) {\n console.error('❌ [通用排序] 保存顺序错误:', err);\n setError(err instanceof Error ? err.message : '保存失败');\n await loadItems();\n } finally {\n setSaving(false);\n }\n };\n\n // 重置顺序\n const handleResetOrder = () => {\n setItems([...originalOrder]);\n };\n\n if (loading) {\n return (\n <div className={cn(\"flex flex-col items-center justify-center p-12 text-gray-500\", className)}>\n <div className=\"w-6 h-6 border-2 border-gray-200 border-t-blue-500 rounded-full animate-spin mb-2\" />\n <span>{loadingMessage}</span>\n </div>\n );\n }\n\n return (\n <div className={cn(\"bg-white rounded-xl p-6 shadow-md border-2 border-gray-100\", className)}>\n <div className=\"flex items-center justify-between mb-4 pb-3 border-b border-gray-100 sm:flex-row flex-col sm:items-center items-start gap-4\">\n <h3 className=\"m-0 text-gray-900 text-lg font-semibold\">{title}</h3>\n <div className=\"flex gap-3 w-full sm:w-auto\">\n {hasChanges && (\n <>\n <button\n onClick={handleResetOrder}\n className=\"flex items-center gap-2 bg-amber-500 hover:bg-amber-600 text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"重置为原始顺序\"\n >\n <RotateCcw size={16} />\n 重置\n </button>\n <button\n onClick={handleSaveOrder}\n disabled={saving}\n className=\"flex items-center gap-2 bg-blue-500 hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed text-white px-4 py-2 rounded-lg font-medium transition-colors\"\n title=\"保存新顺序\"\n >\n <Save size={16} />\n {saving ? '保存中...' : '保存顺序'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {error && (\n <div className=\"flex items-center gap-2 bg-red-50 text-red-600 p-3 rounded-lg mb-4 border border-red-200\">\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n <div className=\"bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6\">\n <p className=\"m-0 mb-2 color-slate-500 text-sm\">{description}</p>\n <ul className=\"m-0 pl-6 color-slate-500 text-sm list-disc\">\n <li className=\"mb-1\">使用拖拽:点击并拖动 <GripVertical size={14} className=\"inline-block align-middle text-gray-500\" /> 图标</li>\n <li className=\"mb-1\">使用按钮:点击 <ChevronUp size={14} className=\"inline-block align-middle text-gray-500\" /> 或 <ChevronDown size={14} className=\"inline-block align-middle text-gray-500\" /> 按钮</li>\n <li>完成调整后,点击\"保存顺序\"按钮保存更改</li>\n </ul>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {items.map((item, index) => (\n <div\n key={item.id}\n className={cn(\n \"flex items-center gap-3 p-4 bg-gray-50 border-2 border-gray-200 rounded-lg transition-all hover:border-gray-300 hover:shadow-sm\",\n draggedItem === index && \"opacity-50 rotate-2 border-blue-500\"\n )}\n draggable\n onDragStart={(e) => handleDragStart(e, index)}\n onDragOver={(e) => handleDragOver(e, index)}\n onDrop={(e) => handleDrop(e, index)}\n >\n <div className=\"flex items-center cursor-grab active:cursor-grabbing text-gray-400 p-1 rounded hover:text-gray-500 hover:bg-gray-100 transition-colors\">\n <GripVertical size={20} />\n </div>\n \n <div className=\"flex-1 min-w-0\">\n {renderItem(item, index, index === 0, index === items.length - 1)}\n </div>\n\n <div className=\"flex items-center mx-3\">\n <span className=\"flex items-center justify-center w-8 h-8 bg-blue-500 text-white text-sm font-semibold rounded-full sm:w-8 sm:h-8 w-7 h-7 sm:text-sm text-xs\">\n #{index + 1}\n </span>\n </div>\n\n <div className=\"flex flex-col gap-1 sm:flex-col flex-row\">\n <button\n onClick={() => handleMoveUp(item.id)}\n disabled={index === 0}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"上移\"\n >\n <ChevronUp size={18} />\n </button>\n <button\n onClick={() => handleMoveDown(item.id)}\n disabled={index === items.length - 1}\n className=\"flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7\"\n title=\"下移\"\n >\n <ChevronDown size={18} />\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {items.length === 0 && (\n <div className=\"text-center p-12 text-gray-400 italic\">\n <p className=\"m-0\">{emptyMessage}</p>\n </div>\n )}\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { useRouter } from 'next/navigation';\nimport { cn } from '../utils';\n\nexport interface BackButtonProps {\n href?: string;\n className?: string;\n}\n\nexport const BackButton: React.FC<BackButtonProps> = ({ href, className = '' }) => {\n const router = useRouter();\n\n const handleClick = () => {\n if (href) {\n router.push(href);\n } else {\n router.back();\n }\n };\n\n return (\n <button\n onClick={handleClick}\n className={cn(\n \"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors\",\n className\n )}\n >\n <svg\n className=\"w-5 h-5 mr-2\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 19l-7-7m0 0l7-7m-7 7h18\"\n />\n </svg>\n 返回\n </button>\n );\n};\n\nexport default BackButton;\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface FilterOption<T> {\n value: T;\n label: string;\n icon: string;\n activeColor: {\n bg: string;\n shadow: string;\n };\n count?: number;\n showCount?: boolean;\n}\n\nexport interface FilterButtonGroupProps<T> {\n label: string;\n value: T;\n options: FilterOption<T>[];\n onChange: (value: T) => void;\n className?: string;\n}\n\n// 辅助函数:将 Tailwind 背景色类名转换为实际颜色值\nfunction getColorValue(bgClass: string): string {\n const colorMap: Record<string, string> = {\n 'bg-blue-500': '#3b82f6',\n 'bg-green-500': '#10b981',\n 'bg-red-500': '#ef4444',\n 'bg-purple-500': '#8b5cf6',\n 'bg-slate-500': '#64748b',\n 'bg-emerald-500': '#10b981',\n 'bg-orange-500': '#f97316',\n };\n return colorMap[bgClass] || '#3b82f6'; // 默认蓝色\n}\n\nexport function FilterButtonGroup<T extends string>({ \n label, \n value, \n options, \n onChange,\n className\n}: FilterButtonGroupProps<T>) {\n return (\n <div className={cn(\"space-y-4\", className)}>\n <h3 className=\"text-lg font-semibold text-gray-800\">\n {label}\n </h3>\n\n <div className=\"flex gap-3\">\n {options.map((option) => {\n const isActive = value === option.value;\n \n return (\n <button\n key={option.value}\n onClick={() => onChange(option.value)}\n style={isActive ? { backgroundColor: getColorValue(option.activeColor.bg) } : undefined}\n className={cn(\n \"flex-1 h-12 rounded-lg font-medium text-sm transition-all duration-200 ease-out focus:outline-none focus:ring-2 focus:ring-opacity-50 border\",\n isActive\n ? \"text-white border-transparent shadow-md focus:ring-white\"\n : \"bg-white text-gray-700 border-gray-200 shadow-sm hover:bg-gray-50 hover:border-gray-300 hover:shadow focus:ring-blue-300\"\n )}\n >\n <div className=\"flex items-center justify-center space-x-2\">\n <span className=\"text-lg\">{option.icon}</span>\n <span>{option.label}</span>\n {option.showCount && option.count !== undefined && (\n <span className={cn(\n \"text-xs font-semibold px-2 py-0.5 rounded-full min-w-[1.25rem] text-center\",\n isActive ? \"bg-white/20 text-white\" : \"bg-gray-100 text-gray-600\"\n )}>\n {option.count}\n </span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { cn } from '../utils';\n\nexport interface SearchResultHintProps {\n searchQuery: string;\n resultCount: number;\n className?: string;\n}\n\nexport function SearchResultHint({ searchQuery, resultCount, className }: SearchResultHintProps) {\n if (!searchQuery) return null;\n\n return (\n <div className={cn(\"mb-6 p-4 bg-blue-50 border border-blue-200 rounded-lg\", className)}>\n <p className=\"text-sm text-blue-700\">\n 搜索 \"<span className=\"font-medium\">{searchQuery}</span>\" \n 找到 {resultCount} 个结果\n </p>\n </div>\n );\n}\n\nexport default SearchResultHint;\n\n","'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from './Dialog';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from './AlertDialog';\nimport { cn } from '@/utils';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n width?: number | string;\n height?: number | string;\n className?: string;\n maskClosable?: boolean;\n children: React.ReactNode;\n zIndex?: number;\n overlayClassName?: string;\n}\n\nexport const Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n width,\n height,\n className,\n maskClosable = true,\n children,\n zIndex = 50,\n overlayClassName,\n}) => {\n const contentZIndex = Math.max(zIndex, 10000);\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => {\n if (!open) {\n if (maskClosable) {\n onClose();\n } else {\n // If maskClosable is false, we don't allow closing via backdrop/ESC\n }\n }\n }}>\n <DialogContent \n className={cn(\"sm:max-w-[425px]\", className)}\n overlayClassName={overlayClassName}\n onPointerDownOutside={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n onEscapeKeyDown={(e) => {\n if (!maskClosable) e.preventDefault();\n }}\n style={{\n zIndex: contentZIndex,\n ...(width ? { maxWidth: typeof width === 'number' ? `${width}px` : width } : undefined),\n ...(height ? { height: typeof height === 'number' ? `${height}px` : height } : undefined),\n }}\n >\n {title ? (\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n </DialogHeader>\n ) : (\n // 无障碍性:始终需要 DialogTitle,使用 sr-only 对视觉隐藏但对屏幕阅读器可见\n <DialogTitle className=\"sr-only\">弹窗</DialogTitle>\n )}\n <div className=\"py-4\">\n {children}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport interface ConfirmModalProps {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title?: string;\n message: string;\n confirmText?: string;\n cancelText?: string;\n isLoading?: boolean;\n}\n\nexport const ConfirmModal: React.FC<ConfirmModalProps> = ({\n isOpen,\n onClose,\n onConfirm,\n title = \"确认操作\",\n message,\n confirmText = \"确认\",\n cancelText = \"取消\",\n isLoading = false,\n}) => {\n return (\n <AlertDialog open={isOpen} onOpenChange={(open) => !open && onClose()}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{title}</AlertDialogTitle>\n <AlertDialogDescription>{message}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={isLoading}>{cancelText}</AlertDialogCancel>\n <AlertDialogAction \n onClick={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n disabled={isLoading}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n {isLoading ? \"处理中...\" : confirmText}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n","import React from 'react';\nimport { cn } from '../utils';\n\nexport interface ImageMappingItem {\n id: string;\n label: string;\n}\n\nexport type ImageMappingValue = Record<string, string>;\n\nexport interface ImageMappingPanelProps {\n title: string;\n items: ImageMappingItem[];\n value: ImageMappingValue;\n onChange: (next: ImageMappingValue) => void;\n className?: string;\n uploadLabel?: string;\n clearLabel?: string;\n}\n\nexport function ImageMappingPanel({\n title,\n items,\n value,\n onChange,\n className,\n uploadLabel = '上传图片',\n clearLabel = '清除',\n}: ImageMappingPanelProps) {\n const handleFileChange = (id: string, file?: File) => {\n if (!file) {\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const base64 = typeof reader.result === 'string' ? reader.result : '';\n if (!base64) {\n return;\n }\n onChange({\n ...value,\n [id]: base64,\n });\n };\n reader.readAsDataURL(file);\n };\n\n const handleRemove = (id: string) => {\n const next = { ...value };\n delete next[id];\n onChange(next);\n };\n\n return (\n <details className={cn('rounded-lg border border-slate-200 bg-white/80 p-3', className)}>\n <summary className=\"cursor-pointer text-sm font-semibold text-slate-700\">{title}</summary>\n <div className=\"mt-3 grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {items.map((item) => {\n const image = value[item.id];\n return (\n <div\n key={item.id}\n className=\"flex items-center gap-2 rounded-md border border-slate-200 bg-white p-2\"\n >\n <div className=\"w-16 text-xs font-semibold text-slate-600\">{item.label}</div>\n <label className=\"flex-1 cursor-pointer rounded-md bg-cyan-600 px-2 py-1 text-center text-xs font-medium text-white\">\n {uploadLabel}\n <input\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={(event) => {\n handleFileChange(item.id, event.target.files?.[0]);\n event.currentTarget.value = '';\n }}\n />\n </label>\n {image ? (\n <>\n <img\n src={image}\n alt={item.label}\n className=\"h-8 w-8 rounded-full border border-slate-200 object-cover\"\n />\n <button\n type=\"button\"\n className=\"rounded-md border border-red-200 px-2 py-1 text-xs text-red-600\"\n onClick={() => handleRemove(item.id)}\n >\n {clearLabel}\n </button>\n </>\n ) : null}\n </div>\n );\n })}\n </div>\n </details>\n );\n}\n\n","/**\n * 通用存储 Hook\n * 支持多平台:Web、React Native、小程序\n *\n * 优点:\n * 1. 异步读取,不阻塞渲染\n * 2. 统一的错误处理\n * 3. 类型安全\n * 4. 跨平台支持\n * 5. 自动同步(支持的平台)\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { StorageAdapter } from '../types';\n\nexport function useStorage<T>(\n storage: StorageAdapter,\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n const [value, setValue] = useState<T>(defaultValue);\n const [loading, setLoading] = useState(true);\n\n // 初始化时从存储读取\n useEffect(() => {\n const loadValue = async () => {\n try {\n const stored = await storage.getItem(key);\n if (stored !== null) {\n setValue(JSON.parse(stored));\n }\n } catch (error) {\n console.error('Error reading storage key \"' + (key) + '\":', error);\n } finally {\n setLoading(false);\n }\n };\n\n void loadValue();\n }, [storage, key]);\n\n // 更新值并同步到存储\n const updateValue = useCallback(\n async (newValue: T) => {\n try {\n setValue(newValue);\n await storage.setItem(key, JSON.stringify(newValue));\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, JSON.stringify(newValue));\n }\n } catch (error) {\n console.error('Error setting storage key \"' + (key) + '\":', error);\n }\n },\n [storage, key]\n );\n\n // 删除值\n const removeValue = useCallback(async () => {\n try {\n setValue(defaultValue);\n await storage.removeItem(key);\n\n // 如果是 Web 适配器,触发自定义事件\n if ('dispatchChange' in storage && typeof storage.dispatchChange === 'function') {\n (storage as any).dispatchChange(key, null);\n }\n } catch (error) {\n console.error('Error removing storage key \"' + (key) + '\":', error);\n }\n }, [storage, key, defaultValue]);\n\n // 监听存储变化\n useEffect(() => {\n if (!storage.addChangeListener) {\n return;\n }\n\n const cleanup = storage.addChangeListener((changedKey: string, newValue: string | null) => {\n if (changedKey === key) {\n try {\n if (newValue === null) {\n setValue(defaultValue);\n } else {\n setValue(JSON.parse(newValue));\n }\n } catch (error) {\n console.error('Error parsing storage change event:', error);\n }\n }\n });\n\n return cleanup;\n }, [storage, key, defaultValue]);\n\n return [value, updateValue, removeValue, loading];\n}\n\n","/**\n * Web 平台存储适配器 (localStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查是否在浏览器环境中\n */\nconst isBrowser = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class WebStorageAdapter implements StorageAdapter {\n async getItem(key: string): Promise<string | null> {\n // SSR 环境下返回 null\n if (!isBrowser) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[WebStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.error('[WebStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.error('[WebStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n try {\n localStorage.clear();\n } catch (error) {\n console.error('[WebStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // SSR 环境下返回空函数\n if (!isBrowser) {\n return () => {};\n }\n\n // 监听 storage 事件(跨标签页)\n const handleStorageEvent = (e: StorageEvent) => {\n if (e.key) {\n callback(e.key, e.newValue);\n }\n };\n\n // 监听自定义事件(同标签页)\n const handleCustomEvent = (e: Event) => {\n const customEvent = e as CustomEvent;\n callback(customEvent.detail.key, customEvent.detail.value);\n };\n\n window.addEventListener('storage', handleStorageEvent);\n window.addEventListener('local-storage-change', handleCustomEvent);\n\n // 返回清理函数\n return () => {\n window.removeEventListener('storage', handleStorageEvent);\n window.removeEventListener('local-storage-change', handleCustomEvent);\n };\n }\n\n /**\n * 触发自定义事件,通知同标签页的其他组件\n */\n dispatchChange(key: string, value: string | null): void {\n // SSR 环境下静默忽略\n if (!isBrowser) {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent('local-storage-change', {\n detail: { key, value },\n })\n );\n }\n}\n\n","/**\n * Web 平台 localStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { WebStorageAdapter } from '../adapters/web-adapter';\n\n// 创建单例适配器\nconst webStorage = new WebStorageAdapter();\n\n/**\n * Web 平台的 localStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useLocalStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(webStorage, key, defaultValue);\n}\n\n","import React from 'react';\nimport { useLocalStorage } from '../storage/hooks/useLocalStorage';\nimport {\n ImageMappingPanel,\n type ImageMappingItem,\n type ImageMappingPanelProps,\n type ImageMappingValue,\n} from './ImageMappingPanel';\n\nexport interface LocalImageMappingPanelProps\n extends Omit<ImageMappingPanelProps, 'value' | 'onChange'> {\n storageKey: string;\n defaultValue?: ImageMappingValue;\n onValueChange?: (next: ImageMappingValue) => void;\n}\n\nexport function LocalImageMappingPanel({\n storageKey,\n defaultValue = {},\n onValueChange,\n ...panelProps\n}: LocalImageMappingPanelProps) {\n const [value, setValue] = useLocalStorage<ImageMappingValue>(storageKey, defaultValue);\n\n return (\n <ImageMappingPanel\n {...panelProps}\n value={value}\n onChange={(next) => {\n setValue(next);\n onValueChange?.(next);\n }}\n />\n );\n}\n\nexport type { ImageMappingItem };\n\n","'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '@/components/Dialog';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/Avatar';\nimport { ProfileData, SocialLink } from './types';\nimport { cn } from '@/utils';\n\nconst themeStyles = {\n light: \"\",\n dark: \"bg-[#222] text-[#eee] border-[#444]\",\n blue: \"bg-[#f0f8ff] border-[#1890ff]/20\",\n};\n\nexport interface ProfileModalProps {\n isOpen: boolean;\n onClose: () => void;\n data: ProfileData;\n showAvatar?: boolean;\n showContacts?: boolean;\n showSocial?: boolean;\n showBio?: boolean;\n avatarSize?: number;\n onAvatarClick?: () => void;\n onSocialLinkClick?: (url: string, type: string) => void;\n onContactClick?: (type: string, value: string) => void;\n themeName?: 'light' | 'dark' | 'blue';\n className?: string;\n children?: React.ReactNode;\n}\n\nexport const ProfileModal: React.FC<ProfileModalProps> = ({\n isOpen,\n onClose,\n data,\n showAvatar = true,\n showContacts = true,\n showSocial = true,\n showBio = true,\n avatarSize = 80,\n onAvatarClick,\n onSocialLinkClick,\n onContactClick,\n themeName = 'light',\n className,\n}) => {\n // 渲染社交媒体链接\n const renderSocialLinks = () => {\n if (!data.socialLinks || data.socialLinks.length === 0) return null;\n return (\n <div className=\"flex gap-3 mt-2\">\n {data.socialLinks.map((link: SocialLink, index: number) => (\n <a\n key={index}\n href={link.url}\n className={cn(\n \"w-8 h-8 flex items-center justify-center rounded-full no-underline transition-all hover:-translate-y-0.5\",\n themeName === 'dark' ? \"bg-gray-800 text-gray-200 hover:bg-gray-700\" : \"bg-gray-100 text-gray-800 hover:bg-gray-200\"\n )}\n title={link.type}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => {\n if (onSocialLinkClick) {\n e.preventDefault();\n onSocialLinkClick(link.url, link.type);\n }\n }}\n >\n {link.icon ? (\n <span className=\"text-base\">{link.icon}</span>\n ) : (\n <span className=\"text-[10px] font-semibold\">{link.type}</span>\n )}\n </a>\n ))}\n </div>\n );\n };\n\n // 渲染联系方式\n const renderContacts = () => {\n if (!data.contacts || Object.keys(data.contacts).length === 0) return null;\n return (\n <div className={cn(\n \"mt-4 border-t pt-4\",\n themeName === 'dark' ? \"border-gray-800\" : \"border-gray-100\"\n )}>\n {Object.entries(data.contacts).map(([type, value], index) => (\n <div \n key={index} \n className={cn(\n \"flex mb-2 cursor-pointer py-1.5 px-2 rounded transition-colors\",\n themeName === 'dark' ? \"hover:bg-gray-800\" : \"hover:bg-gray-50\"\n )}\n onClick={() => onContactClick && onContactClick(type, value)}\n >\n <span className={cn(\n \"font-medium w-[70px] shrink-0\",\n themeName === 'dark' ? \"text-gray-400\" : \"text-gray-500\"\n )}>{type}:</span>\n <span className={themeName === 'dark' ? \"text-gray-200\" : \"text-gray-800\"}>{value}</span>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open: boolean) => !open && onClose()}>\n <DialogContent className={cn(\n \"sm:max-w-[500px] p-0 overflow-hidden border-none shadow-2xl\",\n themeStyles[themeName as keyof typeof themeStyles] || \"\",\n className\n )}>\n <div className=\"p-6\">\n <div className=\"flex gap-5 mb-5\">\n {showAvatar && (\n <div \n className=\"shrink-0\"\n onClick={onAvatarClick}\n style={{ cursor: onAvatarClick ? 'pointer' : 'default' }}\n >\n <Avatar className=\"border-2 border-primary/10 shadow-sm\" style={{ width: avatarSize, height: avatarSize }}>\n {data.avatar && <AvatarImage src={data.avatar} alt={data.name} className=\"object-cover\" />}\n <AvatarFallback className=\"text-xl\">\n {data.name.substring(0, 2).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n </div>\n )}\n <div className=\"flex-1 min-w-0 flex flex-col justify-center\">\n <h2 className={cn(\n \"text-2xl font-bold m-0 mb-1\",\n themeName === 'dark' ? \"text-white\" : \"text-gray-900\"\n )}>{data.name}</h2>\n {data.title && <div className={cn(\n \"text-sm mb-2\",\n themeName === 'dark' ? \"text-gray-400\" : \"text-gray-500\"\n )}>{data.title}</div>}\n {showSocial && renderSocialLinks()}\n </div>\n </div>\n \n {showBio && data.bio && (\n <div className={cn(\n \"mb-5 leading-relaxed text-sm\",\n themeName === 'dark' ? \"text-gray-300\" : \"text-gray-600\"\n )}>\n <p>{data.bio}</p>\n </div>\n )}\n \n {showContacts && renderContacts()}\n \n {data.customContent && (\n <div className=\"mt-5\">\n {data.customContent}\n </div>\n )}\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport default ProfileModal;\n","import React from 'react';\nimport { Badge } from '@/components/Badge';\nimport { cn } from '@/utils';\nimport { BadgeType } from '../types';\n \ninterface BadgeListProps {\n badges: BadgeType[];\n className?: string;\n}\n\nexport const BadgeList: React.FC<BadgeListProps> = ({\n badges,\n className = '',\n}) => {\n if (!badges || badges.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 mt-4\", className)}>\n {badges.map((badge, index) => (\n <Badge \n key={index} \n variant={badge.type === 'default' ? 'default' : (badge.type as any)}\n >\n {badge.icon && <span className=\"mr-1\">{badge.icon}</span>}\n {badge.label}\n </Badge>\n ))}\n </div>\n );\n};\n","import { StatType } from '..';\nimport { cn } from '@/utils';\n\ninterface StatProps extends StatType {\n className?: string;\n}\n\nexport const Stat: React.FC<StatProps> = ({\n label,\n value,\n icon,\n className = '',\n}) => {\n return (\n <div className={cn(\"flex flex-col items-center flex-1 text-center\", className)}>\n {icon && <span className=\"mb-2 text-2xl text-gray-400\">{icon}</span>}\n <div>\n <div className=\"text-lg font-semibold text-gray-800\">{value}</div>\n <div className=\"text-xs text-gray-400 mt-1\">{label}</div>\n </div>\n </div>\n );\n};\n","import { StatType } from \"..\";\nimport { Stat } from \"./Stat\";\nimport { cn } from '@/utils';\n\ninterface StatListProps {\n stats: StatType[];\n className?: string;\n}\n\nexport const StatList: React.FC<StatListProps> = ({\n stats,\n className = '',\n}) => {\n if (!stats || stats.length === 0) return null;\n\n return (\n <div className={cn(\"flex justify-between mt-4 pt-4 border-t border-gray-100\", className)}>\n {stats.map((stat, index) => (\n <Stat key={index} {...stat} />\n ))}\n </div>\n );\n}; ","'use client';\n\nimport React, { useState } from 'react';\nimport ProfileModal from './ProfileModal';\nimport { ProfileData } from './types';\nimport { BadgeList } from './internal/BadgeList';\nimport { StatList } from './internal/StatList';\nimport { Button } from '@/components/Button';\n\n// 示例数据\nconst exampleProfileData: ProfileData = {\n name: '张三',\n avatar: 'https://randomuser.me/api/portraits/men/32.jpg',\n title: '高级前端工程师',\n bio: '专注于React和Next.js开发的前端工程师,有5年工作经验。热爱开源,喜欢分享技术经验。',\n contacts: {\n '邮箱': 'zhangsan@example.com',\n '电话': '138-8888-8888',\n '地址': '上海市浦东新区',\n },\n socialLinks: [\n { type: 'GitHub', url: 'https://github.com/zhangsan', icon: '★' },\n { type: 'Twitter', url: 'https://twitter.com/zhangsan', icon: '✦' },\n { type: 'LinkedIn', url: 'https://linkedin.com/in/zhangsan', icon: '✪' },\n ],\n badges: [\n { label: 'React', type: 'primary' },\n { label: 'Next.js', type: 'success' },\n { label: 'TypeScript', type: 'info' },\n { label: 'CSS', type: 'default' },\n ],\n stats: [\n { label: '项目', value: 42 },\n { label: '粉丝', value: 1024 },\n { label: '评分', value: '4.9' },\n ],\n customContent: (\n <div className=\"mt-5 border-t border-gray-100 pt-4\">\n <h3 className=\"text-sm font-semibold mb-2\">专业技能</h3>\n <p className=\"text-sm text-gray-600 leading-relaxed\">\n 精通React、Vue、Angular等前端框架,熟悉TypeScript、JavaScript、CSS3、HTML5等前端技术。\n 有丰富的大型项目开发经验,能独立负责前端架构设计。\n </p>\n </div>\n ),\n};\n\nexport interface ProfileButtonProps {\n data?: ProfileData;\n buttonText?: string;\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\n size?: 'default' | 'sm' | 'lg' | 'icon';\n className?: string;\n modalTheme?: 'light' | 'dark' | 'blue';\n}\n\n/**\n * 个人信息按钮组件,点击后显示个人信息弹窗\n */\nexport const ProfileButton: React.FC<ProfileButtonProps> = ({\n data = exampleProfileData,\n buttonText = '查看个人信息',\n variant = 'default',\n size = 'default',\n className = '',\n modalTheme = 'light',\n}) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const openModal = () => setIsModalOpen(true);\n const closeModal = () => setIsModalOpen(false);\n\n const handleContactClick = (type: string, value: string) => {\n if (type === '邮箱') {\n window.open('mailto:' + (value));\n } else if (type === '电话') {\n window.open('tel:' + (value));\n }\n };\n\n return (\n <>\n <Button \n variant={variant}\n size={size}\n onClick={openModal} \n className={className}\n >\n {buttonText}\n </Button>\n\n <ProfileModal\n isOpen={isModalOpen}\n onClose={closeModal}\n data={data}\n themeName={modalTheme}\n onContactClick={handleContactClick}\n onSocialLinkClick={(url) => window.open(url, '_blank')}\n >\n {data.customContent}\n {data.badges && <BadgeList badges={data.badges} />}\n {data.stats && <StatList stats={data.stats} />}\n </ProfileModal>\n </>\n );\n};\n\nexport default ProfileButton;\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport ProfileModal from './ProfileModal';\nimport { ProfileData } from './types';\nimport { BadgeList } from './internal/BadgeList';\nimport { StatList } from './internal/StatList';\n\nexport interface AutoOpenModalProps {\n data: ProfileData;\n delay?: number; // 延迟显示时间(毫秒)\n themeName?: 'light' | 'dark' | 'blue';\n onClose?: () => void;\n}\n\n/**\n * 自动打开个人信息弹窗组件\n * 页面加载后自动显示弹窗\n */\nexport const AutoOpenModal: React.FC<AutoOpenModalProps> = ({\n data,\n delay = 500, // 默认延迟500毫秒\n themeName = 'light',\n onClose,\n}) => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n // 页面加载后自动显示弹窗\n useEffect(() => {\n const timer = setTimeout(() => {\n setIsModalOpen(true);\n }, delay);\n\n return () => clearTimeout(timer);\n }, [delay]);\n\n const handleClose = () => {\n setIsModalOpen(false);\n if (onClose) {\n onClose();\n }\n };\n\n const handleContactClick = (type: string, value: string) => {\n if (type === '邮箱') {\n window.open('mailto:' + (value));\n } else if (type === '电话') {\n window.open('tel:' + (value));\n }\n };\n\n return (\n <ProfileModal\n isOpen={isModalOpen}\n onClose={handleClose}\n data={data}\n themeName={themeName}\n onContactClick={handleContactClick}\n onSocialLinkClick={(url) => window.open(url, '_blank')}\n >\n {data.badges && <BadgeList badges={data.badges} />}\n {data.stats && <StatList stats={data.stats} />}\n </ProfileModal>\n );\n};\n\nexport default AutoOpenModal;\n","'use client';\n\nimport React from 'react';\nimport { Avatar, AvatarImage, AvatarFallback } from '@/components/Avatar';\nimport { cn } from '@/utils';\n\nexport interface EnhancedAvatarProps {\n src?: string;\n name?: string;\n size?: 'small' | 'medium' | 'large' | number;\n mood?: 'online' | 'offline' | 'away';\n statusText?: string;\n onClick?: () => void;\n className?: string;\n}\n\nconst sizeMap = {\n small: 'h-8 w-8',\n medium: 'h-12 w-12',\n large: 'h-16 w-16',\n};\n\nconst moodColors = {\n online: 'bg-green-500',\n offline: 'bg-gray-500',\n away: 'bg-yellow-500',\n};\n\nexport const EnhancedAvatar: React.FC<EnhancedAvatarProps> = ({\n src,\n name,\n size = 'medium',\n mood = 'online',\n statusText,\n onClick,\n className,\n}) => {\n const sizeClass = typeof size === 'string' ? sizeMap[size] : '';\n const customSizeStyle = typeof size === 'number' ? { width: size, height: size } : {};\n\n return (\n <div className={cn(\"relative inline-block\", className)} onClick={onClick}>\n <Avatar className={cn(sizeClass, onClick && \"cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all\")} style={customSizeStyle}>\n {src && <AvatarImage src={src} alt={name || \"Avatar\"} className=\"object-cover\" />}\n <AvatarFallback className=\"bg-primary/10 text-primary-foreground\">\n {name ? name.substring(0, 2).toUpperCase() : '??'}\n </AvatarFallback>\n </Avatar>\n \n {mood && (\n <div\n className={cn(\n \"absolute bottom-0 right-0 rounded-full border-2 border-white\",\n moodColors[mood],\n typeof size === 'number' ? (size > 60 ? 'h-4 w-4' : 'h-3 w-3') : (size === 'large' ? 'h-4 w-4' : 'h-3 w-3')\n )}\n />\n )}\n \n {statusText && (\n <div className=\"absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap\">\n <span className=\"text-xs text-muted-foreground\">{statusText}</span>\n </div>\n )}\n </div>\n );\n};\n\nexport default EnhancedAvatar;\n","'use client';\n\nimport React from \"react\";\n\nimport { CollisionBalls, Timeline } from \"@/components\";\nimport type { TimelineConfig, CollisionBallsConfig } from \"@/components\";\n\ninterface AboutProps {\n timelineConfig: TimelineConfig;\n collisionBallsConfig: CollisionBallsConfig;\n}\n\nconst About: React.FC<AboutProps> = ({\n timelineConfig,\n collisionBallsConfig,\n}) => {\n return (\n <section id=\"about\" className=\"py-16 bg-white\">\n <div className=\"container mx-auto px-4\">\n <h2 className=\"text-3xl font-bold text-center mb-12\">关于我</h2>\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-12\">\n <div className=\"bg-white rounded-lg shadow-lg p-6\">\n <h3 className=\"text-2xl font-semibold mb-6\">个人经历</h3>\n <Timeline items={timelineConfig.items} />\n </div>\n <div className=\"bg-white rounded-lg shadow-lg p-6\">\n <h3 className=\"text-2xl font-semibold mb-6\">技能展示</h3>\n <div style={{ height: '400px', position: 'relative' }}>\n <CollisionBalls collisionBallsConfig={collisionBallsConfig} />\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default About;\n","'use client';\n\nimport React, { useState } from 'react';\nimport { clsx } from 'clsx';\n\ninterface FormData {\n name: string;\n email: string;\n message: string;\n}\n\nconst Contact: React.FC = () => {\n const [formData, setFormData] = useState<FormData>({\n name: '',\n email: '',\n message: ''\n });\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setIsSubmitting(true);\n setSubmitStatus('idle');\n\n try {\n // 这里添加你的表单提交逻辑\n await new Promise(resolve => setTimeout(resolve, 1000)); // 模拟API调用\n setSubmitStatus('success');\n setFormData({ name: '', email: '', message: '' });\n } catch (error) {\n setSubmitStatus('error');\n } finally {\n setIsSubmitting(false);\n }\n };\n\n return (\n <section id=\"contact\" className=\"py-16 bg-gray-50\">\n <div className=\"max-w-4xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"text-center mb-12\">\n <h2 className=\"text-3xl font-bold text-gray-900 sm:text-4xl\">\n 联系我\n </h2>\n <p className=\"mt-4 text-lg text-gray-600\">\n 有任何问题或建议?请随时联系我\n </p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-xl p-6 sm:p-8\">\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n <div>\n <label htmlFor=\"name\" className=\"block text-sm font-medium text-gray-700\">\n 姓名\n </label>\n <input\n type=\"text\"\n name=\"name\"\n id=\"name\"\n value={formData.name}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的姓名\"\n />\n </div>\n\n <div>\n <label htmlFor=\"email\" className=\"block text-sm font-medium text-gray-700\">\n 邮箱\n </label>\n <input\n type=\"email\"\n name=\"email\"\n id=\"email\"\n value={formData.email}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的邮箱\"\n />\n </div>\n\n <div>\n <label htmlFor=\"message\" className=\"block text-sm font-medium text-gray-700\">\n 消息\n </label>\n <textarea\n name=\"message\"\n id=\"message\"\n rows={4}\n value={formData.message}\n onChange={handleChange}\n required\n className=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm\"\n placeholder=\"请输入您的消息\"\n />\n </div>\n\n <div className=\"flex items-center justify-end\">\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className={clsx('inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white', isSubmitting \n ? 'bg-blue-400 cursor-not-allowed' \n : 'bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500')}\n >\n {isSubmitting ? '发送中...' : '发送消息'}\n </button>\n </div>\n\n {submitStatus === 'success' && (\n <div className=\"rounded-md bg-green-50 p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-green-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"ml-3\">\n <p className=\"text-sm font-medium text-green-800\">\n 消息已成功发送!\n </p>\n </div>\n </div>\n </div>\n )}\n\n {submitStatus === 'error' && (\n <div className=\"rounded-md bg-red-50 p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg className=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"ml-3\">\n <p className=\"text-sm font-medium text-red-800\">\n 发送失败,请稍后重试\n </p>\n </div>\n </div>\n </div>\n )}\n </form>\n </div>\n\n {/* 联系方式 */}\n <div className=\"mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3\">\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">邮箱</h3>\n <p className=\"mt-2 text-gray-600\">your.email@example.com</p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">电话</h3>\n <p className=\"mt-2 text-gray-600\">+86 123 4567 8900</p>\n </div>\n\n <div className=\"bg-white rounded-lg shadow-lg p-6 text-center\">\n <div className=\"text-blue-600 mb-4\">\n <svg className=\"h-8 w-8 mx-auto\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n </div>\n <h3 className=\"text-lg font-medium text-gray-900\">地址</h3>\n <p className=\"mt-2 text-gray-600\">中国,北京</p>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Contact; ","'use client';\n\nimport React, { useEffect, useState } from \"react\";\nimport { cn } from '@/utils';\n\nexport interface HomeConfig {\n title: string;\n subtitle: string;\n buttons: Array<{\n text: string;\n link: string;\n }>;\n imageSrc: string;\n}\n\ninterface HomeProps {\n homeConfig: HomeConfig;\n className?: string;\n}\n\nexport const Home: React.FC<HomeProps> = ({ homeConfig, className }) => {\n const { title, subtitle, buttons, imageSrc } = homeConfig;\n const [displayText, setDisplayText] = useState(\"\");\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n if (currentIndex < title.length) {\n const timer = setTimeout(() => {\n setDisplayText((prev) => prev + title[currentIndex]);\n setCurrentIndex((prev) => prev + 1);\n }, 150);\n\n return () => clearTimeout(timer);\n }\n return () => {\n setDisplayText(\"\");\n setCurrentIndex(0);\n };\n }, [currentIndex, title]);\n\n return (\n <section \n id=\"home\" \n className={cn(\"min-h-screen flex items-center justify-center py-16 bg-gradient-to-b from-white to-gray-50\", className)}\n >\n <div className=\"container mx-auto px-4\">\n <div className=\"flex flex-col md:flex-row items-center gap-12\">\n <div className=\"flex-1 text-center md:text-left\">\n <h1 className=\"text-4xl md:text-6xl font-bold mb-6 text-gray-900\">\n <span className=\"inline-block\">{displayText}</span>\n <span className=\"animate-pulse ml-1 text-blue-500\">|</span>\n </h1>\n <p className=\"text-xl md:text-2xl text-gray-600 mb-8\">{subtitle}</p>\n <div className=\"flex flex-wrap gap-4 justify-center md:justify-start\">\n {buttons.map((button) => (\n <a\n key={button.link}\n href={button.link}\n className=\"px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-300 shadow-md hover:shadow-lg font-medium\"\n >\n {button.text}\n </a>\n ))}\n </div>\n </div>\n <div className=\"flex-1\">\n <div className=\"relative group\">\n <div className=\"absolute -inset-1 bg-gradient-to-r from-blue-600 to-purple-600 rounded-lg blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200\"></div>\n <img\n src={imageSrc}\n alt=\"Profile\"\n className=\"relative w-full max-w-md mx-auto rounded-lg shadow-xl transform hover:scale-[1.02] transition-transform duration-300 bg-white\"\n />\n </div>\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default Home;\n\n","'use client';\n\nimport React from 'react';\nimport Link from 'next/link';\nimport { cn } from '@/utils';\n\nexport interface ExperimentCardProps {\n href: string;\n title: string;\n description: string;\n tags: string[];\n category: 'utility' | 'leisure';\n isCompleted?: boolean;\n updatedAt?: string;\n createdAt?: string;\n className?: string;\n}\n\nexport const ExperimentCard: React.FC<ExperimentCardProps> = ({ \n href, \n title, \n description, \n tags, \n category, \n isCompleted,\n updatedAt,\n createdAt,\n className\n}) => {\n // 格式化日期显示\n const formatDate = (dateString?: string) => {\n if (!dateString) return '';\n \n try {\n const date = new Date(dateString);\n return date.toLocaleDateString('zh-CN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n });\n } catch (e) {\n return dateString;\n }\n };\n \n return (\n <Link href={href} className={cn(\"block group\", className)}>\n <div className=\"w-full h-full bg-white rounded-2xl overflow-hidden shadow-md hover:shadow-2xl transition-all duration-300 transform group-hover:-translate-y-1 border border-gray-100 hover:border-gray-200\">\n <div className=\"p-6\">\n <div className=\"flex items-start justify-between mb-4\">\n <h3 className=\"text-xl font-semibold text-gray-900 flex-1 pr-4 leading-tight\">\n {title}\n </h3>\n <div className=\"flex flex-col gap-2 flex-shrink-0\">\n <span className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm\",\n category === 'utility' \n ? 'bg-gradient-to-r from-green-50 to-green-100 text-green-700 border border-green-200' \n : 'bg-gradient-to-r from-purple-50 to-purple-100 text-purple-700 border border-purple-200'\n )}>\n {category === 'utility' ? '🔧 实用工具' : '🎮 休闲娱乐'}\n </span>\n <span className={cn(\n \"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm border\",\n isCompleted \n ? 'bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 border border-emerald-200' \n : 'bg-gradient-to-r from-orange-50 to-orange-100 text-orange-700 border border-orange-200'\n )}>\n {isCompleted ? '✅ 已完成' : '🚧 进行中'}\n </span>\n </div>\n </div>\n <p className=\"text-gray-600 mb-4\">{description}</p>\n \n {/* 显示更新时间 */}\n {updatedAt && (\n <div className=\"flex items-center gap-1 mb-3 text-xs text-gray-500\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>更新于: {formatDate(updatedAt)}</span>\n {createdAt && createdAt !== updatedAt && (\n <span className=\"ml-2 text-gray-400\">创建于: {formatDate(createdAt)}</span>\n )}\n </div>\n )}\n \n <div className=\"flex flex-wrap gap-2\">\n {tags.map((tag) => (\n <span\n key={tag}\n className=\"px-3 py-1.5 text-xs font-medium bg-gradient-to-r from-gray-50 to-gray-100 text-gray-700 rounded-full border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200\"\n >\n #{tag}\n </span>\n ))}\n </div>\n </div>\n </div>\n </Link>\n );\n};\n\nexport default ExperimentCard;\n\n","'use client';\n\nimport React, { useState } from 'react';\nimport { ExperimentCard } from './ExperimentCard';\nimport { cn } from '@/utils';\n\n// Project相关的类型定义\nexport interface Project {\n id: string;\n title: string;\n description: string;\n image: string;\n link?: string;\n tags: string[];\n}\n\nexport interface ProjectsConfig {\n projects: Project[];\n}\n\ninterface ProjectCarouselProps {\n projects: Project[];\n className?: string;\n}\n\nexport const ProjectCarousel: React.FC<ProjectCarouselProps> = ({ projects, className }) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const nextSlide = () => {\n setCurrentIndex((prevIndex) =>\n prevIndex === projects.length - 1 ? 0 : prevIndex + 1\n );\n };\n\n const prevSlide = () => {\n setCurrentIndex((prevIndex) =>\n prevIndex === 0 ? projects.length - 1 : prevIndex - 1\n );\n };\n\n return (\n <section id=\"projects\" className={cn(\"py-16 bg-gray-50\", className)}>\n <div className=\"container mx-auto px-4\">\n <h2 className=\"text-3xl font-bold text-center mb-12 text-gray-900\">项目展示</h2>\n \n <div className=\"relative max-w-4xl mx-auto\">\n {/* 项目卡片 */}\n <div className=\"relative h-[400px] overflow-hidden rounded-lg shadow-xl\">\n {projects.map((project, index) => (\n <div\n key={project.id}\n className={cn(\n \"absolute w-full h-full transition-all duration-500 transform\",\n index === currentIndex\n ? \"translate-x-0 opacity-100\"\n : index < currentIndex\n ? \"-translate-x-full opacity-0\"\n : \"translate-x-full opacity-0\"\n )}\n >\n <ExperimentCard\n href={project.link || '#'}\n title={project.title}\n description={project.description}\n tags={project.tags}\n category=\"utility\"\n />\n </div>\n ))}\n </div>\n\n {/* 导航按钮 */}\n <button\n onClick={prevSlide}\n className=\"absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]\"\n >\n <svg\n className=\"w-6 h-6 text-gray-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M15 19l-7-7 7-7\"\n />\n </svg>\n </button>\n\n <button\n onClick={nextSlide}\n className=\"absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-[10]\"\n >\n <svg\n className=\"w-6 h-6 text-gray-600\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n </button>\n\n {/* 指示器 */}\n <div className=\"absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2 z-[10]\">\n {projects.map((_, index) => (\n <button\n key={index}\n onClick={() => setCurrentIndex(index)}\n className={cn(\n \"w-2 h-2 rounded-full transition-all duration-300\",\n index === currentIndex ? \"bg-blue-500 w-4\" : \"bg-gray-300\"\n )}\n />\n ))}\n </div>\n </div>\n </div>\n </section>\n );\n};\n\nexport default ProjectCarousel;\n\n"," 'use client';\n\nimport React from 'react';\nimport { NavigationItem, NavigationDirection } from './types';\nimport { clsx } from 'clsx';\n\ninterface NavigationItemProps {\n item: NavigationItem;\n direction: NavigationDirection;\n isActive?: boolean;\n onClick: (item: NavigationItem) => void;\n}\n\nconst NavigationItemComponent: React.FC<NavigationItemProps> = ({\n item,\n direction,\n isActive,\n onClick\n}) => {\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n onClick(item);\n };\n\n const getItemClasses = () => {\n const baseClasses = `\n group relative flex items-center gap-3\n transition-all duration-300 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50\n rounded-lg\n `;\n\n const directionClasses = direction === 'vertical'\n ? 'px-4 py-3 w-full justify-start'\n : 'px-3 py-2 justify-center';\n\n const stateClasses = isActive\n ? 'bg-blue-500 text-white shadow-lg'\n : item.isExternal\n ? 'text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200'\n : 'text-gray-700 hover:bg-blue-50 hover:text-blue-600';\n\n return (baseClasses) + ' ' + (directionClasses) + ' ' + (stateClasses);\n };\n\n return (\n <a\n href={item.href}\n onClick={handleClick}\n target={item.target}\n rel={item.isExternal ? 'noopener noreferrer' : undefined}\n className={getItemClasses()}\n >\n {/* 图标 */}\n {item.icon && (\n <span className=\"flex-shrink-0\">\n {item.icon}\n </span>\n )}\n\n {/* 标签 */}\n <span className={clsx('font-medium', direction === 'vertical' ? 'text-sm' : 'text-xs')}>\n {item.label}\n </span>\n\n {/* 外链图标 */}\n {item.isExternal && (\n <svg\n className=\"w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14\"\n />\n </svg>\n )}\n\n {/* 活动状态指示器 */}\n {direction === 'vertical' && isActive && (\n <div className=\"absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full\" />\n )}\n </a>\n );\n};\n\nexport default NavigationItemComponent;"," 'use client';\n\nimport React from 'react';\nimport NavigationItem from './NavigationItem';\nimport { NavigationProps } from './types';\nimport { clsx } from 'clsx';\n\nconst Navigation: React.FC<NavigationProps> = ({\n config,\n isOpen,\n activeItemId,\n onItemClick,\n className = ''\n}) => {\n const { direction, position, items, avatar, logo } = config;\n\n // 获取导航栏位置和尺寸样式\n const getContainerClasses = () => {\n const baseClasses = `\n fixed z-[90]\n bg-white/95 backdrop-blur-lg\n border border-gray-200/50\n shadow-2xl\n transition-all duration-500 ease-in-out\n `;\n\n // 根据方向和位置确定样式\n if (direction === 'vertical') {\n const verticalClasses = 'h-screen w-64 flex flex-col';\n const positionClasses = position === 'left' \n ? 'left-0 top-0 ' + (isOpen ? 'translate-x-0' : '-translate-x-full')\n : 'right-0 top-0 ' + (isOpen ? 'translate-x-0' : 'translate-x-full');\n \n return (baseClasses) + ' ' + (verticalClasses) + ' ' + (positionClasses);\n } else {\n const horizontalClasses = 'w-full h-16 flex items-center';\n const positionClasses = position === 'top'\n ? 'top-0 left-0 right-0 ' + (isOpen ? 'translate-y-0' : '-translate-y-full')\n : 'bottom-0 left-0 right-0 ' + (isOpen ? 'translate-y-0' : 'translate-y-full');\n \n return (baseClasses) + ' ' + (horizontalClasses) + ' ' + (positionClasses);\n }\n };\n\n // 获取内容布局样式\n const getContentClasses = () => {\n if (direction === 'vertical') {\n return 'flex flex-col h-full p-4';\n } else {\n return 'flex items-center justify-between w-full px-6';\n }\n };\n\n // 获取导航项列表样式\n const getItemsListClasses = () => {\n if (direction === 'vertical') {\n return 'flex flex-col gap-2 flex-1 overflow-y-auto mt-4';\n } else {\n return 'flex items-center gap-4';\n }\n };\n\n const handleItemClick = (item: any) => {\n // 处理页面跳转\n if (item.isExternal) {\n // 外链跳转\n window.open(item.href, item.target || '_blank');\n } else if (item.href.startsWith('#')) {\n // 锚点跳转\n const element = document.getElementById(item.id);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' });\n }\n } else {\n // 内部页面跳转\n window.location.href = item.href;\n }\n\n // 触发回调\n onItemClick?.(item);\n };\n\n if (!isOpen) return null;\n\n return (\n <nav className={clsx(getContainerClasses(), className)}>\n <div className={getContentClasses()}>\n {/* Logo 区域 */}\n {logo && (\n <div className=\"flex items-center justify-center mb-4\">\n <img\n src={logo.src}\n alt={logo.alt || 'Logo'}\n className=\"h-8 w-auto\"\n />\n </div>\n )}\n\n {/* 顶部空间占位(为切换按钮预留) */}\n {direction === 'vertical' && (\n <div className=\"h-12 flex-shrink-0\" />\n )}\n\n {/* 导航项列表 */}\n <div className={getItemsListClasses()}>\n {items.map((item) => (\n <NavigationItem\n key={item.id}\n item={item}\n direction={direction}\n isActive={activeItemId === item.id}\n onClick={handleItemClick}\n />\n ))}\n </div>\n\n {/* 头像区域 */}\n {avatar && direction === 'vertical' && (\n <div className=\"flex items-center justify-center mt-auto pt-4\">\n <img\n src={avatar.src}\n alt={avatar.alt || 'Avatar'}\n className=\"w-10 h-10 rounded-full border-2 border-gray-200\"\n />\n </div>\n )}\n\n {/* 水平布局的头像 */}\n {avatar && direction === 'horizontal' && (\n <div className=\"flex items-center\">\n <img\n src={avatar.src}\n alt={avatar.alt || 'Avatar'}\n className=\"w-8 h-8 rounded-full border-2 border-gray-200\"\n />\n </div>\n )}\n </div>\n </nav>\n );\n};\n\nexport default Navigation;"," 'use client';\n\nimport React from 'react';\nimport { NavigationPosition } from './types';\nimport { clsx } from 'clsx';\n\ninterface NavigationToggleProps {\n isOpen: boolean;\n onClick: () => void;\n position: NavigationPosition;\n}\n\nconst NavigationToggle: React.FC<NavigationToggleProps> = ({\n isOpen,\n onClick,\n position\n}) => {\n const getPositionClasses = () => {\n switch (position) {\n case 'top':\n return 'top-4 left-4';\n case 'bottom':\n return 'bottom-4 left-4';\n case 'left':\n return 'top-4 left-4';\n case 'right':\n return 'top-4 right-4';\n default:\n return 'top-4 left-4';\n }\n };\n\n return (\n <button\n onClick={onClick}\n className={clsx(\n 'fixed',\n getPositionClasses(),\n 'z-[100] p-3 rounded-xl bg-white/90 backdrop-blur-md shadow-lg hover:shadow-xl border border-gray-200/50 transition-all duration-300 ease-in-out hover:scale-105 active:scale-95 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50'\n )}\n aria-label={isOpen ? '关闭导航栏' : '打开导航栏'}\n >\n <div className=\"w-5 h-5 flex flex-col justify-center items-center\">\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out',\n isOpen ? 'rotate-45 translate-y-0.5' : ''\n )}\n />\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1',\n isOpen ? 'opacity-0 scale-0' : 'opacity-100 scale-100'\n )}\n />\n <span\n className={clsx(\n 'block w-5 h-0.5 bg-gray-600 rounded-full transform transition-all duration-300 ease-in-out mt-1',\n isOpen ? '-rotate-45 -translate-y-2.5' : ''\n )}\n />\n </div>\n </button>\n );\n};\n\nexport default NavigationToggle;","'use client';\n\nimport React, { useState, useRef, useEffect, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { clsx } from 'clsx';\n\nexport interface FloatingMenuProps {\n /**\n * 触发按钮的内容\n */\n trigger: ReactNode;\n \n /**\n * 菜单内容\n */\n menu: ReactNode;\n \n /**\n * 初始位置\n */\n initialPosition?: { x: number; y: number };\n \n /**\n * 是否默认打开菜单\n */\n defaultOpen?: boolean;\n \n /**\n * 自定义类名\n */\n className?: string;\n \n /**\n * 菜单类名\n */\n menuClassName?: string;\n \n /**\n * 触发器类名\n */\n triggerClassName?: string;\n \n /**\n * z-index\n */\n zIndex?: number;\n}\n\nconst FloatingMenu: React.FC<FloatingMenuProps> = ({\n trigger,\n menu,\n initialPosition = { x: 20, y: 20 },\n defaultOpen = false,\n className = '',\n menuClassName = '',\n triggerClassName = '',\n zIndex = 1000,\n}) => {\n const [position, setPosition] = useState(initialPosition);\n const [isMenuOpen, setIsMenuOpen] = useState(defaultOpen);\n const [menuDirection, setMenuDirection] = useState<'left' | 'right'>('right');\n const [isDragging, setIsDragging] = useState(false);\n const [dragOffset, setDragOffset] = useState({ x: 0, y: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n // 添加一个标志,用于跟踪是否发生了拖动\n const [hasDragged, setHasDragged] = useState(false);\n // 添加一个计时器引用,用于区分点击和拖动\n const dragTimerRef = useRef<number | null>(null);\n // 添加一个引用,记录鼠标按下的初始位置\n const mouseDownPosRef = useRef<{ x: number, y: number } | null>(null);\n\n // 客户端挂载检查\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n // 计算菜单方向\n useEffect(() => {\n if (!mounted || !containerRef.current) return;\n \n const updateMenuDirection = () => {\n const rect = containerRef.current?.getBoundingClientRect();\n if (!rect) return;\n \n const windowWidth = window.innerWidth;\n const middlePoint = windowWidth / 2;\n \n // 如果悬浮窗在屏幕左半部分,菜单向右展开;否则向左展开\n setMenuDirection(rect.left < middlePoint ? 'right' : 'left');\n };\n \n updateMenuDirection();\n \n // 监听窗口大小变化和滚动事件\n window.addEventListener('resize', updateMenuDirection);\n window.addEventListener('scroll', updateMenuDirection);\n \n return () => {\n window.removeEventListener('resize', updateMenuDirection);\n window.removeEventListener('scroll', updateMenuDirection);\n };\n }, [mounted]);\n\n // 处理拖动开始\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!containerRef.current) return;\n \n // 防止触发菜单点击\n e.stopPropagation();\n \n // 记录鼠标按下的初始位置\n mouseDownPosRef.current = { x: e.clientX, y: e.clientY };\n \n const rect = containerRef.current.getBoundingClientRect();\n setDragOffset({\n x: e.clientX - rect.left,\n y: e.clientY - rect.top\n });\n \n // 重置拖动标志\n setHasDragged(false);\n \n // 设置拖动状态\n setIsDragging(true);\n };\n\n // 处理拖动过程\n useEffect(() => {\n if (!isDragging) return;\n \n const handleMouseMove = (e: MouseEvent) => {\n // 检查是否移动了足够的距离来认为是拖动\n if (mouseDownPosRef.current) {\n const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);\n const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);\n \n // 如果移动距离超过阈值,标记为拖动\n if (dx > 3 || dy > 3) {\n setHasDragged(true);\n }\n }\n \n // 计算新位置并应用边界检查\n const newX = e.clientX - dragOffset.x;\n const newY = e.clientY - dragOffset.y;\n \n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n \n setPosition({\n x: Math.min(Math.max(newX, 0), windowWidth - 50),\n y: Math.min(Math.max(newY, 0), windowHeight - 50)\n });\n };\n \n const handleMouseUp = () => {\n setIsDragging(false);\n \n // 重置鼠标按下位置\n mouseDownPosRef.current = null;\n \n // 设置一个短暂的延时,防止拖动后立即触发点击\n if (dragTimerRef.current) {\n window.clearTimeout(dragTimerRef.current);\n }\n \n dragTimerRef.current = window.setTimeout(() => {\n setHasDragged(false);\n }, 300); // 300ms 后重置拖动状态\n };\n \n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n \n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, dragOffset]);\n\n // 清理定时器\n useEffect(() => {\n return () => {\n if (dragTimerRef.current) {\n window.clearTimeout(dragTimerRef.current);\n }\n };\n }, []);\n\n // 切换菜单开关\n const toggleMenu = (e: React.MouseEvent) => {\n e.stopPropagation();\n \n // 如果刚刚拖动过,不触发菜单切换\n if (hasDragged) {\n return;\n }\n \n setIsMenuOpen(!isMenuOpen);\n };\n\n // 关闭菜单的点击外部处理\n useEffect(() => {\n if (!isMenuOpen) return;\n \n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsMenuOpen(false);\n }\n };\n \n document.addEventListener('mousedown', handleClickOutside);\n \n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen]);\n\n // 窗口大小变化时的边界检查\n useEffect(() => {\n if (!mounted) return;\n \n const checkBoundaries = () => {\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n \n // 确保悬浮窗不会被拖出屏幕\n setPosition(prev => {\n const newX = Math.min(Math.max(prev.x, 0), windowWidth - 50);\n const newY = Math.min(Math.max(prev.y, 0), windowHeight - 50);\n \n // 只有在实际需要调整时才更新位置\n if (newX !== prev.x || newY !== prev.y) {\n return { x: newX, y: newY };\n }\n return prev;\n });\n };\n \n // 只在窗口大小变化时检查边界\n window.addEventListener('resize', checkBoundaries);\n \n return () => {\n window.removeEventListener('resize', checkBoundaries);\n };\n }, [mounted]);\n\n if (!mounted) return null;\n\n return createPortal(\n <div\n ref={containerRef}\n className={clsx('fixed select-none box-border', className)}\n style={{\n left: (position.x) + 'px',\n top: (position.y) + 'px',\n zIndex,\n }}\n >\n {/* 触发器按钮 */}\n <div \n className={clsx(\n 'flex items-center justify-center w-12 h-12 md:w-12 md:h-12 bg-white rounded-full shadow-md hover:shadow-lg cursor-grab active:cursor-grabbing transition-all duration-200 hover:scale-105 active:scale-95',\n triggerClassName\n )}\n onMouseDown={handleMouseDown}\n onClick={toggleMenu}\n >\n {trigger}\n </div>\n \n {/* 菜单内容 */}\n {isMenuOpen && (\n <div \n className={clsx(\n 'absolute top-0 bg-white rounded-lg shadow-xl p-3 min-w-[200px] md:min-w-[200px] max-w-[300px] z-[1000] transition-all duration-200',\n isMenuOpen ? 'opacity-100 scale-100' : 'opacity-0 scale-95',\n menuDirection === 'left' ? 'right-[calc(100%+10px)]' : 'left-[calc(100%+10px)]',\n menuClassName\n )}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onMouseUp={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n onTouchMove={(e) => e.stopPropagation()}\n onTouchEnd={(e) => e.stopPropagation()}\n onPointerDown={(e) => e.stopPropagation()}\n onPointerUp={(e) => e.stopPropagation()}\n >\n {menu}\n </div>\n )}\n </div>,\n document.body\n );\n};\n\nexport default FloatingMenu;","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport FloatingMenu from './FloatingMenu';\n\nexport const FloatingMenuExample: React.FC = () => {\n const [windowWidth, setWindowWidth] = useState(0);\n \n useEffect(() => {\n setWindowWidth(window.innerWidth);\n const handleResize = () => setWindowWidth(window.innerWidth);\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n const menuItems = [\n { id: 1, label: '首页', icon: '🏠' },\n { id: 2, label: '设置', icon: '⚙️' },\n { id: 3, label: '消息', icon: '📩' },\n { id: 4, label: '帮助', icon: '❓' },\n { id: 5, label: '退出', icon: '🚪' },\n ];\n \n const handleMenuItemClick = (id: number) => {\n console.log('点击了菜单项: ' + (id));\n };\n \n return (\n <div className=\"w-full h-screen bg-gray-100 relative p-8\">\n <div className=\"max-w-2xl mx-auto bg-white rounded-2xl shadow-sm p-8 mt-12\">\n <h1 className=\"text-3xl font-bold mb-4 text-gray-900\">悬浮菜单示例</h1>\n <p className=\"text-gray-600 leading-relaxed mb-6\">\n 这是一个可拖拽的悬浮菜单组件示例。你可以尝试拖动下方的 <span className=\"font-bold text-blue-600\">蓝色按钮</span> 到处移动。\n </p>\n <div className=\"bg-blue-50 border-l-4 border-blue-500 p-4 mb-6\">\n <p className=\"text-sm text-blue-700\">\n <strong>智能定位:</strong> 菜单会根据按钮在屏幕上的位置自动调整弹出方向(向左或向右)。\n </p>\n </div>\n </div>\n \n <FloatingMenu\n trigger={\n <div className=\"w-12 h-12 bg-blue-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer\">\n <span className=\"text-xl\">➕</span>\n </div>\n }\n menu={\n <div className=\"w-48 bg-white rounded-xl shadow-xl border border-gray-100 overflow-hidden\">\n <div className=\"px-4 py-3 border-b border-gray-100\">\n <h3 className=\"text-sm font-bold text-gray-900\">快捷菜单</h3>\n </div>\n <ul className=\"py-1\">\n {menuItems.map(item => (\n <li \n key={item.id} \n className=\"flex items-center gap-3 px-4 py-2.5 hover:bg-blue-50 text-gray-700 hover:text-blue-600 cursor-pointer transition-colors text-sm\"\n onClick={() => handleMenuItemClick(item.id)}\n >\n <span className=\"text-lg\">{item.icon}</span>\n <span className=\"font-medium\">{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n }\n initialPosition={{ x: 100, y: 100 }}\n />\n \n {windowWidth > 0 && (\n <FloatingMenu\n trigger={\n <div className=\"w-12 h-12 bg-purple-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer\">\n <span className=\"text-xl\">🔍</span>\n </div>\n }\n menu={\n <div className=\"w-64 bg-white rounded-xl shadow-xl border border-gray-100 p-4\">\n <h3 className=\"text-sm font-bold text-gray-900 mb-3\">快速搜索</h3>\n <div className=\"space-y-3\">\n <input \n type=\"text\" \n placeholder=\"输入关键字...\" \n className=\"w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent outline-none\"\n />\n <button className=\"w-full bg-purple-600 text-white py-2 rounded-lg text-sm font-medium hover:bg-purple-700 transition-colors\">\n 搜索\n </button>\n </div>\n </div>\n }\n initialPosition={{ x: windowWidth - 100, y: 100 }}\n />\n )}\n </div>\n );\n};\n\nexport default FloatingMenuExample;\n\n","/**\n * 实验田模块工具函数\n */\n\nimport type { ExperimentItem, ViewMode, TestFieldConfig, CompletionFilter } from '../types';\n\n/**\n * 过滤实验项目\n */\nexport function filterExperiments(\n experiments: ExperimentItem[],\n config: Partial<TestFieldConfig>\n): ExperimentItem[] {\n const {\n viewMode = 'all',\n searchQuery = '',\n completionFilter = 'all'\n } = config;\n\n return experiments.filter(experiment => {\n // 类别过滤\n const matchesViewMode = viewMode === 'all' || experiment.category === viewMode;\n \n // 搜索过滤\n const query = searchQuery.toLowerCase();\n const matchesSearch = !query || \n experiment.title.toLowerCase().includes(query) ||\n experiment.description.toLowerCase().includes(query) ||\n experiment.tags.some(tag => tag.toLowerCase().includes(query));\n \n // 完成状态过滤\n const matchesCompletion = (() => {\n switch (completionFilter) {\n case 'completed':\n return experiment.isCompleted === true;\n case 'incomplete':\n return experiment.isCompleted !== true;\n case 'all':\n default:\n return true;\n }\n })();\n \n return matchesViewMode && matchesSearch && matchesCompletion;\n });\n}\n\n/**\n * 排序实验项目\n */\nexport function sortExperiments(\n experiments: ExperimentItem[],\n sortBy: TestFieldConfig['sortBy'] = 'title',\n sortOrder: TestFieldConfig['sortOrder'] = 'asc'\n): ExperimentItem[] {\n return [...experiments].sort((a, b) => {\n let comparison = 0;\n \n switch (sortBy) {\n case 'title':\n comparison = a.title.localeCompare(b.title);\n break;\n case 'category':\n comparison = a.category.localeCompare(b.category);\n break;\n case 'completion':\n // 已完成的排在前面\n const aCompleted = a.isCompleted ? 1 : 0;\n const bCompleted = b.isCompleted ? 1 : 0;\n comparison = bCompleted - aCompleted;\n break;\n case 'createdAt':\n // 处理创建日期排序,确保没有日期的项目排在最后\n if (!a.createdAt && !b.createdAt) {\n comparison = 0;\n } else if (!a.createdAt) {\n comparison = 1; // a没有日期,排在后面\n } else if (!b.createdAt) {\n comparison = -1; // b没有日期,排在后面\n } else {\n // 日期字符串比较(假设格式为YYYY-MM-DD)\n comparison = new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime();\n }\n break;\n case 'updatedAt':\n // 处理更新日期排序,确保没有日期的项目排在最后\n if (!a.updatedAt && !b.updatedAt) {\n comparison = 0;\n } else if (!a.updatedAt) {\n comparison = 1; // a没有日期,排在后面\n } else if (!b.updatedAt) {\n comparison = -1; // b没有日期,排在后面\n } else {\n // 日期字符串比较(假设格式为YYYY-MM-DD)\n comparison = new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime();\n }\n break;\n default:\n comparison = 0;\n }\n \n // 如果主要排序字段相同,使用ID作为第二排序键确保稳定性\n if (comparison === 0) {\n comparison = a.id.localeCompare(b.id);\n }\n \n return sortOrder === 'asc' ? comparison : -comparison;\n });\n}\n\n/**\n * 获取所有标签\n */\nexport function getAllTags(experiments: ExperimentItem[]): string[] {\n const allTags = experiments.flatMap(experiment => experiment.tags);\n return Array.from(new Set(allTags)).sort();\n}\n\n/**\n * 根据类别统计实验项目数量\n */\nexport function getExperimentCounts(experiments: ExperimentItem[]) {\n const counts = {\n all: experiments.length,\n utility: 0,\n leisure: 0,\n completed: 0,\n inProgress: 0\n };\n \n experiments.forEach(experiment => {\n if (experiment.category === 'utility') {\n counts.utility++;\n } else if (experiment.category === 'leisure') {\n counts.leisure++;\n }\n \n if (experiment.isCompleted) {\n counts.completed++;\n } else {\n counts.inProgress++;\n }\n });\n \n return counts;\n}\n\n/**\n * 验证实验项目数据\n */\nexport function validateExperiment(experiment: Partial<ExperimentItem>): boolean {\n return !!(\n experiment.id &&\n experiment.title &&\n experiment.description &&\n experiment.path &&\n experiment.category &&\n Array.isArray(experiment.tags)\n );\n}\n\n/**\n * 获取类别显示名称\n */\nexport function getCategoryDisplayName(category: ViewMode): string {\n switch (category) {\n case 'utility':\n return '实用工具';\n case 'leisure':\n return '休闲娱乐';\n case 'all':\n default:\n return '全部';\n }\n}\n\n/**\n * 获取类别颜色\n */\nexport function getCategoryColor(category: ExperimentItem['category']): string {\n switch (category) {\n case 'utility':\n return 'bg-blue-100 text-blue-800 border-blue-200';\n case 'leisure':\n return 'bg-purple-100 text-purple-800 border-purple-200';\n default:\n return 'bg-gray-100 text-gray-800 border-gray-200';\n }\n}\n\n/**\n * 获取完成状态显示名称\n */\nexport function getCompletionFilterDisplayName(filter: CompletionFilter): string {\n switch (filter) {\n case 'completed':\n return '已完成';\n case 'incomplete':\n return '进行中';\n case 'all':\n default:\n return '全部状态';\n }\n}\n\n/**\n * 获取完成状态标签样式\n */\nexport function getCompletionStatusColor(isCompleted?: boolean): string {\n if (isCompleted) {\n return 'bg-green-100 text-green-800 border-green-200';\n }\n return 'bg-yellow-100 text-yellow-800 border-yellow-200';\n}\n\n/**\n * 获取完成状态标签文本\n */\nexport function getCompletionStatusText(isCompleted?: boolean): string {\n return isCompleted ? '已完成' : '进行中';\n}","'use client';\n\nimport React from \"react\";\nimport type { ViewMode } from '../types';\nimport { getCategoryDisplayName } from '../utils';\nimport { FilterButtonGroup } from '@/components';\n\ninterface CategoryFilterProps {\n viewMode: ViewMode;\n onViewModeChange: (mode: ViewMode) => void;\n counts: { utility: number; leisure: number };\n className?: string;\n}\n\nexport const CategoryFilter: React.FC<CategoryFilterProps> = ({ \n viewMode, \n onViewModeChange, \n counts,\n className\n}) => {\n const options = [\n {\n value: 'all' as const,\n label: getCategoryDisplayName('all'),\n icon: '📊',\n activeColor: {\n bg: 'bg-blue-500',\n shadow: 'shadow-blue-200'\n },\n showCount: false\n },\n {\n value: 'utility' as const,\n label: getCategoryDisplayName('utility'),\n icon: '🔧',\n activeColor: {\n bg: 'bg-green-500',\n shadow: 'shadow-green-200'\n },\n count: counts.utility,\n showCount: true\n },\n {\n value: 'leisure' as const,\n label: getCategoryDisplayName('leisure'),\n icon: '🎮',\n activeColor: {\n bg: 'bg-purple-500',\n shadow: 'shadow-purple-200'\n },\n count: counts.leisure,\n showCount: true\n },\n ];\n\n return (\n <FilterButtonGroup\n label=\"项目类别\"\n value={viewMode}\n options={options}\n onChange={onViewModeChange}\n className={className}\n />\n );\n};\n\nexport default CategoryFilter;\n","'use client';\n\nimport React from \"react\";\nimport type { CompletionFilter } from '../types';\nimport { getCompletionFilterDisplayName } from '../utils';\nimport { FilterButtonGroup } from '@/components';\n\ninterface CompletionFilterProps {\n completionFilter: CompletionFilter;\n onCompletionFilterChange: (filter: CompletionFilter) => void;\n counts: { all: number; completed: number; inProgress: number };\n className?: string;\n}\n\nexport const CompletionFilterComponent: React.FC<CompletionFilterProps> = ({ \n completionFilter, \n onCompletionFilterChange, \n counts,\n className\n}) => {\n const options = [\n {\n value: 'all' as const,\n label: getCompletionFilterDisplayName('all'),\n icon: '📊',\n activeColor: {\n bg: 'bg-slate-500',\n shadow: 'shadow-slate-200'\n },\n count: counts.all,\n showCount: true\n },\n {\n value: 'completed' as const,\n label: getCompletionFilterDisplayName('completed'),\n icon: '✅',\n activeColor: {\n bg: 'bg-emerald-500',\n shadow: 'shadow-emerald-200'\n },\n count: counts.completed,\n showCount: true\n },\n {\n value: 'incomplete' as const,\n label: getCompletionFilterDisplayName('incomplete'),\n icon: '🚧',\n activeColor: {\n bg: 'bg-orange-500',\n shadow: 'shadow-orange-200'\n },\n count: counts.inProgress,\n showCount: true\n }\n ];\n\n return (\n <FilterButtonGroup\n label=\"完成状态\"\n value={completionFilter}\n options={options}\n onChange={onCompletionFilterChange}\n className={className}\n />\n );\n};\n\nexport default CompletionFilterComponent;\n","'use client';\n\nimport React from \"react\";\nimport { BackButton } from '@/components';\n\nexport interface PageHeaderProps {\n counts: { all: number; utility: number; leisure: number; completed: number };\n className?: string;\n}\n\nexport const PageHeader: React.FC<PageHeaderProps> = ({ counts, className }) => {\n return (\n <div className={className}>\n {/* 顶部导航 */}\n <div className=\"mb-8\">\n <BackButton />\n </div>\n\n {/* 页面标题 */}\n <div className=\"mb-8\">\n <h1 className=\"text-3xl font-bold text-gray-900\">实验田</h1>\n <p className=\"mt-2 text-sm text-gray-600\">\n 在这里,你可以尝试各种实验性的功能和项目\n </p>\n \n {/* 统计信息 */}\n <div className=\"mt-4 flex flex-wrap gap-4 text-sm text-gray-500\">\n <span>总计: {counts.all} 个项目</span>\n <span>实用工具: {counts.utility} 个</span>\n <span>休闲娱乐: {counts.leisure} 个</span>\n <span>已完成: {counts.completed} 个</span>\n </div>\n </div>\n </div>\n );\n};\n\nexport default PageHeader;\n","'use client';\n\nimport React from \"react\";\nimport { ExperimentCard } from '@/portfolio/ExperimentCard';\nimport type { ExperimentItem } from '../types';\nimport { Grid } from '@/components';\nimport type { GridItem, GridColumns, GridGap } from '@/components';\n\n/** 实验项目网格项接口 */\nexport interface ExperimentGridItem extends GridItem {\n title: string;\n description: string;\n path: string;\n tags: string[];\n category: string;\n isCompleted?: boolean;\n updatedAt?: string;\n createdAt?: string;\n}\n\n/** 实验项目网格组件 Props */\nexport interface ExperimentGridProps<T extends ExperimentGridItem> {\n /** 数据项数组 */\n items: T[];\n /** 自定义渲染函数(可选) */\n renderItem?: (item: T, index: number) => React.ReactNode;\n /** 网格列数配置(可选) */\n columns?: GridColumns;\n /** 间距配置(可选) */\n gap?: GridGap;\n /** 额外的容器类名 */\n className?: string;\n}\n\n/** 默认的 ExperimentCard 渲染器 */\nfunction defaultExperimentRenderer(item: ExperimentItem) {\n return (\n <ExperimentCard\n href={item.path}\n title={item.title}\n description={item.description}\n tags={item.tags}\n category={item.category as any}\n isCompleted={item.isCompleted}\n updatedAt={item.updatedAt}\n createdAt={item.createdAt}\n />\n );\n}\n\n/** 实验项目网格组件 */\nexport function ExperimentGrid<T extends ExperimentGridItem>({\n items,\n renderItem,\n columns = { sm: 1, md: 2, lg: 3, xl: 4 },\n gap = 'md',\n className = ''\n}: ExperimentGridProps<T>) {\n const itemRenderer = renderItem || ((item: T) => defaultExperimentRenderer(item as any));\n\n return (\n <Grid\n items={items}\n renderItem={itemRenderer}\n columns={columns}\n gap={gap}\n className={className}\n />\n );\n}\n\n/** 为了向后兼容,导出一个专门用于 ExperimentItem 的组件 */\nexport function ExperimentItemGrid({ \n experiments, \n ...props \n}: Omit<ExperimentGridProps<ExperimentItem>, 'items'> & { experiments: ExperimentItem[] }) {\n return <ExperimentGrid<ExperimentItem> items={experiments} {...props} />;\n}\n\nexport default ExperimentGrid;\n","'use client';\n\nimport React from \"react\";\nimport { clsx } from 'clsx';\n\nexport interface EmptyStateProps {\n searchQuery: string;\n onClearSearch: () => void;\n className?: string;\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({ searchQuery, onClearSearch, className }) => {\n return (\n <div className={clsx('text-center py-12', className)}>\n <svg \n className=\"mx-auto h-12 w-12 text-gray-400\" \n fill=\"none\" \n stroke=\"currentColor\" \n viewBox=\"0 0 24 24\"\n >\n <path \n strokeLinecap=\"round\" \n strokeLinejoin=\"round\" \n strokeWidth={2} \n d=\"M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.47.904-6.06 2.384\" \n />\n </svg>\n <h3 className=\"mt-2 text-sm font-medium text-gray-900\">没有找到匹配的实验项目</h3>\n <p className=\"mt-1 text-sm text-gray-500\">\n {searchQuery \n ? '尝试调整搜索关键词或筛选条件' \n : '当前分类下暂无实验项目'\n }\n </p>\n {searchQuery && (\n <div className=\"mt-4\">\n <button\n onClick={onClearSearch}\n className=\"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-blue-700 bg-blue-100 hover:bg-blue-200\"\n >\n 清除搜索\n </button>\n </div>\n )}\n </div>\n );\n};\n\nexport default EmptyState;\n","'use client';\n\nimport React from 'react';\nimport type { TestFieldConfig } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortControlProps {\n sortBy: TestFieldConfig['sortBy'];\n sortOrder: TestFieldConfig['sortOrder'];\n onSortByChange: (sortBy: TestFieldConfig['sortBy']) => void;\n onSortOrderChange: (sortOrder: TestFieldConfig['sortOrder']) => void;\n}\n\nexport const SortControl: React.FC<SortControlProps> = ({\n sortBy,\n sortOrder,\n onSortByChange,\n onSortOrderChange,\n}) => {\n // 排序方式选项\n const sortOptions: { value: TestFieldConfig['sortBy']; label: string }[] = [\n { value: 'title', label: '名称' },\n { value: 'updatedAt', label: '更新时间' },\n { value: 'createdAt', label: '创建时间' },\n { value: 'category', label: '类别' },\n { value: 'completion', label: '完成状态' },\n ];\n\n return (\n <div className=\"flex flex-col sm:flex-row items-start sm:items-center gap-2 sm:gap-4 p-4 bg-white rounded-lg shadow-sm border border-gray-100\">\n <div className=\"text-sm font-medium text-gray-700\">排序方式:</div>\n \n <div className=\"flex flex-wrap gap-2\">\n {sortOptions.map((option) => (\n <button\n key={option.value}\n className={clsx('px-3 py-1.5 text-sm rounded-full transition-colors', sortBy === option.value\n ? 'bg-blue-100 text-blue-700 font-medium'\n : 'bg-gray-100 text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortByChange(option.value)}\n >\n {option.label}\n </button>\n ))}\n </div>\n \n <div className=\"ml-auto flex items-center\">\n <button\n className=\"flex items-center gap-1 px-3 py-1.5 text-sm rounded-full bg-gray-100 hover:bg-gray-200\"\n onClick={() => onSortOrderChange(sortOrder === 'asc' ? 'desc' : 'asc')}\n >\n {sortOrder === 'asc' ? (\n <>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12\" />\n </svg>\n <span>升序</span>\n </>\n ) : (\n <>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4\" />\n </svg>\n <span>降序</span>\n </>\n )}\n </button>\n </div>\n </div>\n );\n};\n\nexport default SortControl;\n","'use client';\n\nimport React from 'react';\nimport type { SortMode } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortModeToggleProps {\n sortMode: SortMode;\n onSortModeChange: (mode: SortMode) => void;\n}\n\nexport const SortModeToggle: React.FC<SortModeToggleProps> = ({ sortMode, onSortModeChange }) => {\n return (\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-3 bg-white p-4 rounded-lg shadow-sm border border-gray-100\">\n <span className=\"text-sm font-medium text-gray-700\">排序模式:</span>\n \n <div className=\"flex w-full sm:w-auto p-1 bg-gray-100 rounded-lg\">\n <button\n className={clsx('flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors', sortMode === 'auto'\n ? 'bg-white text-blue-700 font-medium shadow-sm'\n : 'text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortModeChange('auto')}\n >\n <div className=\"flex items-center justify-center sm:justify-start space-x-1\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4\" />\n </svg>\n <span>自动排序</span>\n </div>\n </button>\n \n <button\n className={clsx('flex-1 sm:flex-initial px-3 py-1.5 text-sm rounded-md transition-colors', sortMode === 'manual'\n ? 'bg-white text-blue-700 font-medium shadow-sm'\n : 'text-gray-600 hover:bg-gray-200')}\n onClick={() => onSortModeChange('manual')}\n >\n <div className=\"flex items-center justify-center sm:justify-start space-x-1\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 11.5V14m0-2.5v-6a1.5 1.5 0 113 0m-3 6a1.5 1.5 0 00-3 0v2a7.5 7.5 0 0015 0v-5a1.5 1.5 0 013 0m-6-3V11m0-5.5v-1a1.5 1.5 0 013 0v1m0 0V11m0-5.5a1.5 1.5 0 013 0v3m0 0V11\" />\n </svg>\n <span>手动排序</span>\n </div>\n </button>\n </div>\n </div>\n );\n};\n\nexport default SortModeToggle;\n","'use client';\n\nimport React from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { ExperimentCard } from '@/portfolio/ExperimentCard';\nimport type { ExperimentItem } from '../types';\nimport { clsx } from 'clsx';\n\nexport interface SortableExperimentItemProps {\n item: ExperimentItem;\n onMoveUp?: () => void;\n onMoveDown?: () => void;\n isFirst?: boolean;\n isLast?: boolean;\n}\n\nexport const SortableExperimentItem: React.FC<SortableExperimentItemProps> = ({ \n item, \n onMoveUp, \n onMoveDown,\n isFirst,\n isLast \n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.id });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 100 : 1,\n opacity: isDragging ? 0.8 : 1,\n position: 'relative' as const,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className=\"relative group\"\n >\n {/* 拖拽手柄 - 桌面端 */}\n <div\n {...attributes}\n {...listeners}\n className=\"absolute right-2 top-2 w-8 h-8 bg-white/80 hover:bg-white rounded-full flex items-center justify-center shadow-md z-[10]\n hidden sm:flex\n opacity-0 group-hover:opacity-100 transition-opacity\n cursor-grab active:cursor-grabbing\n touch-action-none\" /* 防止触摸设备上的滚动冲突 */\n onClick={(e) => e.stopPropagation()}\n aria-label=\"拖动排序\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 text-gray-500\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 8h16M4 16h16\" />\n </svg>\n \n <span className=\"absolute top-full mt-1 left-1/2 transform -translate-x-1/2 text-xs bg-gray-800 text-white px-2 py-1 rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity\">\n 拖动排序\n </span>\n </div>\n\n {/* 移动端排序按钮组 */}\n <div className=\"absolute right-2 top-2 flex flex-col gap-2 sm:hidden z-[10]\">\n {/* 向上按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveUp?.();\n }}\n disabled={isFirst}\n className={clsx('w-8 h-8 rounded-full flex items-center justify-center shadow-md', isFirst ? 'bg-gray-200 cursor-not-allowed' : 'bg-white/80 hover:bg-white active:bg-gray-100')}\n aria-label=\"向上移动\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={clsx('h-5 w-5', isFirst ? 'text-gray-400' : 'text-gray-500')} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 15l7-7 7 7\" />\n </svg>\n </button>\n\n {/* 向下按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n onMoveDown?.();\n }}\n disabled={isLast}\n className={clsx('w-8 h-8 rounded-full flex items-center justify-center shadow-md', isLast ? 'bg-gray-200 cursor-not-allowed' : 'bg-white/80 hover:bg-white active:bg-gray-100')}\n aria-label=\"向下移动\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={clsx('h-5 w-5', isLast ? 'text-gray-400' : 'text-gray-500')} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n\n {/* 实验卡片 */}\n <div className={clsx('transition-all', isDragging ? 'scale-105 shadow-xl' : '')}>\n <ExperimentCard\n href={item.path}\n title={item.title}\n description={item.description}\n tags={item.tags}\n category={item.category as any}\n isCompleted={item.isCompleted}\n updatedAt={item.updatedAt}\n createdAt={item.createdAt}\n />\n </div>\n </div>\n );\n};\n\nexport default SortableExperimentItem;\n","'use client';\n\nimport React, { useState } from 'react';\nimport type { ExperimentItem } from '../types';\nimport { clsx } from 'clsx';\nimport { \n DndContext, \n closestCenter, \n KeyboardSensor, \n PointerSensor, \n useSensor, \n useSensors,\n DragEndEvent,\n TouchSensor\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n sortableKeyboardCoordinates,\n rectSortingStrategy\n} from '@dnd-kit/sortable';\nimport { SortableExperimentItem } from './SortableExperimentItem';\n\nexport interface DraggableExperimentGridProps {\n items: ExperimentItem[];\n onOrderChange?: (items: ExperimentItem[]) => void;\n className?: string;\n}\n\nexport const DraggableExperimentGrid: React.FC<DraggableExperimentGridProps> = ({ \n items: initialItems, \n onOrderChange,\n className = '' \n}) => {\n // 本地状态跟踪项目顺序\n const [items, setItems] = useState<ExperimentItem[]>(initialItems);\n const [isDragging, setIsDragging] = useState(false);\n\n // 设置传感器\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 8, // 需要拖动8px才激活,避免意外触发\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 250, // 触摸需要按住250ms才激活,避免与点击冲突\n tolerance: 5, // 允许的移动容差\n },\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n );\n\n // 处理拖拽开始事件\n function handleDragStart() {\n setIsDragging(true);\n }\n\n // 处理拖拽结束事件\n function handleDragEnd(event: DragEndEvent) {\n setIsDragging(false);\n \n const { active, over } = event;\n \n if (over && active.id !== over.id) {\n setItems((currentItems) => {\n // 找到拖拽项和目标项的索引\n const oldIndex = currentItems.findIndex(item => item.id === active.id);\n const newIndex = currentItems.findIndex(item => item.id === over.id);\n \n // 重新排序项目\n const newItems = arrayMove(currentItems, oldIndex, newIndex);\n \n // 如果提供了回调函数,通知父组件顺序变化\n if (onOrderChange) {\n onOrderChange(newItems);\n }\n \n return newItems;\n });\n }\n }\n\n // 处理向上移动\n const handleMoveUp = (index: number) => {\n if (index > 0) {\n setItems((currentItems) => {\n const newItems = arrayMove(currentItems, index, index - 1);\n onOrderChange?.(newItems);\n return newItems;\n });\n }\n };\n\n // 处理向下移动\n const handleMoveDown = (index: number) => {\n if (index < items.length - 1) {\n setItems((currentItems) => {\n const newItems = arrayMove(currentItems, index, index + 1);\n onOrderChange?.(newItems);\n return newItems;\n });\n }\n };\n\n // 当初始项目变化时更新本地状态\n React.useEffect(() => {\n setItems(initialItems);\n }, [initialItems]);\n\n return (\n <div className={clsx('relative', className)}>\n <div className=\"mb-4 px-4 py-3 bg-blue-50 text-blue-700 rounded-lg border border-blue-200 text-sm\">\n <div className=\"flex items-start sm:items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 mr-2 flex-shrink-0 mt-0.5 sm:mt-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\" clipRule=\"evenodd\" />\n </svg>\n <div>\n <p className=\"mb-1\">拖拽卡片可以自定义排序。点击卡片可以访问对应的实验项目。</p>\n <p className=\"text-xs text-blue-600 sm:hidden\">点击卡片右上角的上下箭头按钮调整顺序</p>\n <p className=\"text-xs text-blue-600 hidden sm:block\">长按卡片右上角的拖动图标进行排序</p>\n </div>\n </div>\n </div>\n \n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={items.map(item => item.id)}\n strategy={rectSortingStrategy}\n >\n <div className={clsx('grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 md:gap-6', isDragging ? 'cursor-grabbing' : '')}>\n {items.map((item, index) => (\n <SortableExperimentItem \n key={item.id} \n item={item}\n onMoveUp={() => handleMoveUp(index)}\n onMoveDown={() => handleMoveDown(index)}\n isFirst={index === 0}\n isLast={index === items.length - 1}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </div>\n );\n};\n\nexport default DraggableExperimentGrid;\n","/**\n * Auth Schema - Enums\n * 认证相关的枚举类型定义\n */\n\nimport { pgEnum } from 'drizzle-orm/pg-core';\n\n/**\n * 用户角色枚举\n */\nexport const userRole = pgEnum('UserRole', ['USER', 'ADMIN', 'SUPER_ADMIN']);\n\n/**\n * 类型定义\n */\nexport type UserRole = 'USER' | 'ADMIN' | 'SUPER_ADMIN';\n\n","/**\n * Auth Schema - User Table\n * 用户表定义\n */\n\nimport { pgTable, text, boolean, jsonb, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { userRole } from './enums';\n\n/**\n * 用户表\n */\nexport const user = pgTable(\n 'User',\n {\n id: text().primaryKey().notNull(),\n email: text().notNull(),\n emailVerified: boolean().default(false).notNull(),\n username: text().notNull(),\n password: text(),\n name: text(),\n nickname: text(),\n image: text(),\n avatar: text(),\n role: userRole().default('USER').notNull(),\n preferences: jsonb(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n twoFactorEnabled: boolean().default(false).notNull(),\n },\n (table) => [\n uniqueIndex('User_email_key').using('btree', table.email.asc().nullsLast().op('text_ops')),\n uniqueIndex('User_username_key').using(\n 'btree',\n table.username.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type User = typeof user.$inferSelect;\nexport type NewUser = typeof user.$inferInsert;\n\n","/**\n * Auth Schema - Session Table\n * 会话表定义\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n foreignKey,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\n/**\n * 会话表\n */\nexport const session = pgTable(\n 'Session',\n {\n id: text().primaryKey().notNull(),\n userId: text().notNull(),\n token: text().notNull(),\n expiresAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n ipAddress: text(),\n userAgent: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n },\n (table) => [\n uniqueIndex('Session_token_key').using('btree', table.token.asc().nullsLast().op('text_ops')),\n foreignKey({\n columns: [table.userId],\n foreignColumns: [user.id],\n name: 'Session_userId_fkey',\n })\n .onUpdate('cascade')\n .onDelete('cascade'),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Session = typeof session.$inferSelect;\nexport type NewSession = typeof session.$inferInsert;\n\n","/**\n * Auth Schema - Account Table\n * 第三方账号关联表定义\n */\n\nimport {\n pgTable,\n text,\n timestamp,\n uniqueIndex,\n foreignKey,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\nimport { user } from './user';\n\n/**\n * 第三方账号表(支持 OAuth 登录)\n */\nexport const account = pgTable(\n 'Account',\n {\n id: text().primaryKey().notNull(),\n accountId: text().notNull(),\n providerId: text().notNull(), // 提供商: github, google, wechat 等\n userId: text().notNull(),\n accessToken: text(),\n refreshToken: text(),\n idToken: text(),\n accessTokenExpiresAt: timestamp({ precision: 3, mode: 'string' }),\n refreshTokenExpiresAt: timestamp({ precision: 3, mode: 'string' }),\n scope: text(),\n password: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n },\n (table) => [\n uniqueIndex('Account_providerId_accountId_key').using(\n 'btree',\n table.providerId.asc().nullsLast().op('text_ops'),\n table.accountId.asc().nullsLast().op('text_ops')\n ),\n foreignKey({\n columns: [table.userId],\n foreignColumns: [user.id],\n name: 'Account_userId_fkey',\n })\n .onUpdate('cascade')\n .onDelete('cascade'),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Account = typeof account.$inferSelect;\nexport type NewAccount = typeof account.$inferInsert;\n\n","/**\n * Auth Schema - Verification Table\n * 验证码表定义\n */\n\nimport { pgTable, text, timestamp, uniqueIndex } from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\n/**\n * 验证码表(邮箱验证、密码重置等)\n */\nexport const verifications = pgTable(\n 'verifications',\n {\n id: text().primaryKey().notNull(),\n identifier: text().notNull(), // 邮箱或手机号\n value: text().notNull(), // 验证码\n expiresAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n },\n (table) => [\n uniqueIndex('verifications_identifier_value_key').using(\n 'btree',\n table.identifier.asc().nullsLast().op('text_ops'),\n table.value.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 类型定义\n */\nexport type Verification = typeof verifications.$inferSelect;\nexport type NewVerification = typeof verifications.$inferInsert;\n\n","/**\n * Auth Schema - Relations\n * 表关系定义\n */\n\nimport { relations } from 'drizzle-orm';\nimport { user } from './user';\nimport { session } from './session';\nimport { account } from './account';\n\n/**\n * User 表关系\n */\nexport const userRelations = relations(user, ({ many }) => ({\n sessions: many(session),\n accounts: many(account),\n}));\n\n/**\n * Session 表关系\n */\nexport const sessionRelations = relations(session, ({ one }) => ({\n user: one(user, {\n fields: [session.userId],\n references: [user.id],\n }),\n}));\n\n/**\n * Account 表关系\n */\nexport const accountRelations = relations(account, ({ one }) => ({\n user: one(user, {\n fields: [account.userId],\n references: [user.id],\n }),\n}));\n\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { User, IAuthClient as BaseApiClient, AuthResult, UseAuthReturn } from '../types';\n\nexport type { User, BaseApiClient, AuthResult, UseAuthReturn };\n\nexport function useAuth(apiClient: BaseApiClient): UseAuthReturn {\n const [user, setUser] = useState<User | null>(null);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [loading, setLoading] = useState(false);\n const [checkingAuth, setCheckingAuth] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * 检查认证状态\n */\n const checkAuthStatus = useCallback(async () => {\n try {\n setCheckingAuth(true);\n setError(null);\n\n const isAuth = await apiClient.isAuthenticated();\n\n if (isAuth) {\n // 验证 token 并获取用户信息\n const response = await apiClient.getCurrentUser();\n\n if (response.success && response.data) {\n setUser(response.data);\n setIsLoggedIn(true);\n } else {\n // Token 无效,清除登录状态\n await apiClient.clearUserData();\n setUser(null);\n setIsLoggedIn(false);\n }\n } else {\n setUser(null);\n setIsLoggedIn(false);\n }\n } catch (err) {\n console.error('检查登录状态失败:', err);\n setError(err instanceof Error ? err.message : '检查登录状态失败');\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setCheckingAuth(false);\n }\n }, [apiClient]);\n\n /**\n * 用户登录\n */\n const login = useCallback(\n async (email: string, password: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.login(email, password);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '登录失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '登录失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户注册\n */\n const register = useCallback(\n async (email: string, password: string, username: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.register(email, password, username);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '注册失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '注册失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户登出\n */\n const logout = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n await apiClient.logout();\n setUser(null);\n setIsLoggedIn(false);\n } catch (err) {\n console.error('登出失败:', err);\n setError(err instanceof Error ? err.message : '登出失败');\n // 即使登出失败,也清除本地状态\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // 组件挂载时检查认证状态\n useEffect(() => {\n checkAuthStatus();\n }, [checkAuthStatus]);\n\n return {\n // 状态\n user,\n isLoggedIn,\n loading,\n checkingAuth,\n error,\n\n // 操作方法\n login,\n register,\n logout,\n refresh: checkAuthStatus,\n clearError,\n };\n}\n\n/**\n * 表单验证 Hook\n *\n * @example\n * ```typescript\n * const { values, errors, handleChange, handleBlur, validate } = useAuthForm({\n * email: '',\n * password: ''\n * })\n * ```\n */\nexport function useAuthForm<T extends Record<string, any>>(initialValues: T) {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n\n const handleChange = useCallback(\n (field: keyof T, value: any) => {\n setValues((prev: T) => ({ ...prev, [field]: value }));\n // 清除该字段的错误\n if (errors[field]) {\n setErrors((prev: Partial<Record<keyof T, string>>) => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n },\n [errors]\n );\n\n const handleBlur = useCallback((field: keyof T) => {\n setTouched((prev: Partial<Record<keyof T, boolean>>) => ({ ...prev, [field]: true }));\n }, []);\n\n const validate = useCallback(\n (validationRules: Partial<Record<keyof T, (value: any) => string | undefined>>) => {\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n Object.keys(validationRules).forEach((key) => {\n const field = key as keyof T;\n const rule = validationRules[field];\n if (rule) {\n const error = rule(values[field]);\n if (error) {\n newErrors[field] = error;\n }\n }\n });\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n },\n [values]\n );\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n }, [initialValues]);\n\n return {\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n validate,\n reset,\n setValues,\n setErrors,\n };\n}\n\n","'use client';\n\nimport React from 'react';\nimport { BaseApiClient, UseAuthReturn, useAuth } from '@/auth';\nimport { Shield, AlertTriangle } from 'lucide-react';\nimport { ApiError } from '@/universalFile/server';\n\ninterface PermissionGuardProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n apiClient: BaseApiClient;\n}\n\nexport const PermissionGuard: React.FC<PermissionGuardProps> = ({\n apiClient,\n children,\n fallback\n}) => {\n const { user, isLoggedIn } = useAuth(apiClient);\n\n // 检查用户是否有权限(所有登录用户都可以访问实验田)\n const hasPermission = () => {\n if (!isLoggedIn || !user) {\n return false;\n }\n\n // 实验田对所有登录用户开放\n return true;\n };\n\n if (!hasPermission()) {\n return (fallback as any) || (\n <div className=\"min-h-screen bg-gray-50 flex items-center justify-center\">\n <div className=\"max-w-md w-full bg-white rounded-lg shadow-lg p-8 text-center\">\n <div className=\"flex items-center justify-center mb-4\">\n <Shield className=\"w-12 h-12 text-red-500\" />\n </div>\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">\n 需要登录\n </h2>\n <p className=\"text-gray-600 mb-4\">\n 请先登录以访问实验田功能。\n </p>\n <div className=\"flex items-center justify-center text-sm text-gray-500 mb-4\">\n <AlertTriangle className=\"w-4 h-4 mr-1\" />\n 实验田对所有注册用户开放\n </div>\n <button\n onClick={() => window.history.back()}\n className=\"inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-green-600 hover:bg-green-700\"\n >\n 返回上一页\n </button>\n </div>\n </div>\n );\n }\n\n return <>{children}</>;\n};\n\nexport default PermissionGuard;\n","'use client';\n\nimport React from 'react';\nimport { BaseApiClient, useAuth } from '@/auth';\nimport { LogOut, User, FlaskConical } from 'lucide-react';\n\nexport interface UserInfoBarProps {\n apiClient: BaseApiClient;\n}\n\nexport const UserInfoBar: React.FC<UserInfoBarProps> = ({ apiClient }) => {\n const { user, logout, isLoggedIn } = useAuth(apiClient);\n\n const handleLogout = async () => {\n try {\n await logout();\n // 登出后重定向到首页\n window.location.href = '/';\n } catch (error) {\n console.error('登出失败:', error);\n }\n };\n\n if (!isLoggedIn || !user) {\n return null;\n }\n\n return (\n <div className=\"bg-white border-b border-gray-200 px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3\">\n <div className=\"flex items-center space-x-2\">\n <User className=\"w-5 h-5 text-gray-600\" />\n <span className=\"text-sm font-medium text-gray-900\">\n {user.name || user.email || '用户'}\n </span>\n {user.role && (\n <span className=\"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-800\">\n {user.role}\n </span>\n )}\n </div>\n </div>\n \n <div className=\"flex items-center space-x-2\">\n <div className=\"flex items-center space-x-1 text-sm text-gray-500\">\n <FlaskConical className=\"w-4 h-4\" />\n <span>实验田</span>\n </div>\n \n <button\n onClick={handleLogout}\n className=\"inline-flex items-center px-3 py-1.5 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-green-500\"\n >\n <LogOut className=\"w-4 h-4 mr-1\" />\n 登出\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default UserInfoBar;\n","'use client';\n\nimport React, { useState } from 'react';\n\ninterface DanmakuPanelProps {\n onSend: (text: string) => void;\n}\n\nexport function DanmakuPanel({ onSend }: DanmakuPanelProps) {\n const [text, setText] = useState('');\n\n const emit = () => {\n const value = text.trim();\n if (!value) {\n return;\n }\n onSend(value);\n setText('');\n };\n\n return (\n <div className=\"rounded-xl border border-slate-600/40 bg-slate-900/70 p-3 text-slate-100 backdrop-blur-sm\">\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n value={text}\n onChange={(event) => setText(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n emit();\n }\n }}\n placeholder=\"发送弹幕(支持 /miku /avatar /normal)\"\n className=\"flex-1 rounded-md border border-slate-600 bg-slate-950 px-2.5 py-2 text-sm text-slate-100 outline-none focus:border-cyan-400\"\n />\n <button\n type=\"button\"\n onClick={emit}\n className=\"rounded-md bg-cyan-400 px-3 py-2 text-sm font-medium text-slate-950 hover:bg-cyan-300\"\n >\n 发送\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\n\ninterface FireworksCanvasProps {\n canvasRef: React.RefObject<HTMLCanvasElement>;\n}\n\nexport function FireworksCanvas({ canvasRef }: FireworksCanvasProps) {\n return (\n <canvas\n ref={canvasRef}\n className=\"absolute inset-0 h-full w-full\"\n style={{\n background:\n 'radial-gradient(circle at 20% 20%, rgba(57,197,187,0.15) 0%, rgba(6,8,22,1) 45%, rgba(4,6,15,1) 100%)',\n }}\n />\n );\n}\n","import type { FireworkKind } from './types';\n\nexport const DEFAULT_MAX_PARTICLES = 5000;\nexport const DEFAULT_MAX_ACTIVE_FIREWORKS = 12;\n\nexport const FIREWORK_KIND_LABELS: Record<FireworkKind, string> = {\n normal: '普通烟花',\n miku: 'MIKU 主题',\n avatar: '头像烟花',\n};\n\nexport const MIKU_PALETTE = ['#39c5bb', '#66e3db', '#7ad8ff', '#b0fff8', '#8cf7e0'];\nexport const NORMAL_PALETTE = ['#ffe066', '#ff6b6b', '#4dabf7', '#c77dff', '#69db7c'];\n\nexport const DANMAKU_MAX_LENGTH = 32;\nexport const DANMAKU_TRACK_COUNT = 8;\n","'use client';\n\nimport React from 'react';\nimport { FIREWORK_KIND_LABELS } from '../constants';\nimport type { FireworkKind } from '../types';\n\ninterface FireworksControlPanelProps {\n selectedKind: FireworkKind;\n onKindChange: (kind: FireworkKind) => void;\n autoLaunchOnDanmaku: boolean;\n onAutoLaunchChange: (value: boolean) => void;\n avatarUrl: string;\n onAvatarUrlChange: (value: string) => void;\n onLaunch: () => void;\n fps: number;\n realtimeConnected?: boolean;\n onlineCount?: number;\n}\n\nexport function FireworksControlPanel({\n selectedKind,\n onKindChange,\n autoLaunchOnDanmaku,\n onAutoLaunchChange,\n avatarUrl,\n onAvatarUrlChange,\n onLaunch,\n fps,\n realtimeConnected,\n onlineCount,\n}: FireworksControlPanelProps) {\n return (\n <div className=\"rounded-xl border border-slate-600/40 bg-slate-900/70 p-3 text-slate-100 backdrop-blur-sm\">\n <div className=\"mb-3 flex flex-wrap items-center gap-2\">\n {(Object.keys(FIREWORK_KIND_LABELS) as FireworkKind[]).map((kind) => {\n const active = kind === selectedKind;\n return (\n <button\n key={kind}\n type=\"button\"\n onClick={() => onKindChange(kind)}\n className={`rounded-md px-3 py-1.5 text-sm transition ${\n active ? 'bg-cyan-500 text-slate-950' : 'bg-slate-700/70 hover:bg-slate-600/80'\n }`}\n >\n {FIREWORK_KIND_LABELS[kind]}\n </button>\n );\n })}\n\n <button\n type=\"button\"\n onClick={onLaunch}\n className=\"ml-auto rounded-md bg-emerald-400 px-3 py-1.5 text-sm font-medium text-slate-900 hover:bg-emerald-300\"\n >\n 发射烟花\n </button>\n </div>\n\n <div className=\"grid gap-2 md:grid-cols-2\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={autoLaunchOnDanmaku}\n onChange={(event) => onAutoLaunchChange(event.target.checked)}\n />\n 发送弹幕后自动放烟花\n </label>\n\n <div className=\"text-sm text-slate-300\">FPS: {fps}</div>\n {typeof realtimeConnected === 'boolean' ? (\n <div className=\"text-sm text-slate-300\">\n 实时状态: {realtimeConnected ? '已连接' : '未连接'}\n {typeof onlineCount === 'number' ? ` · 在线 ${onlineCount}` : ''}\n </div>\n ) : null}\n </div>\n\n {selectedKind === 'avatar' ? (\n <div className=\"mt-2\">\n <input\n type=\"url\"\n value={avatarUrl}\n onChange={(event) => onAvatarUrlChange(event.target.value)}\n placeholder=\"头像图片 URL(用于头像烟花)\"\n className=\"w-full rounded-md border border-slate-600 bg-slate-950 px-2.5 py-2 text-sm text-slate-100 outline-none focus:border-cyan-400\"\n />\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useCallback, useMemo, useRef, useState } from 'react';\nimport { DANMAKU_MAX_LENGTH, DANMAKU_TRACK_COUNT } from '../constants';\nimport type { DanmakuControllerOptions, DanmakuMessage, DanmakuSendResult, FireworkKind } from '../types';\n\nexport interface DanmakuOverlayItem extends DanmakuMessage {\n track: number;\n durationMs: number;\n}\n\ninterface SendDanmakuOptions {\n optimistic?: boolean;\n}\n\nexport function useDanmakuController(options?: DanmakuControllerOptions) {\n const [items, setItems] = useState<DanmakuOverlayItem[]>([]);\n const cursorRef = useRef(0);\n\n const removeItem = useCallback((id: string) => {\n setItems((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const addIncoming = useCallback((message: DanmakuMessage) => {\n setItems((prev) => {\n const track = cursorRef.current % DANMAKU_TRACK_COUNT;\n const item: DanmakuOverlayItem = {\n ...message,\n track,\n durationMs: 8000 + Math.floor(Math.random() * 2800),\n };\n return [...prev.slice(-40), item];\n });\n cursorRef.current += 1;\n }, []);\n\n const send = useCallback(\n (text: string, color?: string, sendOptions?: SendDanmakuOptions): DanmakuSendResult | null => {\n const trimmed = text.trim();\n if (!trimmed) {\n return null;\n }\n\n const { content, launchKind } = parseCommand(trimmed);\n const safeText = content.slice(0, DANMAKU_MAX_LENGTH);\n if (!safeText) {\n return null;\n }\n\n const message: DanmakuMessage = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,\n text: safeText,\n color,\n timestamp: Date.now(),\n };\n\n const optimistic = sendOptions?.optimistic ?? true;\n if (optimistic) {\n addIncoming(message);\n }\n\n options?.onSend?.(message);\n\n return {\n message,\n launchKind,\n };\n },\n [addIncoming, options]\n );\n\n return useMemo(\n () => ({\n items,\n send,\n addIncoming,\n removeItem,\n }),\n [addIncoming, items, removeItem, send]\n );\n}\n\nfunction parseCommand(text: string): { content: string; launchKind?: FireworkKind } {\n if (text.startsWith('/miku ')) {\n return { launchKind: 'miku', content: text.replace('/miku ', '').trim() };\n }\n if (text === '/miku') {\n return { launchKind: 'miku', content: 'MIKU!' };\n }\n if (text.startsWith('/avatar ')) {\n return { launchKind: 'avatar', content: text.replace('/avatar ', '').trim() };\n }\n if (text === '/avatar') {\n return { launchKind: 'avatar', content: 'Avatar Firework!' };\n }\n if (text.startsWith('/normal ')) {\n return { launchKind: 'normal', content: text.replace('/normal ', '').trim() };\n }\n if (text === '/normal') {\n return { launchKind: 'normal', content: 'Fireworks!' };\n }\n return { content: text };\n}\n","import * as THREE from 'three';\n\nexport function createCircularSpriteTexture(): THREE.CanvasTexture {\n const size = 64;\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return new THREE.CanvasTexture(canvas);\n }\n\n const center = size / 2;\n const gradient = ctx.createRadialGradient(center, center, 2, center, center, center);\n gradient.addColorStop(0, 'rgba(255,255,255,1)');\n gradient.addColorStop(0.4, 'rgba(255,255,255,0.9)');\n gradient.addColorStop(1, 'rgba(255,255,255,0)');\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, size, size);\n\n const texture = new THREE.CanvasTexture(canvas);\n texture.needsUpdate = true;\n return texture;\n}\n","import { MIKU_PALETTE, NORMAL_PALETTE } from '../constants';\nimport type { FireworkKind } from '../types';\n\nexport function pickPalette(kind: FireworkKind): string[] {\n if (kind === 'miku') {\n return MIKU_PALETTE;\n }\n return NORMAL_PALETTE;\n}\n\nexport function pickRandomColor(colors: string[]): string {\n if (colors.length === 0) {\n return '#ffffff';\n }\n const index = Math.floor(Math.random() * colors.length);\n return colors[index] || '#ffffff';\n}\n","export async function sampleAvatarPoints(\n avatarUrl: string,\n sampleStep = 4,\n maxPoints = 500\n): Promise<Array<{ x: number; y: number; brightness: number }>> {\n const image = await loadImage(avatarUrl);\n const size = 64;\n const canvas = document.createElement('canvas');\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return [];\n }\n\n ctx.clearRect(0, 0, size, size);\n ctx.drawImage(image, 0, 0, size, size);\n\n const { data } = ctx.getImageData(0, 0, size, size);\n const points: Array<{ x: number; y: number; brightness: number }> = [];\n\n for (let y = 0; y < size; y += sampleStep) {\n for (let x = 0; x < size; x += sampleStep) {\n const index = (y * size + x) * 4;\n const alpha = data[index + 3] ?? 0;\n if (alpha < 24) {\n continue;\n }\n const r = data[index] ?? 0;\n const g = data[index + 1] ?? 0;\n const b = data[index + 2] ?? 0;\n const brightness = (r + g + b) / (3 * 255);\n points.push({ x: x - size / 2, y: size / 2 - y, brightness });\n if (points.length >= maxPoints) {\n return points;\n }\n }\n }\n\n return points;\n}\n\nfunction loadImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const image = new window.Image();\n image.crossOrigin = 'anonymous';\n image.onload = () => resolve(image);\n image.onerror = () => reject(new Error('Failed to load avatar image.'));\n image.src = url;\n });\n}\n","import { sampleAvatarPoints } from '../../utils/avatarSprite';\nimport type { SeedParticle } from './normal';\n\nexport async function createAvatarSeeds(avatarUrl: string, fallbackColor: string): Promise<SeedParticle[]> {\n const points = await sampleAvatarPoints(avatarUrl);\n\n if (points.length === 0) {\n return [];\n }\n\n return points.map((point) => {\n const spread = 0.22;\n return {\n x: 0,\n y: 0,\n z: 0,\n vx: point.x * spread + (Math.random() - 0.5) * 2.4,\n vy: point.y * spread + Math.random() * 2.2,\n vz: (Math.random() - 0.5) * 3.5,\n life: 1.1 + point.brightness * 1.6,\n color: fallbackColor,\n };\n });\n}\n","import { MIKU_PALETTE } from '../../constants';\nimport { pickRandomColor } from '../../utils/colorPalettes';\nimport type { SeedParticle } from './normal';\n\nexport function createMikuSeeds(count: number): SeedParticle[] {\n const seeds: SeedParticle[] = [];\n\n for (let i = 0; i < count; i += 1) {\n const ratio = i / Math.max(count - 1, 1);\n const angle = ratio * Math.PI * 2 * 2;\n const radial = 7 + Math.random() * 9;\n\n const spiralBoost = 3 + Math.random() * 4;\n seeds.push({\n x: 0,\n y: 0,\n z: 0,\n vx: Math.cos(angle) * radial,\n vy: Math.sin(angle * 0.5) * spiralBoost + 7,\n vz: Math.sin(angle) * radial,\n life: 1.2 + Math.random() * 1.5,\n color: pickRandomColor(MIKU_PALETTE),\n });\n }\n\n return seeds;\n}\n","export interface SeedParticle {\n x: number;\n y: number;\n z: number;\n vx: number;\n vy: number;\n vz: number;\n life: number;\n color: string;\n}\n\nexport function createNormalSeeds(count: number, color: string): SeedParticle[] {\n const seeds: SeedParticle[] = [];\n for (let i = 0; i < count; i += 1) {\n const theta = Math.random() * Math.PI * 2;\n const phi = Math.acos(2 * Math.random() - 1);\n const speed = 8 + Math.random() * 12;\n seeds.push({\n x: 0,\n y: 0,\n z: 0,\n vx: speed * Math.sin(phi) * Math.cos(theta),\n vy: speed * Math.cos(phi),\n vz: speed * Math.sin(phi) * Math.sin(theta),\n life: 1 + Math.random() * 1.6,\n color,\n });\n }\n return seeds;\n}\n","import type { FireworkKind } from '../types';\nimport { pickPalette, pickRandomColor } from '../utils/colorPalettes';\nimport { createAvatarSeeds } from './patterns/avatar';\nimport { createMikuSeeds } from './patterns/miku';\nimport { createNormalSeeds, type SeedParticle } from './patterns/normal';\n\ninterface EmitOptions {\n kind: FireworkKind;\n count: number;\n color?: string;\n avatarUrl?: string;\n}\n\nexport async function createSeedParticles(options: EmitOptions): Promise<SeedParticle[]> {\n const palette = pickPalette(options.kind);\n const color = options.color ?? pickRandomColor(palette);\n\n if (options.kind === 'miku') {\n return createMikuSeeds(options.count);\n }\n\n if (options.kind === 'avatar' && options.avatarUrl) {\n const avatarSeeds = await createAvatarSeeds(options.avatarUrl, color);\n if (avatarSeeds.length > 0) {\n return avatarSeeds;\n }\n }\n\n return createNormalSeeds(options.count, color);\n}\n","export interface ParticleState {\n x: number;\n y: number;\n z: number;\n vx: number;\n vy: number;\n vz: number;\n life: number;\n maxLife: number;\n r: number;\n g: number;\n b: number;\n}\n\nexport class ParticlePool {\n private readonly pool: ParticleState[] = [];\n\n acquire(): ParticleState {\n const reused = this.pool.pop();\n if (reused) {\n return reused;\n }\n return {\n x: 0,\n y: 0,\n z: 0,\n vx: 0,\n vy: 0,\n vz: 0,\n life: 0,\n maxLife: 1,\n r: 1,\n g: 1,\n b: 1,\n };\n }\n\n release(particle: ParticleState): void {\n this.pool.push(particle);\n }\n}\n","export interface EngineDegradePolicy {\n shouldDegrade: boolean;\n recommendedParticleScale: number;\n}\n\nexport function evaluateDegradePolicy(fps: number): EngineDegradePolicy {\n if (fps < 24) {\n return { shouldDegrade: true, recommendedParticleScale: 0.65 };\n }\n if (fps < 34) {\n return { shouldDegrade: true, recommendedParticleScale: 0.82 };\n }\n return { shouldDegrade: false, recommendedParticleScale: 1 };\n}\n","import * as THREE from 'three';\nimport { DEFAULT_MAX_ACTIVE_FIREWORKS, DEFAULT_MAX_PARTICLES } from '../constants';\nimport type { FireworkEngineOptions, FireworkLaunchPayload } from '../types';\nimport { createCircularSpriteTexture } from '../utils/textureFactory';\nimport { createSeedParticles } from './emitters';\nimport { ParticlePool, type ParticleState } from './particlePool';\nimport { evaluateDegradePolicy } from './postfx';\n\ninterface Burst {\n id: string;\n points: THREE.Points;\n geometry: THREE.BufferGeometry;\n material: THREE.PointsMaterial;\n positions: Float32Array;\n colors: Float32Array;\n particles: ParticleState[];\n}\n\ninterface FireworksEngineInit {\n canvas: HTMLCanvasElement;\n container: HTMLElement;\n options?: FireworkEngineOptions;\n}\n\nexport class FireworksEngine {\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n private renderer: THREE.WebGLRenderer;\n private readonly canvas: HTMLCanvasElement;\n private readonly container: HTMLElement;\n private readonly pool = new ParticlePool();\n private readonly bursts: Burst[] = [];\n private readonly maxParticles: number;\n private readonly maxActiveFireworks: number;\n private readonly onError?: (error: Error) => void;\n private readonly onFpsReport?: (fps: number) => void;\n\n private animationFrameId: number | null = null;\n private lastTick = 0;\n private fpsWindow = { frames: 0, elapsed: 0, fps: 60, particleScale: 1 };\n\n private resizeObserver: ResizeObserver | null = null;\n private spriteTexture: THREE.Texture;\n\n constructor(init: FireworksEngineInit) {\n this.canvas = init.canvas;\n this.container = init.container;\n this.maxParticles = init.options?.maxParticles ?? DEFAULT_MAX_PARTICLES;\n this.maxActiveFireworks = init.options?.maxActiveFireworks ?? DEFAULT_MAX_ACTIVE_FIREWORKS;\n this.onError = init.options?.onError;\n this.onFpsReport = init.options?.onFpsReport;\n\n this.scene = new THREE.Scene();\n this.scene.background = new THREE.Color('#060816');\n\n this.camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);\n this.camera.position.set(0, 0, 45);\n\n this.renderer = new THREE.WebGLRenderer({\n canvas: this.canvas,\n alpha: true,\n antialias: true,\n powerPreference: 'high-performance',\n });\n this.renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));\n\n this.spriteTexture = createCircularSpriteTexture();\n\n this.attachResizeObserver();\n this.resize();\n }\n\n start(): void {\n if (this.animationFrameId != null) {\n return;\n }\n this.lastTick = window.performance.now();\n this.loop();\n }\n\n stop(): void {\n if (this.animationFrameId != null) {\n window.cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = null;\n }\n }\n\n async launch(payload: FireworkLaunchPayload): Promise<void> {\n try {\n this.enforceBurstCap();\n\n const particleBudget = Math.max(80, Math.floor(280 * this.fpsWindow.particleScale));\n const seeds = await createSeedParticles({\n kind: payload.kind,\n count: particleBudget,\n color: payload.color,\n avatarUrl: payload.avatarUrl,\n });\n\n if (seeds.length === 0) {\n return;\n }\n\n const launchPosition = payload.position ?? {\n x: (Math.random() - 0.5) * 18,\n y: -4 + Math.random() * 12,\n z: (Math.random() - 0.5) * 4,\n };\n\n const particles: ParticleState[] = [];\n const positions = new Float32Array(seeds.length * 3);\n const colors = new Float32Array(seeds.length * 3);\n\n const colorHelper = new THREE.Color();\n for (let i = 0; i < seeds.length; i += 1) {\n const seed = seeds[i];\n if (!seed) {\n continue;\n }\n const particle = this.pool.acquire();\n particle.x = launchPosition.x + seed.x;\n particle.y = launchPosition.y + seed.y;\n particle.z = launchPosition.z + seed.z;\n particle.vx = seed.vx;\n particle.vy = seed.vy;\n particle.vz = seed.vz;\n particle.life = seed.life;\n particle.maxLife = seed.life;\n\n colorHelper.set(seed.color);\n particle.r = colorHelper.r;\n particle.g = colorHelper.g;\n particle.b = colorHelper.b;\n\n particles.push(particle);\n\n const offset = i * 3;\n positions[offset] = particle.x;\n positions[offset + 1] = particle.y;\n positions[offset + 2] = particle.z;\n colors[offset] = particle.r;\n colors[offset + 1] = particle.g;\n colors[offset + 2] = particle.b;\n }\n\n if (this.totalParticleCount() + particles.length > this.maxParticles) {\n this.releaseParticles(particles);\n return;\n }\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n\n const material = new THREE.PointsMaterial({\n size: payload.kind === 'miku' ? 0.42 : 0.36,\n vertexColors: true,\n map: this.spriteTexture,\n transparent: true,\n opacity: 1,\n depthWrite: false,\n blending: THREE.AdditiveBlending,\n });\n\n const points = new THREE.Points(geometry, material);\n this.scene.add(points);\n\n const burst: Burst = {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n points,\n geometry,\n material,\n positions,\n colors,\n particles,\n };\n\n this.bursts.push(burst);\n } catch (error) {\n this.onError?.(error instanceof Error ? error : new Error('Failed to launch firework.'));\n }\n }\n\n dispose(): void {\n this.stop();\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n\n for (const burst of this.bursts) {\n this.destroyBurst(burst);\n }\n this.bursts.length = 0;\n\n this.spriteTexture.dispose();\n this.renderer.dispose();\n }\n\n private loop = (): void => {\n const now = window.performance.now();\n const dt = Math.min((now - this.lastTick) / 1000, 0.05);\n this.lastTick = now;\n\n this.update(dt);\n this.renderer.render(this.scene, this.camera);\n\n this.animationFrameId = window.requestAnimationFrame(this.loop);\n };\n\n private update(dt: number): void {\n const gravity = -8.8;\n\n for (let b = this.bursts.length - 1; b >= 0; b -= 1) {\n const burst = this.bursts[b];\n if (!burst) {\n continue;\n }\n\n let alive = 0;\n for (let i = 0; i < burst.particles.length; i += 1) {\n const particle = burst.particles[i];\n if (!particle) {\n continue;\n }\n\n particle.life -= dt;\n if (particle.life <= 0) {\n continue;\n }\n\n particle.vx *= 0.992;\n particle.vy = particle.vy * 0.992 + gravity * dt;\n particle.vz *= 0.992;\n\n particle.x += particle.vx * dt;\n particle.y += particle.vy * dt;\n particle.z += particle.vz * dt;\n\n const idx = i * 3;\n burst.positions[idx] = particle.x;\n burst.positions[idx + 1] = particle.y;\n burst.positions[idx + 2] = particle.z;\n\n const alpha = Math.max(particle.life / particle.maxLife, 0);\n burst.colors[idx] = particle.r * alpha;\n burst.colors[idx + 1] = particle.g * alpha;\n burst.colors[idx + 2] = particle.b * alpha;\n\n alive += 1;\n }\n\n const positionAttr = burst.geometry.getAttribute('position') as THREE.BufferAttribute;\n const colorAttr = burst.geometry.getAttribute('color') as THREE.BufferAttribute;\n positionAttr.needsUpdate = true;\n colorAttr.needsUpdate = true;\n\n burst.material.opacity = Math.min(1, 0.22 + alive / Math.max(burst.particles.length, 1));\n\n if (alive === 0) {\n this.bursts.splice(b, 1);\n this.destroyBurst(burst);\n }\n }\n\n this.updateFpsStats(dt);\n }\n\n private updateFpsStats(dt: number): void {\n this.fpsWindow.frames += 1;\n this.fpsWindow.elapsed += dt;\n\n if (this.fpsWindow.elapsed < 0.6) {\n return;\n }\n\n const fps = this.fpsWindow.frames / this.fpsWindow.elapsed;\n this.fpsWindow.fps = fps;\n\n const policy = evaluateDegradePolicy(fps);\n this.fpsWindow.particleScale = policy.recommendedParticleScale;\n\n this.onFpsReport?.(Math.round(fps));\n\n this.fpsWindow.frames = 0;\n this.fpsWindow.elapsed = 0;\n }\n\n private totalParticleCount(): number {\n return this.bursts.reduce((sum, burst) => sum + burst.particles.length, 0);\n }\n\n private enforceBurstCap(): void {\n while (this.bursts.length >= this.maxActiveFireworks) {\n const burst = this.bursts.shift();\n if (!burst) {\n break;\n }\n this.destroyBurst(burst);\n }\n }\n\n private destroyBurst(burst: Burst): void {\n this.scene.remove(burst.points);\n burst.geometry.dispose();\n burst.material.dispose();\n this.releaseParticles(burst.particles);\n }\n\n private releaseParticles(particles: ParticleState[]): void {\n for (const particle of particles) {\n this.pool.release(particle);\n }\n }\n\n private attachResizeObserver(): void {\n this.resizeObserver = new ResizeObserver(() => this.resize());\n this.resizeObserver.observe(this.container);\n }\n\n private resize(): void {\n const width = Math.max(1, this.container.clientWidth);\n const height = Math.max(1, this.container.clientHeight);\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(width, height, false);\n }\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FireworksEngine } from '../engine/FireworksEngine';\nimport type { FireworkEngineOptions, FireworkLaunchPayload } from '../types';\n\nexport interface UseFireworksEngineOptions extends FireworkEngineOptions {\n onLaunch?: (payload: FireworkLaunchPayload) => void;\n}\n\nexport function useFireworksEngine(options?: UseFireworksEngineOptions) {\n const containerRef = useRef<HTMLDivElement>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const engineRef = useRef<FireworksEngine | null>(null);\n const pendingLaunchesRef = useRef<FireworkLaunchPayload[]>([]);\n const [fps, setFps] = useState(60);\n const [engineReady, setEngineReady] = useState(false);\n const [pendingLaunchCount, setPendingLaunchCount] = useState(0);\n const { maxParticles, maxActiveFireworks, onError, onFpsReport, onLaunch } = options || {};\n\n useEffect(() => {\n if (!containerRef.current || !canvasRef.current) {\n return;\n }\n\n const engine = new FireworksEngine({\n container: containerRef.current,\n canvas: canvasRef.current,\n options: {\n maxParticles,\n maxActiveFireworks,\n onError,\n onFpsReport: (nextFps) => {\n setFps(nextFps);\n onFpsReport?.(nextFps);\n },\n },\n });\n\n engine.start();\n engineRef.current = engine;\n setEngineReady(true);\n if (pendingLaunchesRef.current.length > 0) {\n const pending = [...pendingLaunchesRef.current];\n pendingLaunchesRef.current = [];\n setPendingLaunchCount(0);\n pending.forEach((payload) => {\n void engine.launch(payload);\n });\n }\n\n return () => {\n engineRef.current?.dispose();\n engineRef.current = null;\n pendingLaunchesRef.current = [];\n setPendingLaunchCount(0);\n setEngineReady(false);\n };\n }, [maxParticles, maxActiveFireworks, onError, onFpsReport]);\n\n const launch = useCallback(\n (payload: FireworkLaunchPayload) => {\n if (!engineRef.current) {\n pendingLaunchesRef.current.push(payload);\n if (pendingLaunchesRef.current.length > 120) {\n pendingLaunchesRef.current.splice(0, pendingLaunchesRef.current.length - 120);\n }\n setPendingLaunchCount(pendingLaunchesRef.current.length);\n } else {\n void engineRef.current.launch(payload);\n }\n onLaunch?.(payload);\n },\n [onLaunch]\n );\n\n const api = useMemo(\n () => ({\n containerRef,\n canvasRef,\n launch,\n fps,\n engineReady,\n pendingLaunchCount,\n }),\n [engineReady, fps, launch, pendingLaunchCount]\n );\n\n return api;\n}\n","import type {\n FireworkKind,\n FireworkLaunchPayload,\n FireworksRealtimeConfig,\n FireworksRealtimeState,\n FireworksRealtimeUser,\n} from '../types';\n\ninterface RealtimeDanmakuEvent {\n id: string;\n roomId: string;\n text: string;\n color?: string;\n kind?: FireworkKind;\n user: FireworksRealtimeUser;\n timestamp: number;\n}\n\ninterface RealtimeFireworkEvent {\n id: string;\n roomId: string;\n payload: FireworkLaunchPayload;\n user: FireworksRealtimeUser;\n timestamp: number;\n}\n\ntype ClientMessage =\n | {\n type: 'join';\n roomId: string;\n user: FireworksRealtimeUser;\n }\n | {\n type: 'leave';\n }\n | {\n type: 'danmaku.send';\n payload: {\n text: string;\n color?: string;\n kind?: FireworkKind;\n };\n }\n | {\n type: 'firework.launch';\n payload: FireworkLaunchPayload;\n };\n\ntype ServerMessage =\n | {\n type: 'joined';\n roomId: string;\n onlineCount: number;\n self: FireworksRealtimeUser;\n }\n | {\n type: 'room.snapshot';\n roomId: string;\n users: FireworksRealtimeUser[];\n danmakuHistory: RealtimeDanmakuEvent[];\n fireworkHistory: RealtimeFireworkEvent[];\n }\n | {\n type: 'room.user_joined';\n roomId: string;\n user: FireworksRealtimeUser;\n onlineCount: number;\n }\n | {\n type: 'room.user_left';\n roomId: string;\n userId: string;\n onlineCount: number;\n }\n | {\n type: 'danmaku.broadcast';\n roomId: string;\n event: RealtimeDanmakuEvent;\n }\n | {\n type: 'firework.broadcast';\n roomId: string;\n event: RealtimeFireworkEvent;\n }\n | {\n type: 'error';\n code: string;\n message: string;\n }\n | {\n type: 'pong';\n ts: number;\n };\n\nexport interface WebSocketTransportCallbacks {\n onStateChange?: (state: FireworksRealtimeState) => void;\n onDanmakuBroadcast?: (event: RealtimeDanmakuEvent) => void;\n onFireworkBroadcast?: (event: RealtimeFireworkEvent) => void;\n onSnapshot?: (snapshot: Extract<ServerMessage, { type: 'room.snapshot' }>) => void;\n onError?: (error: Error) => void;\n}\n\nexport class WebSocketTransport {\n private socket: WebSocket | null = null;\n private reconnectTimer: number | null = null;\n private isManualClose = false;\n private readonly pendingQueue: ClientMessage[] = [];\n private readonly config: FireworksRealtimeConfig;\n private readonly callbacks: WebSocketTransportCallbacks;\n private state: FireworksRealtimeState;\n\n constructor(config: FireworksRealtimeConfig, callbacks?: WebSocketTransportCallbacks) {\n this.config = config;\n this.callbacks = callbacks || {};\n this.state = {\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId: config.roomId,\n };\n }\n\n connect(): void {\n if (this.socket && (this.socket.readyState === window.WebSocket.OPEN || this.socket.readyState === window.WebSocket.CONNECTING)) {\n return;\n }\n\n this.isManualClose = false;\n\n try {\n this.socket = this.config.protocols\n ? new window.WebSocket(this.config.serverUrl, this.config.protocols)\n : new window.WebSocket(this.config.serverUrl);\n this.socket.binaryType = 'arraybuffer';\n } catch {\n this.callbacks.onError?.(new Error('Failed to create WebSocket connection.'));\n return;\n }\n\n this.socket.onopen = () => {\n this.updateState({ connected: true, joined: false });\n this.send({\n type: 'join',\n roomId: this.config.roomId,\n user: this.config.user,\n });\n };\n\n this.socket.onmessage = (event) => {\n const parsed = parseServerMessage(event.data);\n if (!parsed) {\n return;\n }\n this.handleServerMessage(parsed);\n };\n\n this.socket.onerror = () => {\n this.callbacks.onError?.(new Error('WebSocket transport error.'));\n };\n\n this.socket.onclose = () => {\n this.updateState({ connected: false, joined: false });\n this.scheduleReconnect();\n };\n }\n\n disconnect(): void {\n this.isManualClose = true;\n this.pendingQueue.length = 0;\n if (this.reconnectTimer != null) {\n window.clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (!this.socket) {\n return;\n }\n\n this.send({ type: 'leave' });\n this.socket.close();\n this.socket = null;\n }\n\n sendDanmaku(payload: { text: string; color?: string; kind?: FireworkKind }): void {\n this.send({\n type: 'danmaku.send',\n payload,\n });\n }\n\n sendFirework(payload: FireworkLaunchPayload): void {\n this.send({\n type: 'firework.launch',\n payload,\n });\n }\n\n getState(): FireworksRealtimeState {\n return this.state;\n }\n\n private send(message: ClientMessage): void {\n if (!this.socket || this.socket.readyState !== window.WebSocket.OPEN) {\n if (message.type === 'danmaku.send' || message.type === 'firework.launch') {\n this.pendingQueue.push(message);\n }\n return;\n }\n\n if ((message.type === 'danmaku.send' || message.type === 'firework.launch') && !this.state.joined) {\n this.pendingQueue.push(message);\n return;\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n private updateState(partial: Partial<FireworksRealtimeState>): void {\n this.state = {\n ...this.state,\n ...partial,\n };\n this.callbacks.onStateChange?.(this.state);\n }\n\n private handleServerMessage(message: ServerMessage): void {\n if (message.type === 'joined') {\n this.updateState({ roomId: message.roomId, onlineCount: message.onlineCount, joined: true });\n this.flushPendingQueue();\n return;\n }\n\n if (message.type === 'room.user_joined' || message.type === 'room.user_left') {\n this.updateState({ onlineCount: message.onlineCount, roomId: message.roomId, joined: true });\n this.flushPendingQueue();\n return;\n }\n\n if (message.type === 'room.snapshot') {\n this.updateState({ roomId: message.roomId, onlineCount: message.users.length, joined: true });\n this.flushPendingQueue();\n this.callbacks.onSnapshot?.(message);\n return;\n }\n\n if (message.type === 'danmaku.broadcast') {\n if (!this.state.joined) {\n this.updateState({ joined: true, roomId: message.roomId });\n this.flushPendingQueue();\n }\n this.callbacks.onDanmakuBroadcast?.(message.event);\n return;\n }\n\n if (message.type === 'firework.broadcast') {\n if (!this.state.joined) {\n this.updateState({ joined: true, roomId: message.roomId });\n this.flushPendingQueue();\n }\n this.callbacks.onFireworkBroadcast?.(message.event);\n return;\n }\n\n if (message.type === 'error') {\n this.callbacks.onError?.(new Error(`${message.code}: ${message.message}`));\n }\n }\n\n private scheduleReconnect(): void {\n const reconnect = this.config.reconnect ?? true;\n if (this.isManualClose || !reconnect) {\n return;\n }\n\n if (this.reconnectTimer != null) {\n return;\n }\n\n const delay = this.config.reconnectIntervalMs ?? 1500;\n this.reconnectTimer = window.setTimeout(() => {\n this.reconnectTimer = null;\n this.connect();\n }, delay);\n }\n\n private flushPendingQueue(): void {\n if (!this.socket || this.socket.readyState !== window.WebSocket.OPEN || !this.state.joined) {\n return;\n }\n\n while (this.pendingQueue.length > 0) {\n const message = this.pendingQueue.shift();\n if (!message) {\n break;\n }\n this.socket.send(JSON.stringify(message));\n }\n }\n}\n\nfunction parseServerMessage(raw: unknown): ServerMessage | null {\n const text = decodeMessage(raw);\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as ServerMessage;\n } catch {\n return null;\n }\n}\n\nfunction decodeMessage(raw: unknown): string | null {\n if (typeof raw === 'string') {\n return raw;\n }\n\n if (raw instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(raw));\n }\n\n if (ArrayBuffer.isView(raw)) {\n return new TextDecoder().decode(raw);\n }\n\n return null;\n}\n","'use client';\n\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { WebSocketTransport } from '../client/WebSocketTransport';\nimport type {\n FireworkLaunchPayload,\n FireworksRealtimeConfig,\n FireworksRealtimeState,\n FireworkKind,\n} from '../types';\n\ninterface UseFireworksRealtimeOptions {\n config?: FireworksRealtimeConfig;\n enabled?: boolean;\n onDanmakuBroadcast?: (event: {\n text: string;\n color?: string;\n kind?: FireworkKind;\n userId: string;\n timestamp: number;\n id: string;\n }) => void;\n onFireworkBroadcast?: (event: {\n id: string;\n payload: FireworkLaunchPayload;\n userId: string;\n timestamp: number;\n }) => void;\n onSnapshot?: (snapshot: {\n roomId: string;\n danmakuHistory: Array<{\n id: string;\n text: string;\n color?: string;\n kind?: FireworkKind;\n userId: string;\n timestamp: number;\n }>;\n fireworkHistory: Array<{\n id: string;\n payload: FireworkLaunchPayload;\n userId: string;\n timestamp: number;\n }>;\n }) => void;\n onError?: (error: Error) => void;\n onStateChange?: (state: FireworksRealtimeState) => void;\n}\n\nexport function useFireworksRealtime(options: UseFireworksRealtimeOptions) {\n const { config, enabled, onDanmakuBroadcast, onFireworkBroadcast, onSnapshot, onError, onStateChange } = options;\n const transportRef = useRef<WebSocketTransport | null>(null);\n const callbackRef = useRef({\n onDanmakuBroadcast,\n onFireworkBroadcast,\n onSnapshot,\n onError,\n onStateChange,\n });\n const serverUrl = config?.serverUrl ?? '';\n const roomId = config?.roomId ?? '';\n const userId = config?.user.userId ?? '';\n const nickname = config?.user.nickname ?? '';\n const avatarUrl = config?.user.avatarUrl ?? '';\n const reconnect = config?.reconnect ?? true;\n const reconnectIntervalMs = config?.reconnectIntervalMs ?? 1500;\n const [state, setState] = useState<FireworksRealtimeState>({\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId,\n });\n\n useEffect(() => {\n callbackRef.current = {\n onDanmakuBroadcast,\n onFireworkBroadcast,\n onSnapshot,\n onError,\n onStateChange,\n };\n }, [onDanmakuBroadcast, onError, onFireworkBroadcast, onSnapshot, onStateChange]);\n\n const normalizedConfig = useMemo(() => {\n if (!serverUrl || !roomId || !userId) {\n return undefined;\n }\n const protocols = Array.isArray(config?.protocols)\n ? [...config.protocols]\n : config?.protocols;\n\n return {\n serverUrl,\n roomId,\n user: {\n userId,\n nickname: nickname || undefined,\n avatarUrl: avatarUrl || undefined,\n },\n protocols,\n reconnect,\n reconnectIntervalMs,\n } satisfies FireworksRealtimeConfig;\n }, [avatarUrl, config?.protocols, nickname, reconnect, reconnectIntervalMs, roomId, serverUrl, userId]);\n\n useEffect(() => {\n if (!enabled || !normalizedConfig) {\n transportRef.current?.disconnect();\n transportRef.current = null;\n setState({\n connected: false,\n joined: false,\n onlineCount: 0,\n roomId: normalizedConfig?.roomId,\n });\n return;\n }\n\n const transport = new WebSocketTransport(normalizedConfig, {\n onStateChange: (nextState) => {\n setState(nextState);\n callbackRef.current.onStateChange?.(nextState);\n },\n onDanmakuBroadcast: (event) => {\n callbackRef.current.onDanmakuBroadcast?.({\n id: event.id,\n text: event.text,\n color: event.color,\n kind: event.kind,\n userId: event.user.userId,\n timestamp: event.timestamp,\n });\n },\n onFireworkBroadcast: (event) => {\n callbackRef.current.onFireworkBroadcast?.({\n id: event.id,\n payload: event.payload,\n userId: event.user.userId,\n timestamp: event.timestamp,\n });\n },\n onSnapshot: (snapshot) => {\n callbackRef.current.onSnapshot?.({\n roomId: snapshot.roomId,\n danmakuHistory: snapshot.danmakuHistory.map((item) => ({\n id: item.id,\n text: item.text,\n color: item.color,\n kind: item.kind,\n userId: item.user.userId,\n timestamp: item.timestamp,\n })),\n fireworkHistory: snapshot.fireworkHistory.map((item) => ({\n id: item.id,\n payload: item.payload,\n userId: item.user.userId,\n timestamp: item.timestamp,\n })),\n });\n },\n onError: (error) => {\n callbackRef.current.onError?.(error);\n },\n });\n\n transport.connect();\n transportRef.current = transport;\n\n return () => {\n transport.disconnect();\n if (transportRef.current === transport) {\n transportRef.current = null;\n }\n };\n }, [enabled, normalizedConfig]);\n\n return useMemo(\n () => ({\n state,\n sendDanmaku: (payload: { text: string; color?: string; kind?: FireworkKind }) => {\n transportRef.current?.sendDanmaku(payload);\n },\n sendFirework: (payload: FireworkLaunchPayload) => {\n transportRef.current?.sendFirework(payload);\n },\n }),\n [state]\n );\n}\n","'use client';\n\nimport React, { useMemo, useRef, useState } from 'react';\nimport { DanmakuPanel } from './DanmakuPanel';\nimport { FireworksCanvas } from './FireworksCanvas';\nimport { FireworksControlPanel } from './FireworksControlPanel';\nimport { useDanmakuController } from '../hooks/useDanmakuController';\nimport { useFireworksEngine } from '../hooks/useFireworksEngine';\nimport { useFireworksRealtime } from '../hooks/useFireworksRealtime';\nimport type { FireworkKind, MikuFireworks3DProps } from '../types';\n\nexport function MikuFireworks3D({\n width = '100%',\n height = 520,\n className,\n defaultKind = 'normal',\n autoLaunchOnDanmaku = true,\n maxParticles,\n maxActiveFireworks,\n defaultAvatarUrl = '',\n onLaunch,\n onDanmakuSend,\n onError,\n onFpsReport,\n onRealtimeStateChange,\n realtime,\n}: MikuFireworks3DProps) {\n const [selectedKind, setSelectedKind] = useState<FireworkKind>(defaultKind);\n const [avatarUrl, setAvatarUrl] = useState(defaultAvatarUrl);\n const [autoLaunch, setAutoLaunch] = useState(autoLaunchOnDanmaku);\n const seenDanmakuIdsRef = useRef<Set<string>>(new Set());\n const seenFireworkIdsRef = useRef<Set<string>>(new Set());\n\n const {\n containerRef,\n canvasRef,\n launch,\n fps,\n engineReady,\n pendingLaunchCount,\n } = useFireworksEngine({\n maxParticles,\n maxActiveFireworks,\n onLaunch,\n onError,\n onFpsReport,\n });\n\n const { items, send, addIncoming, removeItem } = useDanmakuController({\n onSend: onDanmakuSend,\n });\n\n const realtimeEnabled = Boolean(realtime && (realtime.enabled ?? true));\n\n const logSync = (phase: string, eventId: string, extra?: Record<string, unknown>) => {\n const payload = {\n phase,\n eventId,\n engineReady,\n pendingLaunchCount,\n connected: realtimeApi.state.connected,\n joined: realtimeApi.state.joined,\n ...extra,\n };\n globalThis.console?.log('[MikuFireworks3D][sync_event]', payload);\n };\n\n const realtimeApi = useFireworksRealtime({\n enabled: realtimeEnabled,\n config: realtime,\n onStateChange: onRealtimeStateChange,\n onError,\n onDanmakuBroadcast: (event) => {\n if (seenDanmakuIdsRef.current.has(event.id)) {\n return;\n }\n seenDanmakuIdsRef.current.add(event.id);\n addIncoming({\n id: event.id,\n userId: event.userId,\n text: event.text,\n color: event.color,\n timestamp: event.timestamp,\n });\n },\n onFireworkBroadcast: (event) => {\n logSync('firework.broadcast.received', event.id, { kind: event.payload.kind });\n if (seenFireworkIdsRef.current.has(event.id)) {\n logSync('firework.broadcast.deduped', event.id);\n return;\n }\n seenFireworkIdsRef.current.add(event.id);\n launch(event.payload);\n logSync('firework.broadcast.dispatched', event.id, { kind: event.payload.kind });\n },\n onSnapshot: (snapshot) => {\n for (const danmaku of snapshot.danmakuHistory) {\n if (seenDanmakuIdsRef.current.has(danmaku.id)) {\n continue;\n }\n seenDanmakuIdsRef.current.add(danmaku.id);\n addIncoming({\n id: danmaku.id,\n userId: danmaku.userId,\n text: danmaku.text,\n color: danmaku.color,\n timestamp: danmaku.timestamp,\n });\n }\n for (const firework of snapshot.fireworkHistory) {\n logSync('firework.snapshot.received', firework.id, { kind: firework.payload.kind });\n if (seenFireworkIdsRef.current.has(firework.id)) {\n logSync('firework.snapshot.deduped', firework.id);\n continue;\n }\n seenFireworkIdsRef.current.add(firework.id);\n launch(firework.payload);\n logSync('firework.snapshot.dispatched', firework.id, { kind: firework.payload.kind });\n }\n },\n });\n\n const handleLaunch = (kind: FireworkKind) => {\n const payload = {\n kind,\n avatarUrl: kind === 'avatar' ? avatarUrl || undefined : undefined,\n };\n\n if (realtimeEnabled) {\n realtimeApi.sendFirework(payload);\n return;\n }\n\n launch(payload);\n };\n\n const handleSendDanmaku = (text: string) => {\n const result = send(text, undefined, {\n optimistic: !realtimeEnabled,\n });\n if (!result) {\n return;\n }\n\n const launchKind = result.launchKind ?? selectedKind;\n if (realtimeEnabled) {\n realtimeApi.sendDanmaku({\n text: result.message.text,\n color: result.message.color,\n kind: result.launchKind,\n });\n\n if (autoLaunch) {\n realtimeApi.sendFirework({\n kind: launchKind,\n avatarUrl: launchKind === 'avatar' ? avatarUrl || undefined : undefined,\n message: result.message,\n });\n }\n return;\n }\n\n if (autoLaunch || result.launchKind) {\n launch({\n kind: launchKind,\n avatarUrl: launchKind === 'avatar' ? avatarUrl || undefined : undefined,\n message: result.message,\n });\n }\n };\n\n const containerStyle = useMemo<React.CSSProperties>(\n () => ({\n width,\n height,\n minHeight: 360,\n }),\n [height, width]\n );\n\n return (\n <div className={`mx-auto flex w-full max-w-5xl flex-col gap-3 ${className || ''}`}>\n <div ref={containerRef} className=\"relative overflow-hidden rounded-2xl border border-slate-700\" style={containerStyle}>\n <FireworksCanvas canvasRef={canvasRef} />\n\n <div className=\"pointer-events-none absolute inset-0 overflow-hidden\">\n {items.map((item) => (\n <div\n key={item.id}\n onAnimationEnd={() => removeItem(item.id)}\n className=\"absolute right-[-30%] whitespace-nowrap text-sm font-semibold text-white drop-shadow\"\n style={{\n top: `${8 + item.track * 11}%`,\n color: item.color || '#ffffff',\n animation: `sa2kit-danmaku-move ${item.durationMs}ms linear forwards`,\n }}\n >\n {item.text}\n </div>\n ))}\n </div>\n </div>\n\n <FireworksControlPanel\n selectedKind={selectedKind}\n onKindChange={setSelectedKind}\n autoLaunchOnDanmaku={autoLaunch}\n onAutoLaunchChange={setAutoLaunch}\n avatarUrl={avatarUrl}\n onAvatarUrlChange={setAvatarUrl}\n onLaunch={() => handleLaunch(selectedKind)}\n fps={fps}\n realtimeConnected={realtimeEnabled ? realtimeApi.state.connected : undefined}\n onlineCount={realtimeEnabled ? realtimeApi.state.onlineCount : undefined}\n />\n\n <DanmakuPanel onSend={handleSendDanmaku} />\n\n <style>{`\\n @keyframes sa2kit-danmaku-move {\\n 0% {\\n transform: translateX(0);\\n opacity: 1;\\n }\\n 100% {\\n transform: translateX(-160vw);\\n opacity: 0.92;\\n }\\n }\\n `}</style>\n </div>\n );\n}\n","import type { RefObject } from 'react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type {\n ScreenReceiverJoinedMessage,\n ScreenReceiverPeerLeftMessage,\n ScreenReceiverRoomStateMessage,\n} from './types';\n\nconst DEFAULT_STUN_SERVER: RTCIceServer = { urls: 'stun:stun.l.google.com:19302' };\n\nexport interface ScreenReceiverLogEntry {\n id: number;\n text: string;\n}\n\nexport interface UseScreenReceiverOptions {\n wsUrl: string;\n roomId: string;\n iceServers?: RTCIceServer[];\n maxLogs?: number;\n}\n\nexport interface UseScreenReceiverReturn {\n connect: () => Promise<void>;\n disconnect: () => void;\n clearLogs: () => void;\n logs: ScreenReceiverLogEntry[];\n isConnected: boolean;\n connectionState: RTCPeerConnectionState | 'idle';\n iceConnectionState: RTCIceConnectionState | 'idle';\n videoRef: RefObject<HTMLVideoElement>;\n stream: MediaStream | null;\n}\n\ntype PeerContext = {\n ws?: WebSocket;\n pc?: RTCPeerConnection;\n pendingCandidates: RTCIceCandidateInit[];\n selfPeerId?: string;\n publisherPeerId?: string;\n};\n\nfunction parseMessage(payload: MessageEvent['data']): Record<string, any> | null {\n try {\n if (typeof payload === 'string') return JSON.parse(payload);\n if (payload instanceof ArrayBuffer) return JSON.parse(new TextDecoder().decode(payload));\n return JSON.parse(String(payload));\n } catch {\n return null;\n }\n}\n\nexport function useScreenReceiver(options: UseScreenReceiverOptions): UseScreenReceiverReturn {\n const { wsUrl, roomId, iceServers = [DEFAULT_STUN_SERVER], maxLogs = 80 } = options;\n const [logs, setLogs] = useState<ScreenReceiverLogEntry[]>([]);\n const [isConnected, setIsConnected] = useState(false);\n const [connectionState, setConnectionState] = useState<RTCPeerConnectionState | 'idle'>('idle');\n const [iceConnectionState, setIceConnectionState] = useState<RTCIceConnectionState | 'idle'>('idle');\n const [stream, setStream] = useState<MediaStream | null>(null);\n const logIdRef = useRef(0);\n const peerRef = useRef<PeerContext>({ pendingCandidates: [] });\n const videoRef = useRef<HTMLVideoElement>(null);\n\n const appendLog = useCallback(\n (text: string) => {\n logIdRef.current += 1;\n setLogs((prev) => [...prev, { id: logIdRef.current, text }].slice(-maxLogs));\n },\n [maxLogs],\n );\n\n const disconnect = useCallback(() => {\n peerRef.current.ws?.close();\n peerRef.current.pc?.close();\n peerRef.current = { pendingCandidates: [] };\n setIsConnected(false);\n setConnectionState('idle');\n setIceConnectionState('idle');\n setStream(null);\n }, []);\n\n const connect = useCallback(async () => {\n disconnect();\n\n const normalizedWsUrl = wsUrl.trim();\n const normalizedRoomId = roomId.trim();\n if (!normalizedWsUrl) {\n appendLog('ws url is empty');\n return;\n }\n if (!normalizedRoomId) {\n appendLog('room id is empty');\n return;\n }\n\n appendLog(`connecting: ${normalizedWsUrl}`);\n\n let ws: WebSocket;\n try {\n ws = new WebSocket(normalizedWsUrl);\n } catch (error) {\n appendLog(`ws create error: ${String(error)}`);\n return;\n }\n\n const pc = new RTCPeerConnection({ iceServers });\n pc.addTransceiver('video', { direction: 'recvonly' });\n\n peerRef.current.ws = ws;\n peerRef.current.pc = pc;\n peerRef.current.pendingCandidates = [];\n\n ws.onopen = () => {\n appendLog('ws connected');\n setIsConnected(true);\n ws.send(JSON.stringify({ type: 'join', roomId: normalizedRoomId, role: 'viewer' }));\n };\n\n ws.onclose = () => {\n appendLog('ws closed');\n setIsConnected(false);\n };\n\n ws.onerror = (event) => {\n appendLog(`ws error: ${event.type}`);\n };\n\n ws.onmessage = async (event) => {\n const message = parseMessage(event.data);\n if (!message) {\n appendLog('ws message parse error');\n return;\n }\n\n if (message.type === 'joined') {\n const joined = message as ScreenReceiverJoinedMessage;\n peerRef.current.selfPeerId = joined.peerId;\n appendLog(`joined room ${joined.roomId} as ${joined.peerId}`);\n return;\n }\n\n if (message.type === 'room_state') {\n const roomState = message as ScreenReceiverRoomStateMessage;\n const broadcaster = roomState.peers.find((peer) => peer.role === 'broadcaster');\n if (broadcaster) {\n peerRef.current.publisherPeerId = broadcaster.peerId;\n appendLog(`broadcaster online: ${broadcaster.peerId}`);\n }\n return;\n }\n\n if (message.type === 'offer' && typeof message.sdp === 'string') {\n appendLog('offer received');\n peerRef.current.publisherPeerId = typeof message.fromPeerId === 'string' ? message.fromPeerId : undefined;\n await pc.setRemoteDescription({ type: 'offer', sdp: message.sdp });\n for (const candidate of peerRef.current.pendingCandidates) {\n try {\n await pc.addIceCandidate(candidate);\n } catch (error) {\n appendLog(`ice err: ${String(error)}`);\n }\n }\n peerRef.current.pendingCandidates = [];\n\n const answer = await pc.createAnswer();\n await pc.setLocalDescription(answer);\n ws.send(\n JSON.stringify({\n type: 'answer',\n sdp: answer.sdp,\n targetPeerId: peerRef.current.publisherPeerId,\n }),\n );\n appendLog('answer sent');\n return;\n }\n\n if (message.type === 'ice' && message.candidate) {\n if (!pc.remoteDescription) {\n peerRef.current.pendingCandidates.push(message.candidate as RTCIceCandidateInit);\n return;\n }\n try {\n await pc.addIceCandidate(message.candidate as RTCIceCandidateInit);\n } catch (error) {\n appendLog(`ice err: ${String(error)}`);\n }\n return;\n }\n\n if (message.type === 'peer_left') {\n const peerLeft = message as ScreenReceiverPeerLeftMessage;\n if (peerLeft.peerId === peerRef.current.publisherPeerId) {\n peerRef.current.publisherPeerId = undefined;\n appendLog(`publisher left: ${peerLeft.peerId}`);\n }\n return;\n }\n\n if (message.type === 'error') {\n appendLog(`server error: ${String(message.reason ?? 'unknown')}`);\n }\n };\n\n pc.ontrack = (event) => {\n const receivedStream = event.streams[0];\n if (receivedStream) {\n setStream(receivedStream);\n appendLog('track received');\n }\n };\n\n pc.onicecandidate = (event) => {\n if (!event.candidate) return;\n ws.send(\n JSON.stringify({\n type: 'ice',\n candidate: event.candidate,\n targetPeerId: peerRef.current.publisherPeerId,\n }),\n );\n };\n\n pc.onconnectionstatechange = () => {\n const state = pc.connectionState || 'new';\n setConnectionState(state);\n appendLog(`pc state: ${state}`);\n };\n\n pc.oniceconnectionstatechange = () => {\n const state = pc.iceConnectionState || 'new';\n setIceConnectionState(state);\n appendLog(`ice state: ${state}`);\n };\n }, [appendLog, disconnect, iceServers, roomId, wsUrl]);\n\n useEffect(() => () => disconnect(), [disconnect]);\n\n useEffect(() => {\n if (!videoRef.current) return;\n videoRef.current.srcObject = stream;\n }, [stream]);\n\n const clearLogs = useCallback(() => setLogs([]), []);\n\n return useMemo(\n () => ({\n connect,\n disconnect,\n clearLogs,\n logs,\n isConnected,\n connectionState,\n iceConnectionState,\n videoRef,\n stream,\n }),\n [clearLogs, connect, connectionState, disconnect, iceConnectionState, isConnected, logs, stream],\n );\n}\n","const DEFAULT_PORT = 8787;\nconst DEFAULT_PATH = '/ws';\n\nexport interface ResolveScreenReceiverSignalUrlOptions {\n signalUrl?: string;\n path?: string;\n port?: number;\n}\n\nexport function resolveScreenReceiverSignalUrl(\n options: ResolveScreenReceiverSignalUrlOptions = {},\n): string {\n const { signalUrl, path = DEFAULT_PATH, port = DEFAULT_PORT } = options;\n if (signalUrl && signalUrl.trim()) return signalUrl.trim();\n\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n if (typeof window !== 'undefined') {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n return `${protocol}//${window.location.host}${normalizedPath}`;\n }\n\n return `ws://127.0.0.1:${port}${normalizedPath}`;\n}\n","import React, { useMemo, useState } from 'react';\nimport { resolveScreenReceiverSignalUrl } from './signalUrl';\nimport { useScreenReceiver } from './useScreenReceiver';\n\nexport interface ScreenReceiverPanelProps {\n defaultSignalUrl?: string;\n defaultRoomId?: string;\n className?: string;\n}\n\nconst DEFAULT_ROOM_ID = 'screen-room-1';\n\nexport function ScreenReceiverPanel(props: ScreenReceiverPanelProps) {\n const { defaultSignalUrl, defaultRoomId = DEFAULT_ROOM_ID, className } = props;\n const initialSignalUrl = useMemo(\n () => resolveScreenReceiverSignalUrl({ signalUrl: defaultSignalUrl }),\n [defaultSignalUrl],\n );\n const [wsUrl, setWsUrl] = useState(initialSignalUrl);\n const [roomId, setRoomId] = useState(defaultRoomId);\n const receiver = useScreenReceiver({ wsUrl, roomId });\n const logs = useMemo(() => receiver.logs.map((entry) => entry.text).join('\\n'), [receiver.logs]);\n\n return (\n <div className={className}>\n <div className=\"flex flex-col gap-4\">\n <div className=\"grid gap-3 md:grid-cols-[2fr,1fr,auto]\">\n <label className=\"flex flex-col gap-1 text-sm\">\n <span>Signaling WS</span>\n <input\n className=\"rounded-md border px-3 py-2\"\n value={wsUrl}\n onChange={(event) => setWsUrl(event.target.value)}\n />\n </label>\n <label className=\"flex flex-col gap-1 text-sm\">\n <span>Room</span>\n <input\n className=\"rounded-md border px-3 py-2\"\n value={roomId}\n onChange={(event) => setRoomId(event.target.value)}\n />\n </label>\n <div className=\"flex items-end gap-2\">\n <button\n onClick={() => void receiver.connect()}\n className=\"rounded-md border bg-black px-4 py-2 text-sm text-white\"\n >\n {receiver.isConnected ? 'Reconnect' : 'Connect'}\n </button>\n <button\n onClick={receiver.disconnect}\n className=\"rounded-md border px-4 py-2 text-sm\"\n >\n Disconnect\n </button>\n </div>\n </div>\n\n <div className=\"grid gap-3 md:grid-cols-3\">\n <StatusItem label=\"WebSocket\" value={receiver.isConnected ? 'connected' : 'idle'} />\n <StatusItem label=\"PeerConnection\" value={receiver.connectionState} />\n <StatusItem label=\"ICE State\" value={receiver.iceConnectionState} />\n </div>\n\n <div className=\"grid gap-4 lg:grid-cols-[3fr,2fr]\">\n <div className=\"rounded-xl border bg-black p-3\">\n <video\n ref={receiver.videoRef}\n autoPlay\n playsInline\n controls\n muted\n className=\"h-[360px] w-full rounded-lg bg-black\"\n />\n </div>\n <div className=\"rounded-xl border p-3\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm font-semibold\">Session Log</p>\n <button\n onClick={receiver.clearLogs}\n className=\"text-xs underline-offset-2 hover:underline\"\n >\n Clear\n </button>\n </div>\n <pre className=\"mt-3 h-[320px] overflow-auto rounded-lg border bg-slate-50 p-3 text-xs\">\n {logs || 'No logs yet.'}\n </pre>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction StatusItem({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"rounded-md border px-3 py-2\">\n <p className=\"text-xs text-slate-500\">{label}</p>\n <p className=\"text-sm font-medium\">{value}</p>\n </div>\n );\n}\n","import type { FestivalCardConfig } from '../types';\n\nexport const DEFAULT_FESTIVAL_CARD_CONFIG: FestivalCardConfig = {\n id: 'default-festival-card',\n name: 'Holiday Card',\n theme: 'winter',\n coverTitle: 'Happy Holidays',\n coverSubtitle: 'Warm wishes for you',\n background: {\n colorA: '#0c1a34',\n colorB: '#1f4f8a',\n },\n backgroundMusic: {\n src: '',\n loop: true,\n autoPlay: false,\n volume: 0.5,\n },\n pages: [\n {\n id: 'page-1',\n title: '封面',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p1-text-1',\n type: 'text',\n x: 50,\n y: 20,\n content: '新年快乐',\n fontSize: 34,\n fontWeight: 700,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p1-text-2',\n type: 'text',\n x: 50,\n y: 36,\n content: '愿这一年平安喜乐',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#dbeafe',\n },\n {\n id: 'p1-image-1',\n type: 'image',\n x: 50,\n y: 68,\n width: 72,\n height: 42,\n src: 'https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 16,\n alt: 'holiday',\n isBackground: false,\n },\n ],\n },\n {\n id: 'page-2',\n title: '祝福',\n background: { color: '#1a3766' },\n elements: [\n {\n id: 'p2-text-1',\n type: 'text',\n x: 50,\n y: 28,\n content: '愿你新岁:',\n fontSize: 28,\n fontWeight: 700,\n align: 'center',\n color: '#fef3c7',\n },\n {\n id: 'p2-text-2',\n type: 'text',\n x: 50,\n y: 42,\n content: '所得皆所期,所失亦无碍',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#f8fafc',\n },\n {\n id: 'p2-text-3',\n type: 'text',\n x: 50,\n y: 55,\n content: '愿你的每一步都走向光亮',\n fontSize: 16,\n fontWeight: 400,\n align: 'center',\n color: '#dbeafe',\n },\n ],\n },\n {\n id: 'page-3',\n title: '落款',\n background: { color: '#11284d' },\n elements: [\n {\n id: 'p3-image-1',\n type: 'image',\n x: 50,\n y: 34,\n width: 60,\n height: 42,\n src: 'https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 14,\n alt: 'gift',\n isBackground: false,\n },\n {\n id: 'p3-text-1',\n type: 'text',\n x: 50,\n y: 72,\n content: 'Best wishes, from SA2Kit',\n fontSize: 18,\n fontWeight: 600,\n align: 'center',\n color: '#f8fafc',\n },\n ],\n },\n ],\n};\n","import { DEFAULT_FESTIVAL_CARD_CONFIG } from './defaults';\nimport type { FestivalCardConfig, FestivalCardPage } from '../types';\n\nconst ensurePage = (page: FestivalCardPage, index: number): FestivalCardPage => ({\n id: page.id || `page-${index + 1}`,\n title: page.title || `第 ${index + 1} 页`,\n elements: Array.isArray(page.elements) ? page.elements : [],\n background: page.background || {},\n});\n\nexport const normalizeFestivalCardConfig = (\n config?: Partial<FestivalCardConfig> | null\n): FestivalCardConfig => {\n const pages = config?.pages && config.pages.length > 0 ? config.pages : DEFAULT_FESTIVAL_CARD_CONFIG.pages;\n\n return {\n ...DEFAULT_FESTIVAL_CARD_CONFIG,\n ...config,\n background: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.background,\n ...(config?.background || {}),\n },\n backgroundMusic: {\n ...DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic,\n ...(config?.backgroundMusic || {}),\n src: config?.backgroundMusic?.src ?? DEFAULT_FESTIVAL_CARD_CONFIG.backgroundMusic?.src ?? '',\n },\n pages: pages.map(ensurePage),\n };\n};\n\nexport const resizeFestivalCardPages = (config: FestivalCardConfig, pageCount: number): FestivalCardConfig => {\n const safeCount = Math.max(1, Math.min(12, Math.floor(pageCount || 1)));\n const nextPages = [...config.pages];\n\n while (nextPages.length < safeCount) {\n const idx = nextPages.length;\n nextPages.push({\n id: `page-${idx + 1}`,\n title: `第 ${idx + 1} 页`,\n elements: [],\n background: {},\n });\n }\n\n return {\n ...config,\n pages: nextPages.slice(0, safeCount),\n };\n};\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig } from '../types';\n\ninterface UseFestivalCardConfigOptions {\n initialConfig?: FestivalCardConfig;\n fetchConfig?: () => Promise<FestivalCardConfig>;\n onSave?: (config: FestivalCardConfig) => Promise<void> | void;\n}\n\nexport const useFestivalCardConfig = (options?: UseFestivalCardConfigOptions) => {\n const [config, setConfig] = useState<FestivalCardConfig>(() =>\n normalizeFestivalCardConfig(options?.initialConfig || DEFAULT_FESTIVAL_CARD_CONFIG)\n );\n const [loading, setLoading] = useState(Boolean(options?.fetchConfig));\n const [saving, setSaving] = useState(false);\n\n useEffect(() => {\n const fetchConfig = options?.fetchConfig;\n if (!fetchConfig) return;\n\n let active = true;\n void fetchConfig()\n .then((value) => {\n if (!active) return;\n setConfig(normalizeFestivalCardConfig(value));\n })\n .finally(() => {\n if (active) setLoading(false);\n });\n\n return () => {\n active = false;\n };\n }, [options?.fetchConfig]);\n\n const save = useCallback(async () => {\n const onSave = options?.onSave;\n if (!onSave) return;\n setSaving(true);\n try {\n await onSave(config);\n } finally {\n setSaving(false);\n }\n }, [config, options?.onSave]);\n\n return useMemo(\n () => ({\n config,\n setConfig,\n loading,\n saving,\n save,\n }),\n [config, loading, save, saving]\n );\n};\n","'use client';\n\nimport React from 'react';\nimport type { FestivalCardElement, FestivalCardPage } from '../types';\n\nconst elementStyle = (element: FestivalCardElement): React.CSSProperties => ({\n position: 'absolute',\n zIndex: 2,\n left: `${element.x}%`,\n top: `${element.y}%`,\n width: `${element.width ?? 70}%`,\n height: element.height ? `${element.height}%` : undefined,\n transform: 'translate(-50%, -50%)',\n});\n\nconst renderElement = (element: FestivalCardElement) => {\n if (element.type === 'text') {\n return (\n <div\n key={element.id}\n style={{\n ...elementStyle(element),\n color: element.color || '#f8fafc',\n fontSize: element.fontSize || 18,\n fontWeight: element.fontWeight || 500,\n fontFamily: element.fontFamily || 'inherit',\n textAlign: element.align || 'left',\n lineHeight: 1.45,\n whiteSpace: 'pre-wrap',\n }}\n >\n {element.content}\n </div>\n );\n }\n\n return (\n <img\n key={element.id}\n src={element.src}\n alt={element.alt || 'festival-card-image'}\n style={{\n ...elementStyle(element),\n objectFit: element.fit || 'cover',\n borderRadius: element.borderRadius || 0,\n overflow: 'hidden',\n boxShadow: '0 12px 30px rgba(2, 6, 23, 0.32)',\n }}\n />\n );\n};\n\ninterface FestivalCardPageRendererProps {\n page: FestivalCardPage;\n}\n\nexport const FestivalCardPageRenderer: React.FC<FestivalCardPageRendererProps> = ({ page }) => {\n const backgroundElement = page.elements.find(\n (element): element is Extract<FestivalCardElement, { type: 'image' }> => element.type === 'image' && Boolean(element.isBackground)\n );\n const foregroundElements = page.elements.filter((element) => !(element.type === 'image' && element.isBackground));\n\n return (\n <div\n className=\"relative h-full w-full overflow-hidden rounded-2xl\"\n style={{\n backgroundColor: page.background?.color || '#0f172a',\n backgroundImage: backgroundElement\n ? `url(${backgroundElement.src})`\n : page.background?.image\n ? `url(${page.background.image})`\n : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n <div className=\"absolute inset-0 bg-slate-950/20\" />\n {foregroundElements.map(renderElement)}\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig } from '../types';\nimport { FestivalCardPageRenderer } from './FestivalCardPageRenderer';\n\nexport interface FestivalCardBook3DProps {\n config: FestivalCardConfig;\n className?: string;\n}\n\nexport const FestivalCardBook3D: React.FC<FestivalCardBook3DProps> = ({ config, className }) => {\n const [currentPage, setCurrentPage] = useState(0);\n const normalized = useMemo(() => normalizeFestivalCardConfig(config), [config]);\n const pages = normalized.pages;\n\n const canPrev = currentPage > 0;\n const canNext = currentPage < pages.length - 1;\n\n return (\n <div className={className}>\n <div className=\"w-full min-h-screen px-0 py-4\">\n <div className=\"mx-auto w-full text-center text-slate-100\">\n <h3 className=\"mb-3 text-lg font-semibold\">{normalized.coverTitle || 'Festival Card'}</h3>\n </div>\n\n <div className=\"mx-auto w-full\">\n <div className=\"relative h-[calc(100vh-170px)] min-h-[460px]\">\n {pages.map((page, index) => (\n <div\n key={page.id}\n className=\"absolute inset-0 transition-opacity duration-500 ease-out\"\n style={{\n opacity: index === currentPage ? 1 : 0,\n pointerEvents: index === currentPage ? 'auto' : 'none',\n }}\n >\n <FestivalCardPageRenderer page={page} />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"mt-4 flex justify-center gap-3\">\n <button\n type=\"button\"\n disabled={!canPrev}\n onClick={() => setCurrentPage((p) => Math.max(0, p - 1))}\n className=\"rounded-full bg-white px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n 上一页\n </button>\n <button\n type=\"button\"\n disabled={!canNext}\n onClick={() => setCurrentPage((p) => Math.min(pages.length - 1, p + 1))}\n className=\"rounded-full bg-sky-300 px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45\"\n >\n 下一页\n </button>\n </div>\n </div>\n\n {normalized.backgroundMusic?.src ? (\n <audio\n src={normalized.backgroundMusic.src}\n autoPlay={normalized.backgroundMusic.autoPlay}\n loop={normalized.backgroundMusic.loop}\n controls\n className=\"mt-3 w-full\"\n />\n ) : null}\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { resizeFestivalCardPages } from '../core';\nimport type { FestivalCardConfig, FestivalCardElement } from '../types';\n\ninterface FestivalCardConfigEditorProps {\n value: FestivalCardConfig;\n onChange: (config: FestivalCardConfig) => void;\n}\n\nconst createTextElement = (pageIndex: number): FestivalCardElement => ({\n id: `text-${Date.now()}-${pageIndex}`,\n type: 'text',\n x: 50,\n y: 50,\n width: 70,\n content: '请输入文字',\n fontSize: 18,\n fontWeight: 500,\n align: 'center',\n color: '#ffffff',\n fontFamily: 'inherit',\n});\n\nconst createImageElement = (pageIndex: number): FestivalCardElement => ({\n id: `image-${Date.now()}-${pageIndex}`,\n type: 'image',\n x: 50,\n y: 50,\n width: 60,\n height: 40,\n src: 'https://images.unsplash.com/photo-1482517967863-00e15c9b44be?auto=format&fit=crop&w=1200&q=80',\n fit: 'cover',\n borderRadius: 12,\n});\n\nexport const FestivalCardConfigEditor: React.FC<FestivalCardConfigEditorProps> = ({ value, onChange }) => {\n const [activePageIndex, setActivePageIndex] = useState(0);\n const page = value.pages[activePageIndex];\n const canEditPage = Boolean(page);\n const pageOptions = useMemo(() => value.pages.map((_, index) => index), [value.pages]);\n\n const handlePageCountChange = (nextRaw: number) => {\n const next = Number.isFinite(nextRaw) ? Math.max(1, Math.min(12, Math.floor(nextRaw))) : value.pages.length;\n const resized = resizeFestivalCardPages(value, next);\n onChange(resized);\n if (activePageIndex > resized.pages.length - 1) {\n setActivePageIndex(resized.pages.length - 1);\n }\n };\n\n const updateElement = (elementId: string, patch: Partial<FestivalCardElement>) => {\n onChange({\n ...value,\n pages: value.pages.map((p, pIndex) =>\n pIndex === activePageIndex\n ? {\n ...p,\n elements: p.elements.map((el) => (el.id === elementId ? { ...el, ...patch } as FestivalCardElement : el)),\n }\n : p\n ),\n });\n };\n\n const removeElement = (elementId: string) => {\n onChange({\n ...value,\n pages: value.pages.map((p, pIndex) =>\n pIndex === activePageIndex\n ? {\n ...p,\n elements: p.elements.filter((el) => el.id !== elementId),\n }\n : p\n ),\n });\n };\n\n const updatePage = (patch: Partial<FestivalCardConfig['pages'][number]>) => {\n onChange({\n ...value,\n pages: value.pages.map((p, index) => (index === activePageIndex ? { ...p, ...patch } : p)),\n });\n };\n\n const numberFieldClassName =\n 'w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100';\n\n return (\n <div className=\"rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm\">\n <div className=\"grid gap-3\">\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面数量</span>\n <input\n type=\"number\"\n min={1}\n max={12}\n value={value.pages.length}\n onChange={(event) => handlePageCountChange(Number(event.target.value))}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">背景音乐 URL</span>\n <input\n type=\"url\"\n value={value.backgroundMusic?.src || ''}\n onChange={(event) =>\n onChange({\n ...value,\n backgroundMusic: {\n ...value.backgroundMusic,\n src: event.target.value,\n },\n })\n }\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面标题</span>\n <input\n type=\"text\"\n value={page?.title || ''}\n onChange={(event) => updatePage({ title: event.target.value })}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面背景色</span>\n <input\n type=\"color\"\n value={page?.background?.color || '#0f172a'}\n onChange={(event) =>\n updatePage({\n background: {\n ...page?.background,\n color: event.target.value,\n },\n })\n }\n className=\"h-10 w-full rounded-lg border border-slate-300 bg-white p-1\"\n />\n </label>\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">页面背景图 URL</span>\n <input\n type=\"url\"\n value={page?.background?.image || ''}\n onChange={(event) =>\n updatePage({\n background: {\n ...page?.background,\n image: event.target.value,\n },\n })\n }\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n </label>\n </div>\n\n <label className=\"grid gap-1.5\">\n <span className=\"text-sm font-medium text-slate-700\">编辑页面</span>\n <select\n value={activePageIndex}\n onChange={(event) => setActivePageIndex(Number(event.target.value))}\n className=\"rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n >\n {pageOptions.map((index) => (\n <option key={index} value={index}>\n 第 {index + 1} 页\n </option>\n ))}\n </select>\n </label>\n </div>\n\n {canEditPage ? (\n <div className=\"mt-4\">\n <div className=\"mb-3 flex gap-2\">\n <button\n type=\"button\"\n onClick={() =>\n onChange({\n ...value,\n pages: value.pages.map((p, index) =>\n index === activePageIndex ? { ...p, elements: [...p.elements, createTextElement(index)] } : p\n ),\n })\n }\n className=\"rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white\"\n >\n + 文字\n </button>\n <button\n type=\"button\"\n onClick={() =>\n onChange({\n ...value,\n pages: value.pages.map((p, index) =>\n index === activePageIndex ? { ...p, elements: [...p.elements, createImageElement(index)] } : p\n ),\n })\n }\n className=\"rounded-lg bg-sky-600 px-3 py-2 text-sm font-medium text-white\"\n >\n + 图片\n </button>\n </div>\n\n <div className=\"grid max-h-[340px] gap-2.5 overflow-auto pr-1\">\n {(page?.elements ?? []).map((element) => (\n <div key={element.id} className=\"rounded-xl border border-slate-200 bg-slate-50 p-3\">\n <div className=\"mb-2 flex items-center justify-between\">\n <div className=\"text-xs font-semibold tracking-wide text-slate-500\">{element.type.toUpperCase()}</div>\n <button\n type=\"button\"\n onClick={() => removeElement(element.id)}\n className=\"rounded-md border border-rose-300 bg-rose-50 px-2 py-1 text-xs font-medium text-rose-700\"\n >\n 删除\n </button>\n </div>\n {element.type === 'text' ? (\n <div className=\"grid gap-2\">\n <textarea\n value={element.content}\n onChange={(event) => updateElement(element.id, { content: event.target.value })}\n rows={3}\n className=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1 text-xs text-slate-600\">\n X(%)\n <input\n type=\"number\"\n value={element.x}\n onChange={(event) => updateElement(element.id, { x: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n Y(%)\n <input\n type=\"number\"\n value={element.y}\n onChange={(event) => updateElement(element.id, { y: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 宽度(%)\n <input\n type=\"number\"\n value={element.width ?? 70}\n onChange={(event) => updateElement(element.id, { width: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 字号(px)\n <input\n type=\"number\"\n value={element.fontSize ?? 18}\n onChange={(event) => updateElement(element.id, { fontSize: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 字重\n <input\n type=\"number\"\n min={100}\n max={900}\n step={100}\n value={element.fontWeight ?? 500}\n onChange={(event) => updateElement(element.id, { fontWeight: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 对齐\n <select\n value={element.align || 'left'}\n onChange={(event) =>\n updateElement(element.id, { align: event.target.value as 'left' | 'center' | 'right' })\n }\n className={numberFieldClassName}\n >\n <option value=\"left\">left</option>\n <option value=\"center\">center</option>\n <option value=\"right\">right</option>\n </select>\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600 sm:col-span-2\">\n 字体\n <input\n type=\"text\"\n value={element.fontFamily || ''}\n onChange={(event) => updateElement(element.id, { fontFamily: event.target.value })}\n placeholder=\"inherit / serif / sans-serif / PingFang SC\"\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600 sm:col-span-2\">\n 文字颜色\n <div className=\"grid grid-cols-[64px_1fr] gap-2\">\n <input\n type=\"color\"\n value={element.color || '#ffffff'}\n onChange={(event) => updateElement(element.id, { color: event.target.value })}\n className=\"h-10 rounded-lg border border-slate-300 bg-white p-1\"\n />\n <input\n type=\"text\"\n value={element.color || '#ffffff'}\n onChange={(event) => updateElement(element.id, { color: event.target.value })}\n className={numberFieldClassName}\n />\n </div>\n </label>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-2\">\n <input\n type=\"url\"\n value={element.src}\n onChange={(event) => updateElement(element.id, { src: event.target.value })}\n className=\"w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n />\n <div className=\"grid gap-2 sm:grid-cols-2\">\n <label className=\"grid gap-1 text-xs text-slate-600\">\n X(%)\n <input\n type=\"number\"\n value={element.x}\n onChange={(event) => updateElement(element.id, { x: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n Y(%)\n <input\n type=\"number\"\n value={element.y}\n onChange={(event) => updateElement(element.id, { y: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 宽度(%)\n <input\n type=\"number\"\n value={element.width ?? 60}\n onChange={(event) => updateElement(element.id, { width: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 高度(%)\n <input\n type=\"number\"\n value={element.height ?? 40}\n onChange={(event) => updateElement(element.id, { height: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 圆角(px)\n <input\n type=\"number\"\n value={element.borderRadius ?? 0}\n onChange={(event) => updateElement(element.id, { borderRadius: Number(event.target.value) })}\n className={numberFieldClassName}\n />\n </label>\n <label className=\"grid gap-1 text-xs text-slate-600\">\n 填充\n <select\n value={element.fit || 'cover'}\n onChange={(event) => updateElement(element.id, { fit: event.target.value as 'cover' | 'contain' })}\n className={numberFieldClassName}\n >\n <option value=\"cover\">cover</option>\n <option value=\"contain\">contain</option>\n </select>\n </label>\n </div>\n <label className=\"inline-flex items-center gap-2 text-sm text-slate-700\">\n <input\n type=\"checkbox\"\n checked={Boolean(element.isBackground)}\n onChange={(event) => updateElement(element.id, { isBackground: event.target.checked })}\n className=\"h-4 w-4 rounded border-slate-300 text-sky-600\"\n />\n 作为本页背景图\n </label>\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\nimport { normalizeFestivalCardConfig } from '../core';\nimport { useFestivalCardConfig } from '../hooks/useFestivalCardConfig';\nimport type { FestivalCardConfig } from '../types';\nimport { FestivalCardBook3D } from './FestivalCardBook3D';\nimport { FestivalCardConfigEditor } from './FestivalCardConfigEditor';\n\ninterface FestivalCardStudioProps {\n initialConfig?: FestivalCardConfig;\n fetchConfig?: () => Promise<FestivalCardConfig>;\n onSave?: (config: FestivalCardConfig) => Promise<void> | void;\n}\n\nexport const FestivalCardStudio: React.FC<FestivalCardStudioProps> = ({ initialConfig, fetchConfig, onSave }) => {\n const { config, setConfig, loading, save, saving } = useFestivalCardConfig({\n initialConfig: normalizeFestivalCardConfig(initialConfig),\n fetchConfig,\n onSave,\n });\n\n if (loading) return <div>加载中...</div>;\n\n return (\n <div className=\"grid items-start gap-4 lg:grid-cols-[1.45fr_1fr]\">\n <FestivalCardBook3D config={config} className=\"h-full\" />\n <div className=\"lg:sticky lg:top-4\">\n <FestivalCardConfigEditor value={config} onChange={setConfig} />\n {onSave ? (\n <button\n type=\"button\"\n onClick={() => void save()}\n disabled={saving}\n className=\"mt-3 w-full rounded-lg bg-slate-900 px-4 py-2.5 text-sm font-medium text-white disabled:opacity-60\"\n >\n {saving ? '保存中...' : '保存配置'}\n </button>\n ) : null}\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FestivalCardStudio } from './FestivalCardStudio';\nimport { normalizeFestivalCardConfig } from '../core';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../types';\n\ninterface FestivalCardConfigPageProps {\n apiBase?: string;\n cardId?: string;\n mainPagePath?: string;\n}\n\nexport const FestivalCardConfigPage: React.FC<FestivalCardConfigPageProps> = ({\n apiBase = '/api/festivalCard',\n cardId,\n mainPagePath = '/festivalCard',\n}) => {\n const [list, setList] = useState<FestivalCardConfigSummary[]>([]);\n const [selectedId, setSelectedId] = useState(cardId || 'default-festival-card');\n\n const parseListResponse = (data: unknown): FestivalCardConfigSummary[] => {\n if (!data || typeof data !== 'object') return [];\n const payload = (data as { data?: unknown }).data;\n if (!Array.isArray(payload)) return [];\n return payload\n .filter((item): item is FestivalCardConfigSummary => Boolean(item && typeof item === 'object' && typeof (item as { id?: unknown }).id === 'string'))\n .map((item) => ({ id: item.id, name: item.name }));\n };\n\n const parseConfigResponse = (data: unknown): FestivalCardConfig => {\n if (!data || typeof data !== 'object') return normalizeFestivalCardConfig();\n const payload = (data as { data?: unknown }).data;\n if (!payload || typeof payload !== 'object') return normalizeFestivalCardConfig();\n return normalizeFestivalCardConfig(payload as Partial<FestivalCardConfig>);\n };\n\n const reloadList = useCallback(async () => {\n try {\n const response = await fetch(apiBase, { cache: 'no-store' });\n if (!response.ok) throw new Error(`加载卡片列表失败: ${response.status}`);\n const data: unknown = await response.json();\n const items = parseListResponse(data);\n if (items.length === 0) {\n const fallbackId = 'default-festival-card';\n const fallbackConfig = normalizeFestivalCardConfig({ id: fallbackId, name: 'Holiday Card' });\n await fetch(`${apiBase}/${encodeURIComponent(fallbackId)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config: fallbackConfig }),\n });\n setList([{ id: fallbackId, name: fallbackConfig.name }]);\n setSelectedId(fallbackId);\n return;\n }\n setList(items);\n } catch (error) {\n window.alert((error as Error).message || '加载卡片列表失败');\n }\n }, [apiBase]);\n\n useEffect(() => {\n void reloadList();\n }, [reloadList]);\n\n const fetchConfig = async (): Promise<FestivalCardConfig> => {\n const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, { cache: 'no-store' });\n if (!response.ok) {\n const message = `加载配置失败: ${response.status}`;\n window.alert(message);\n throw new Error(message);\n }\n const data: unknown = await response.json();\n return parseConfigResponse(data);\n };\n\n const saveConfig = async (config: FestivalCardConfig) => {\n try {\n const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config }),\n });\n if (!response.ok) throw new Error(`保存失败: ${response.status}`);\n await reloadList();\n window.alert('保存成功');\n } catch (error) {\n window.alert((error as Error).message || '保存失败');\n throw error;\n }\n };\n\n const createNew = async () => {\n const name = window.prompt('请输入新卡片名称');\n if (!name) return;\n const id = `festival-${Date.now()}`;\n const config = normalizeFestivalCardConfig({\n id,\n name,\n });\n try {\n const response = await fetch(`${apiBase}/${encodeURIComponent(id)}`, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ config }),\n });\n if (!response.ok) throw new Error(`创建失败: ${response.status}`);\n setSelectedId(id);\n await reloadList();\n window.alert('新卡片创建成功');\n } catch (error) {\n window.alert((error as Error).message || '创建失败');\n }\n };\n\n const mainLink = useMemo(() => `${mainPagePath}?cardId=${encodeURIComponent(selectedId)}`, [mainPagePath, selectedId]);\n\n return (\n <div className=\"grid gap-4\">\n <div className=\"flex flex-wrap items-center gap-2 rounded-xl border border-slate-800 bg-slate-900/50 p-3\">\n <select\n value={selectedId}\n onChange={(event) => setSelectedId(event.target.value)}\n className=\"min-w-[240px] rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100\"\n >\n {list.map((item) => (\n <option key={item.id} value={item.id}>\n {item.name || item.id}\n </option>\n ))}\n </select>\n <button type=\"button\" onClick={() => void createNew()} className=\"rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white\">\n 新建卡片\n </button>\n <a href={mainLink} className=\"rounded-lg border border-sky-200 bg-sky-50 px-3 py-2 text-sm text-sky-700\">\n 打开主页面\n </a>\n </div>\n\n <FestivalCardStudio fetchConfig={fetchConfig} onSave={saveConfig} />\n </div>\n );\n};\n","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { FestivalCardBook3D } from './FestivalCardBook3D';\nimport type { FestivalCardConfig, FestivalCardConfigSummary } from '../types';\n\ninterface FestivalCardManagedPageProps {\n apiBase?: string;\n cardId?: string;\n}\n\nconst isSummary = (value: unknown): value is FestivalCardConfigSummary => {\n if (!value || typeof value !== 'object') return false;\n return typeof (value as { id?: unknown }).id === 'string';\n};\n\nconst parseListResponse = (data: unknown): FestivalCardConfigSummary[] => {\n if (!data || typeof data !== 'object') return [];\n const payload = (data as { data?: unknown }).data;\n if (!Array.isArray(payload)) return [];\n return payload.filter(isSummary).map((item) => ({ id: item.id, name: item.name }));\n};\n\nconst parseConfigResponse = (data: unknown): FestivalCardConfig | null => {\n if (!data || typeof data !== 'object') return null;\n const payload = (data as { data?: unknown }).data;\n if (!payload || typeof payload !== 'object') return null;\n if (!Array.isArray((payload as FestivalCardConfig).pages)) return null;\n return payload as FestivalCardConfig;\n};\n\nexport const FestivalCardManagedPage: React.FC<FestivalCardManagedPageProps> = ({\n apiBase = '/api/festivalCard',\n cardId,\n}) => {\n const [currentCardId, setCurrentCardId] = useState<string>(cardId || '');\n const [config, setConfig] = useState<FestivalCardConfig | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const fetchList = async () => {\n const response = await fetch(apiBase, { cache: 'no-store' });\n const data: unknown = await response.json();\n const items = parseListResponse(data);\n const first = items[0];\n if (!currentCardId && first) {\n setCurrentCardId(first.id);\n }\n };\n\n void fetchList();\n }, [apiBase, currentCardId]);\n\n useEffect(() => {\n if (!currentCardId) return;\n setLoading(true);\n void fetch(`${apiBase}/${encodeURIComponent(currentCardId)}`, { cache: 'no-store' })\n .then((res) => res.json() as Promise<unknown>)\n .then((data) => setConfig(parseConfigResponse(data)))\n .finally(() => setLoading(false));\n }, [apiBase, currentCardId]);\n\n return (\n <div>{loading || !config ? <div className=\"py-12 text-center text-slate-400\">加载中...</div> : <FestivalCardBook3D config={config} />}</div>\n );\n};\n","import type { FestivalCardDbAdapter } from '../types';\n\nlet dbAdapter: FestivalCardDbAdapter | null = null;\n\nexport const initializeFestivalCardDb = (adapter: FestivalCardDbAdapter): void => {\n dbAdapter = adapter;\n};\n\nexport const getFestivalCardDb = (): FestivalCardDbAdapter | null => dbAdapter;\n","import { DEFAULT_FESTIVAL_CARD_CONFIG, normalizeFestivalCardConfig } from '../core';\nimport { getFestivalCardDb } from '../server/db';\nimport type {\n FestivalCardConfig,\n FestivalCardConfigSummary,\n FestivalCardDbAdapter,\n FestivalCardServiceOptions,\n} from '../types';\n\nexport class FestivalCardService {\n private db: FestivalCardDbAdapter | null;\n\n constructor(options?: FestivalCardServiceOptions) {\n this.db = options?.db || getFestivalCardDb();\n }\n\n async listConfigs(): Promise<FestivalCardConfigSummary[]> {\n if (!this.db) {\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n if (this.db.listConfigs) {\n const list = await this.db.listConfigs();\n return list.length > 0\n ? list\n : [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n return [{ id: DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card', name: DEFAULT_FESTIVAL_CARD_CONFIG.name }];\n }\n\n async getConfig(cardId = 'default-festival-card'): Promise<FestivalCardConfig> {\n if (!this.db) return DEFAULT_FESTIVAL_CARD_CONFIG;\n const config = await this.db.getConfig(cardId);\n return normalizeFestivalCardConfig(config);\n }\n\n async saveConfig(cardId: string, config: FestivalCardConfig): Promise<FestivalCardConfig> {\n const normalized = normalizeFestivalCardConfig(config);\n if (!this.db) return normalized;\n await this.db.saveConfig(cardId, normalized);\n return normalized;\n }\n\n async deleteConfig(cardId: string): Promise<void> {\n if (!this.db?.deleteConfig) return;\n await this.db.deleteConfig(cardId);\n }\n}\n\nconst memoryStore = new Map<string, FestivalCardConfig>();\nconst defaultId = DEFAULT_FESTIVAL_CARD_CONFIG.id || 'default-festival-card';\nif (!memoryStore.has(defaultId)) {\n memoryStore.set(defaultId, DEFAULT_FESTIVAL_CARD_CONFIG);\n}\n\nexport const createInMemoryFestivalCardDb = (): FestivalCardDbAdapter => ({\n listConfigs() {\n return Promise.resolve(\n Array.from(memoryStore.entries()).map(([id, config]) => ({\n id,\n name: config.name || id,\n }))\n );\n },\n getConfig(id: string) {\n return Promise.resolve(memoryStore.get(id) || null);\n },\n saveConfig(id: string, config: FestivalCardConfig) {\n memoryStore.set(id, config);\n return Promise.resolve();\n },\n deleteConfig(id: string) {\n memoryStore.delete(id);\n return Promise.resolve();\n },\n});\n","const AMBIGUOUS = new Set(['0', '1', 'I', 'O', 'L']);\nconst ALPHABET = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789'.split('').filter((c) => !AMBIGUOUS.has(c));\n\nexport interface GenerateMatchCodeOptions {\n length?: number;\n maxAttempts?: number;\n exists: (code: string) => Promise<boolean>;\n}\n\nexport const normalizeMatchCode = (value: string): string => value.trim().toUpperCase();\n\nexport const generateMatchCode = async ({\n length = 6,\n maxAttempts = 20,\n exists,\n}: GenerateMatchCodeOptions): Promise<string> => {\n if (length < 4) {\n throw new Error('Match code length must be at least 4');\n }\n\n for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n const code = Array.from({ length })\n .map(() => ALPHABET[Math.floor(Math.random() * ALPHABET.length)])\n .join('');\n\n // eslint-disable-next-line no-await-in-loop\n if (!(await exists(code))) {\n return code;\n }\n }\n\n throw new Error('Unable to generate unique match code');\n};\n","import { randomUUID } from 'crypto';\nimport type {\n BoothAuditEvent,\n BoothUploadRecord,\n BoothVaultStore,\n CreateBoothUploadInput,\n CreateBoothUploadResult,\n} from '../types';\nimport { generateMatchCode, normalizeMatchCode } from './code';\n\nexport interface BoothRedeemGuardLike {\n assertAllowed(subjectKey: string): void;\n registerAttempt(subjectKey: string, success: boolean): void;\n}\n\nexport interface BoothVaultServiceOptions {\n store: BoothVaultStore;\n codeLength?: number;\n defaultTtlHours?: number;\n baseDownloadPath?: string;\n redeemGuard?: BoothRedeemGuardLike;\n onAuditEvent?: (event: BoothAuditEvent) => void;\n}\n\nexport class BoothVaultService {\n private emitAudit(event: Omit<BoothAuditEvent, 'at'>): void {\n this.onAuditEvent?.({\n ...event,\n at: new Date().toISOString(),\n });\n }\n private readonly store: BoothVaultStore;\n private readonly codeLength: number;\n private readonly defaultTtlHours: number;\n private readonly baseDownloadPath: string;\n private readonly redeemGuard?: BoothRedeemGuardLike;\n private readonly onAuditEvent?: (event: BoothAuditEvent) => void;\n\n constructor(options: BoothVaultServiceOptions) {\n this.store = options.store;\n this.codeLength = options.codeLength ?? 6;\n this.defaultTtlHours = options.defaultTtlHours ?? 24 * 14;\n this.baseDownloadPath = options.baseDownloadPath ?? '/redeem';\n this.redeemGuard = options.redeemGuard;\n this.onAuditEvent = options.onAuditEvent;\n }\n\n async createUpload(input: CreateBoothUploadInput): Promise<CreateBoothUploadResult> {\n if (!input.files?.length) {\n throw new Error('At least one file is required');\n }\n\n const now = new Date();\n const ttlHours = Math.max(1, input.ttlHours ?? this.defaultTtlHours);\n const expiresAt = new Date(now.getTime() + ttlHours * 60 * 60 * 1000);\n\n const matchCode = await generateMatchCode({\n length: this.codeLength,\n exists: (code) => this.store.existsByMatchCode(code),\n });\n\n const record: BoothUploadRecord = {\n id: randomUUID(),\n boothId: input.boothId,\n matchCode,\n createdAt: now.toISOString(),\n expiresAt: expiresAt.toISOString(),\n files: input.files.map((file) => ({\n ...file,\n id: randomUUID(),\n })),\n metadata: input.metadata,\n status: 'active',\n downloadCount: 0,\n };\n\n await this.store.saveRecord(record);\n this.emitAudit({\n type: 'upload.created',\n boothId: record.boothId,\n recordId: record.id,\n matchCode: record.matchCode,\n detail: { fileCount: record.files.length },\n });\n\n return {\n record,\n downloadUrlPath: `${this.baseDownloadPath}?code=${record.matchCode}`,\n };\n }\n\n async getByMatchCode(matchCode: string): Promise<BoothUploadRecord | null> {\n const normalized = normalizeMatchCode(matchCode);\n const record = await this.store.findByMatchCode(normalized);\n\n if (!record) {\n return null;\n }\n\n if (new Date(record.expiresAt).getTime() <= Date.now() && record.status === 'active') {\n return {\n ...record,\n status: 'expired',\n };\n }\n\n return record;\n }\n\n async markDownloaded(recordId: string): Promise<void> {\n await this.store.incrementDownloadCount(recordId);\n }\n\n async resolveDownloadFilesByCode(\n matchCode: string,\n options?: { requesterKey?: string }\n ): Promise<BoothUploadRecord | null> {\n const requesterKey = options?.requesterKey;\n if (requesterKey && this.redeemGuard) {\n try {\n this.redeemGuard.assertAllowed(requesterKey);\n } catch (error) {\n this.emitAudit({\n type: 'redeem.blocked',\n requesterKey,\n matchCode,\n detail: { message: error instanceof Error ? error.message : 'blocked' },\n });\n throw error;\n }\n }\n\n const record = await this.getByMatchCode(matchCode);\n const success = !!record && record.status === 'active';\n\n if (requesterKey && this.redeemGuard) {\n this.redeemGuard.registerAttempt(requesterKey, success);\n }\n\n if (!success) {\n this.emitAudit({\n type: 'redeem.failed',\n requesterKey,\n matchCode,\n boothId: record?.boothId,\n recordId: record?.id,\n });\n return record;\n }\n\n await this.markDownloaded(record.id);\n const reloaded = this.store.findByRecordId\n ? await this.store.findByRecordId(record.id)\n : await this.getByMatchCode(record.matchCode);\n\n this.emitAudit({\n type: 'redeem.success',\n requesterKey,\n matchCode: record.matchCode,\n boothId: record.boothId,\n recordId: record.id,\n });\n\n return reloaded ?? record;\n }\n}\n","export interface VocaloidBoothConfig {\n boothId: string;\n title: string;\n description?: string;\n defaultTtlHours: number;\n maxFiles: number;\n maxSingleFileSizeMb: number;\n maxTotalFileSizeMb: number;\n allowedExtensions: string[];\n}\n\nexport const defaultVocaloidBoothConfig: VocaloidBoothConfig = {\n boothId: 'default-booth',\n title: 'MMD / Vocaloid 创作文件寄存站',\n description: '上传创作文件并生成匹配码,后续可凭码下载',\n defaultTtlHours: 24 * 14,\n maxFiles: 20,\n maxSingleFileSizeMb: 2048,\n maxTotalFileSizeMb: 5120,\n allowedExtensions: ['zip', '7z', 'rar', 'vsqx', 'vpr', 'vmd', 'pmx', 'wav', 'mp3', 'mp4'],\n};\n\nexport const normalizeVocaloidBoothConfig = (\n input?: Partial<VocaloidBoothConfig>\n): VocaloidBoothConfig => {\n const merged = {\n ...defaultVocaloidBoothConfig,\n ...(input ?? {}),\n };\n\n return {\n ...merged,\n boothId: merged.boothId || defaultVocaloidBoothConfig.boothId,\n title: merged.title || defaultVocaloidBoothConfig.title,\n defaultTtlHours: Math.max(1, merged.defaultTtlHours),\n maxFiles: Math.max(1, merged.maxFiles),\n maxSingleFileSizeMb: Math.max(1, merged.maxSingleFileSizeMb),\n maxTotalFileSizeMb: Math.max(1, merged.maxTotalFileSizeMb),\n allowedExtensions: (merged.allowedExtensions?.length\n ? merged.allowedExtensions\n : defaultVocaloidBoothConfig.allowedExtensions\n ).map((ext) => ext.toLowerCase()),\n };\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\n\nexport interface BoothUploadSubmitPayload {\n boothId: string;\n files: File[];\n nickname?: string;\n contactTail?: string;\n ttlHours?: number;\n}\n\nexport interface BoothUploadPanelProps {\n boothId: string;\n maxFiles?: number;\n maxFileSizeMb?: number;\n accept?: string;\n uploading?: boolean;\n onSubmit: (payload: BoothUploadSubmitPayload) => Promise<void> | void;\n}\n\nexport const BoothUploadPanel: React.FC<BoothUploadPanelProps> = ({\n boothId,\n maxFiles = 10,\n maxFileSizeMb = 2048,\n accept,\n uploading = false,\n onSubmit,\n}) => {\n const [files, setFiles] = useState<File[]>([]);\n const [nickname, setNickname] = useState('');\n const [contactTail, setContactTail] = useState('');\n const [ttlHours, setTtlHours] = useState(24 * 14);\n const [error, setError] = useState<string | null>(null);\n\n const totalSizeMb = useMemo(\n () => files.reduce((acc, file) => acc + file.size, 0) / 1024 / 1024,\n [files]\n );\n\n const addFiles = (newFiles: FileList | null) => {\n if (!newFiles) return;\n const incoming = Array.from(newFiles);\n const next = [...files, ...incoming];\n\n if (next.length > maxFiles) {\n setError(`最多上传 ${maxFiles} 个文件`);\n return;\n }\n\n const oversized = incoming.find((f) => f.size > maxFileSizeMb * 1024 * 1024);\n if (oversized) {\n setError(`文件 ${oversized.name} 超过 ${maxFileSizeMb}MB 限制`);\n return;\n }\n\n setError(null);\n setFiles(next);\n };\n\n const removeFile = (name: string) => setFiles((prev) => prev.filter((f) => f.name !== name));\n\n const handleSubmit = async () => {\n if (files.length === 0) {\n setError('请先选择至少一个文件');\n return;\n }\n setError(null);\n await onSubmit({\n boothId,\n files,\n nickname: nickname || undefined,\n contactTail: contactTail || undefined,\n ttlHours,\n });\n };\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm\">\n <h3 className=\"mb-3 text-lg font-semibold\">上传创作文件</h3>\n\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={(e) => addFiles(e.target.files)}\n className=\"mb-3 block w-full text-sm\"\n />\n\n <div className=\"mb-3 grid grid-cols-1 gap-2 md:grid-cols-3\">\n <input\n value={nickname}\n onChange={(e) => setNickname(e.target.value)}\n placeholder=\"昵称(可选)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n <input\n value={contactTail}\n onChange={(e) => setContactTail(e.target.value)}\n placeholder=\"联系方式后4位(可选)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n <input\n value={ttlHours}\n type=\"number\"\n min={1}\n onChange={(e) => setTtlHours(Number(e.target.value) || 24)}\n placeholder=\"保存时长(小时)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n </div>\n\n <div className=\"mb-3 text-xs text-slate-500\">\n 已选 {files.length} 个文件,总计 {totalSizeMb.toFixed(2)} MB\n </div>\n\n <ul className=\"mb-3 max-h-40 overflow-auto rounded-md border border-slate-100 p-2 text-sm\">\n {files.length === 0 && <li className=\"text-slate-400\">尚未选择文件</li>}\n {files.map((file) => (\n <li key={`${file.name}-${file.size}`} className=\"mb-1 flex items-center justify-between gap-2\">\n <span className=\"truncate\">{file.name}</span>\n <button type=\"button\" className=\"text-rose-500\" onClick={() => removeFile(file.name)}>\n 移除\n </button>\n </li>\n ))}\n </ul>\n\n {error && <div className=\"mb-3 rounded-md bg-rose-50 p-2 text-sm text-rose-700\">{error}</div>}\n\n <button\n type=\"button\"\n disabled={uploading}\n onClick={handleSubmit}\n className=\"rounded-md bg-indigo-600 px-3 py-2 text-white disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {uploading ? '上传中...' : '开始上传'}\n </button>\n </div>\n );\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport type { BoothUploadRecord } from '../types';\n\nexport interface BoothRedeemPanelProps {\n loading?: boolean;\n onRedeem: (matchCode: string) => Promise<BoothUploadRecord | null>;\n}\n\nexport const BoothRedeemPanel: React.FC<BoothRedeemPanelProps> = ({ onRedeem, loading }) => {\n const [matchCode, setMatchCode] = useState('');\n const [record, setRecord] = useState<BoothUploadRecord | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const handleRedeem = async () => {\n setError(null);\n const result = await onRedeem(matchCode.trim());\n\n if (!result) {\n setRecord(null);\n setError('匹配码不存在,请检查后重试');\n return;\n }\n\n if (result.status !== 'active') {\n setRecord(result);\n setError('匹配码已过期或失效');\n return;\n }\n\n setRecord(result);\n };\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm\">\n <h3 className=\"mb-3 text-lg font-semibold\">凭匹配码下载</h3>\n\n <div className=\"mb-3 flex gap-2\">\n <input\n value={matchCode}\n onChange={(e) => setMatchCode(e.target.value.toUpperCase())}\n placeholder=\"输入匹配码(如 A7K9Q2)\"\n className=\"w-full rounded-md border px-3 py-2 text-sm uppercase\"\n />\n <button\n type=\"button\"\n onClick={handleRedeem}\n disabled={loading}\n className=\"rounded-md bg-slate-900 px-3 py-2 text-white disabled:opacity-50\"\n >\n 查询\n </button>\n </div>\n\n {error && <div className=\"mb-3 rounded-md bg-amber-50 p-2 text-sm text-amber-700\">{error}</div>}\n\n {record && (\n <div className=\"rounded-md border border-slate-100 p-3\">\n <div className=\"mb-2 text-xs text-slate-500\">共 {record.files.length} 个文件</div>\n <ul className=\"space-y-1 text-sm\">\n {record.files.map((file) => (\n <li key={file.id} className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate\">{file.fileName}</span>\n <a href={file.objectKey} className=\"text-indigo-600 hover:underline\" download>\n 下载\n </a>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\n\nexport interface BoothSuccessCardProps {\n matchCode: string;\n expiresAt: string;\n downloadUrlPath: string;\n onCopyCode?: (code: string) => void;\n className?: string;\n}\n\nexport const BoothSuccessCard: React.FC<BoothSuccessCardProps> = ({\n matchCode,\n expiresAt,\n downloadUrlPath,\n onCopyCode,\n className,\n}) => {\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(matchCode);\n } catch {\n // ignore clipboard errors in non-secure contexts\n }\n onCopyCode?.(matchCode);\n };\n\n return (\n <div className={`rounded-xl border border-emerald-200 bg-emerald-50 p-4 text-sm ${className ?? ''}`}>\n <div className=\"mb-2 text-xs text-emerald-800\">上传完成,已生成匹配码</div>\n <div className=\"mb-3 text-2xl font-bold tracking-widest text-emerald-900\">{matchCode}</div>\n <div className=\"mb-3 text-xs text-emerald-800\">过期时间:{new Date(expiresAt).toLocaleString()}</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"rounded-md bg-emerald-600 px-3 py-2 text-white hover:bg-emerald-700\"\n >\n 复制匹配码\n </button>\n <a\n href={downloadUrlPath}\n className=\"rounded-md border border-emerald-400 bg-white px-3 py-2 text-emerald-700 hover:bg-emerald-100\"\n >\n 打开下载页\n </a>\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport {\n defaultVocaloidBoothConfig,\n normalizeVocaloidBoothConfig,\n type VocaloidBoothConfig,\n} from '../core';\n\nexport interface BoothConfigPageProps {\n initialConfig?: Partial<VocaloidBoothConfig>;\n onSave?: (config: VocaloidBoothConfig) => Promise<void> | void;\n}\n\nexport const BoothConfigPage: React.FC<BoothConfigPageProps> = ({ initialConfig, onSave }) => {\n const [config, setConfig] = useState<VocaloidBoothConfig>(\n normalizeVocaloidBoothConfig(initialConfig)\n );\n const [saving, setSaving] = useState(false);\n\n const extText = useMemo(() => config.allowedExtensions.join(','), [config.allowedExtensions]);\n\n const update = <K extends keyof VocaloidBoothConfig>(key: K, value: VocaloidBoothConfig[K]) =>\n setConfig((prev) => ({ ...prev, [key]: value }));\n\n const save = async () => {\n setSaving(true);\n try {\n const normalized = normalizeVocaloidBoothConfig(config);\n setConfig(normalized);\n await onSave?.(normalized);\n } finally {\n setSaving(false);\n }\n };\n\n const reset = () => setConfig(defaultVocaloidBoothConfig);\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm space-y-3\">\n <h3 className=\"text-lg font-semibold\">Vocaloid Booth 配置页</h3>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <input className=\"rounded border px-3 py-2\" value={config.boothId} onChange={(e) => update('boothId', e.target.value)} placeholder=\"boothId\" />\n <input className=\"rounded border px-3 py-2\" value={config.title} onChange={(e) => update('title', e.target.value)} placeholder=\"标题\" />\n <input className=\"rounded border px-3 py-2 md:col-span-2\" value={config.description ?? ''} onChange={(e) => update('description', e.target.value)} placeholder=\"描述\" />\n\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.defaultTtlHours} onChange={(e) => update('defaultTtlHours', Number(e.target.value) || 1)} placeholder=\"默认保存时长(小时)\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxFiles} onChange={(e) => update('maxFiles', Number(e.target.value) || 1)} placeholder=\"最大文件数\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxSingleFileSizeMb} onChange={(e) => update('maxSingleFileSizeMb', Number(e.target.value) || 1)} placeholder=\"单文件上限 MB\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxTotalFileSizeMb} onChange={(e) => update('maxTotalFileSizeMb', Number(e.target.value) || 1)} placeholder=\"总大小上限 MB\" />\n\n <textarea\n className=\"rounded border px-3 py-2 md:col-span-2\"\n rows={3}\n value={extText}\n onChange={(e) =>\n update(\n 'allowedExtensions',\n e.target.value\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean)\n )\n }\n placeholder=\"允许后缀,逗号分隔\"\n />\n </div>\n\n <div className=\"flex gap-2\">\n <button className=\"rounded bg-indigo-600 px-3 py-2 text-white\" disabled={saving} onClick={save}>\n {saving ? '保存中...' : '保存配置'}\n </button>\n <button className=\"rounded border px-3 py-2\" onClick={reset}>\n 恢复默认\n </button>\n </div>\n </div>\n );\n};\n","/**\n * React Native 平台存储适配器 (AsyncStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 动态导入 AsyncStorage(避免在非 RN 环境报错)\nlet AsyncStorage: any = null;\n\ntry {\n AsyncStorage = require('@react-native-async-storage/async-storage').default;\n} catch (e) {\n // AsyncStorage 不可用(非 React Native 环境)\n // 这是正常的,不需要警告\n}\n\nexport class ReactNativeStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n if (!AsyncStorage) return null;\n\n try {\n return await AsyncStorage.getItem(key);\n } catch (error) {\n console.error('[ReactNativeStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.setItem(key, value);\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[ReactNativeStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.removeItem(key);\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[ReactNativeStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.clear();\n } catch (error) {\n console.error('[ReactNativeStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // React Native 没有原生的跨实例存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * React Native AsyncStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ReactNativeStorageAdapter } from '../adapters/react-native-adapter';\n\n// 创建单例适配器\nconst asyncStorage = new ReactNativeStorageAdapter();\n\n/**\n * React Native 的 AsyncStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useAsyncStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(asyncStorage, key, defaultValue);\n}\n\n","/**\n * 小程序平台存储适配器 (wx.storage / Taro.storage)\n * 仅在小程序环境下加载和使用\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 延迟加载 Taro(仅在小程序环境)\nlet Taro: any = null;\nlet taroLoadPromise: Promise<void> | null = null;\nlet isMiniAppEnvironment: boolean | null = null;\n\n/**\n * 检测是否是小程序环境\n */\nfunction checkIsMiniApp(): boolean {\n if (isMiniAppEnvironment !== null) return isMiniAppEnvironment;\n\n // 服务端环境,不是小程序\n if (typeof window === 'undefined') {\n isMiniAppEnvironment = false;\n return false;\n }\n\n // 检测是否有小程序全局对象\n const globalObj = window as any;\n isMiniAppEnvironment = !!(\n globalObj.wx || // 微信小程序\n globalObj.my || // 支付宝小程序\n globalObj.swan || // 百度小程序\n globalObj.tt || // 抖音小程序\n globalObj.qq || // QQ 小程序\n globalObj.Taro // Taro 环境\n );\n\n return isMiniAppEnvironment;\n}\n\n/**\n * 加载 Taro(仅在小程序环境)\n */\nasync function loadTaro() {\n // 如果不是小程序环境,直接返回\n if (!checkIsMiniApp()) {\n return;\n }\n\n if (Taro) return;\n if (taroLoadPromise) return taroLoadPromise;\n\n taroLoadPromise = (async () => {\n try {\n // 使用动态导入,仅在小程序环境加载\n // 使用 Function 构造器来避免 TypeScript 在编译时解析模块\n const importTaro = new Function('return import(\"@tarojs/taro\")');\n const taroModule = await importTaro();\n Taro = taroModule.default || taroModule;\n } catch (e) {\n // Taro 不可用(非小程序环境或未安装)\n console.warn('[MiniAppStorage] Taro is not available. This is expected in non-MiniApp environments.');\n }\n })();\n\n return taroLoadPromise;\n}\n\nexport class MiniAppStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非小程序环境,直接返回 null\n if (!checkIsMiniApp()) {\n return null;\n }\n\n await loadTaro();\n if (!Taro) return null;\n\n try {\n const result = await Taro.getStorage({ key });\n return result.data;\n } catch (error: any) {\n // 如果 key 不存在,Taro 会抛出错误\n if (error.errMsg?.includes('data not found')) {\n return null;\n }\n console.error('[MiniAppStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.setStorage({ key, data: value });\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[MiniAppStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.removeStorage({ key });\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[MiniAppStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.clearStorage();\n } catch (error) {\n console.error('[MiniAppStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // 小程序没有原生的存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * 小程序 Taro Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { MiniAppStorageAdapter } from '../adapters/miniapp-adapter';\n\n// 创建单例适配器\nconst taroStorage = new MiniAppStorageAdapter();\n\n/**\n * 小程序的 Taro Storage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useTaroStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(taroStorage, key, defaultValue);\n}\n\n","/**\n * Electron 桌面端存储适配器\n *\n * Electron 渲染进程可以使用 localStorage(和 Web 相同)\n * 但我们提供专门的适配器以支持未来可能的主进程存储需求\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查 localStorage 是否可用(Electron 渲染进程)\n */\nconst hasLocalStorage = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class ElectronStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非 Electron 或无 localStorage 环境返回 null\n if (!hasLocalStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[ElectronStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非 Electron 或无 localStorage 环境静默忽略\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n this.notifyListeners(key, value);\n\n // 触发自定义事件(用于跨窗口同步)\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n this.notifyListeners(key, null);\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.clear();\n\n // 通知所有监听器\n this.listeners.forEach((listeners, key) => {\n listeners.forEach((listener) => {\n listener(key, null);\n });\n });\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key: '*', value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n /**\n * 添加存储变化监听器\n * 支持跨 Electron 窗口同步\n */\n addChangeListener(listener: (key: string, newValue: string | null) => void): () => void {\n // 添加到监听器集合\n const allListeners = this.listeners.get('*') || new Set();\n allListeners.add(listener);\n this.listeners.set('*', allListeners);\n\n // Storage 事件监听(同源窗口)\n const storageHandler = (e: StorageEvent) => {\n if (e.key) {\n listener(e.key, e.newValue);\n }\n };\n\n // 自定义事件监听(Electron 窗口间通信)\n const customHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { key, value } = customEvent.detail;\n if (key === '*') {\n // clear 操作\n this.listeners.forEach((_, k) => listener(k, null));\n } else {\n listener(key, value);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', storageHandler);\n window.addEventListener('electron-storage-change', customHandler);\n }\n\n // 返回清理函数\n return () => {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n window.removeEventListener('electron-storage-change', customHandler);\n }\n };\n }\n\n removeChangeListener(listener: (key: string, newValue: string | null) => void): void {\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n }\n }\n\n /**\n * 通知监听器\n */\n private notifyListeners(key: string, value: string | null): void {\n // 通知特定 key 的监听器\n const keyListeners = this.listeners.get(key);\n if (keyListeners) {\n keyListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n\n // 通知通配符监听器\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n }\n}\n\n","'use client';\n\n/**\n * Electron 桌面端 Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ElectronStorageAdapter } from '../adapters/electron-adapter';\n\n// 创建单例适配器\nconst electronStorage = new ElectronStorageAdapter();\n\n/**\n * Electron 桌面端的 Storage Hook\n *\n * 在 Electron 渲染进程中使用 localStorage\n * 支持跨窗口同步\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n *\n * @example\n * ```tsx\n * const [token, setToken, removeToken] = useElectronStorage('auth-token', '')\n * ```\n */\nexport function useElectronStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(electronStorage, key, defaultValue);\n}\n\n"]}
|