sa2kit 1.6.3 → 1.6.5
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/audioDetection/index.js.map +1 -1
- package/dist/audioDetection/index.mjs.map +1 -1
- package/dist/auth/index.d.mts +16 -1
- package/dist/auth/index.d.ts +16 -1
- package/dist/auth/index.js +42 -23
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/index.mjs +26 -3
- package/dist/auth/index.mjs.map +1 -1
- package/dist/auth/middleware/index.js +3 -3
- package/dist/auth/middleware/index.mjs +2 -2
- package/dist/auth/routes/index.js +14 -14
- package/dist/auth/routes/index.mjs +2 -2
- package/dist/auth/services/index.d.mts +1 -0
- package/dist/auth/services/index.d.ts +1 -0
- package/dist/auth/services/index.js +7 -7
- package/dist/auth/services/index.mjs +1 -1
- package/dist/calendar/index.d.mts +1311 -0
- package/dist/calendar/index.d.ts +1311 -0
- package/dist/calendar/index.js +5360 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/calendar/index.mjs +5294 -0
- package/dist/calendar/index.mjs.map +1 -0
- package/dist/calendar/routes/index.d.mts +118 -0
- package/dist/calendar/routes/index.d.ts +118 -0
- package/dist/calendar/routes/index.js +335 -0
- package/dist/calendar/routes/index.js.map +1 -0
- package/dist/calendar/routes/index.mjs +327 -0
- package/dist/calendar/routes/index.mjs.map +1 -0
- package/dist/calendar/server.d.mts +1189 -0
- package/dist/calendar/server.d.ts +1189 -0
- package/dist/calendar/server.js +219 -0
- package/dist/calendar/server.js.map +1 -0
- package/dist/calendar/server.mjs +165 -0
- package/dist/calendar/server.mjs.map +1 -0
- package/dist/{chunk-EBP7AE6F.js → chunk-2ODO4HEI.js} +48 -20
- package/dist/chunk-2ODO4HEI.js.map +1 -0
- package/dist/{chunk-RCNNVNLT.mjs → chunk-3BGPZN4X.mjs} +8 -3
- package/dist/chunk-3BGPZN4X.mjs.map +1 -0
- package/dist/{chunk-FV3FNHQY.js → chunk-6W5BMXJG.js} +4 -4
- package/dist/{chunk-FV3FNHQY.js.map → chunk-6W5BMXJG.js.map} +1 -1
- package/dist/{chunk-NMF4ANIC.js → chunk-7Z5LLJ3A.js} +8 -2
- package/dist/chunk-7Z5LLJ3A.js.map +1 -0
- package/dist/{chunk-42IJ7HEI.js → chunk-CD77U7LZ.js} +5 -5
- package/dist/{chunk-42IJ7HEI.js.map → chunk-CD77U7LZ.js.map} +1 -1
- package/dist/{chunk-6BL3AZGD.js → chunk-DUHZ7VZP.js} +2 -2
- package/dist/chunk-DUHZ7VZP.js.map +1 -0
- package/dist/{chunk-6VHWOPRR.mjs → chunk-ESRCX5TQ.mjs} +3 -3
- package/dist/{chunk-6VHWOPRR.mjs.map → chunk-ESRCX5TQ.mjs.map} +1 -1
- package/dist/chunk-FJU3NA6B.js +318 -0
- package/dist/chunk-FJU3NA6B.js.map +1 -0
- package/dist/{chunk-QKXKXAAV.js → chunk-G4AMEDO5.js} +2 -2
- package/dist/{chunk-QKXKXAAV.js.map → chunk-G4AMEDO5.js.map} +1 -1
- package/dist/chunk-GAC4J5GX.js +228 -0
- package/dist/chunk-GAC4J5GX.js.map +1 -0
- package/dist/chunk-KFDEOLDH.mjs +100 -0
- package/dist/chunk-KFDEOLDH.mjs.map +1 -0
- package/dist/chunk-NRYHBGU6.js +106 -0
- package/dist/chunk-NRYHBGU6.js.map +1 -0
- package/dist/chunk-OCIJT5VO.mjs +306 -0
- package/dist/chunk-OCIJT5VO.mjs.map +1 -0
- package/dist/{chunk-U2L6V7KD.mjs → chunk-OCR5DS4C.mjs} +2 -2
- package/dist/chunk-OCR5DS4C.mjs.map +1 -0
- package/dist/{chunk-IBLB7ARJ.mjs → chunk-QAT2RWAO.mjs} +3 -3
- package/dist/{chunk-IBLB7ARJ.mjs.map → chunk-QAT2RWAO.mjs.map} +1 -1
- package/dist/chunk-T6TE7GTY.mjs +218 -0
- package/dist/chunk-T6TE7GTY.mjs.map +1 -0
- package/dist/{chunk-MBG4DBGP.mjs → chunk-ZCLAF3XN.mjs} +47 -19
- package/dist/chunk-ZCLAF3XN.mjs.map +1 -0
- package/dist/{chunk-6LEA37ZM.mjs → chunk-ZYXF3L6T.mjs} +2 -2
- package/dist/{chunk-6LEA37ZM.mjs.map → chunk-ZYXF3L6T.mjs.map} +1 -1
- package/dist/imageCrop/index.js.map +1 -1
- package/dist/imageCrop/index.mjs.map +1 -1
- package/dist/{index-DtLpANUB.d.mts → index-DSel44Ke.d.mts} +24 -1
- package/dist/{index-DtLpANUB.d.ts → index-DSel44Ke.d.ts} +24 -1
- package/dist/index.d.mts +433 -3
- package/dist/index.d.ts +433 -3
- package/dist/index.js +2148 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1980 -33
- package/dist/index.mjs.map +1 -1
- package/dist/mmd/index.d.mts +78 -1
- package/dist/mmd/index.d.ts +78 -1
- package/dist/mmd/index.js +397 -50
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +399 -53
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/music/index.d.mts +54 -5
- package/dist/music/index.d.ts +54 -5
- package/dist/music/index.js +35 -435
- package/dist/music/index.js.map +1 -1
- package/dist/music/index.mjs +2 -424
- package/dist/music/index.mjs.map +1 -1
- package/dist/music/server/index.d.mts +1 -1
- package/dist/music/server/index.d.ts +1 -1
- package/dist/music/server/index.js +14 -6
- package/dist/music/server/index.mjs +1 -1
- package/dist/testYourself/admin/index.js +3 -3
- package/dist/testYourself/admin/index.mjs +1 -1
- package/dist/testYourself/index.js +7 -7
- package/dist/testYourself/index.js.map +1 -1
- package/dist/testYourself/index.mjs +2 -2
- package/dist/testYourself/index.mjs.map +1 -1
- package/dist/universalFile/index.d.mts +125 -7
- package/dist/universalFile/index.d.ts +125 -7
- package/dist/universalFile/index.js +1253 -30
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +1244 -23
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +5 -1
- package/dist/utils/index.d.ts +5 -1
- package/dist/utils/index.js +13 -9
- package/dist/utils/index.mjs +1 -1
- package/package.json +18 -3
- package/dist/chunk-6BL3AZGD.js.map +0 -1
- package/dist/chunk-EBP7AE6F.js.map +0 -1
- package/dist/chunk-MBG4DBGP.mjs.map +0 -1
- package/dist/chunk-NMF4ANIC.js.map +0 -1
- package/dist/chunk-RCNNVNLT.mjs.map +0 -1
- package/dist/chunk-U2L6V7KD.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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"],"names":["useState","useRef","React","useCallback","useEffect","Loader2","X","Send"],"mappings":"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","file":"index.mjs","sourcesContent":["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","import React, { useState, useRef } from 'react';\nimport { useOCR } from '../hooks/useOCR';\nimport { Loader2, Upload, FileText, Image as ImageIcon, X } from 'lucide-react';\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={`p-6 border-2 border-dashed rounded-xl transition-all ${\n isProcessing ? 'border-blue-400 bg-blue-50/10' : 'border-gray-200 hover:border-blue-400'\n } ${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={`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","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';\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={`p-6 border-2 border-dashed rounded-xl transition-all ${\n isProcessing ? 'border-purple-400 bg-purple-50/10' : 'border-gray-200 hover:border-purple-400'\n } ${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","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","import React, { useState } from 'react';\nimport { useSentimentAnalysis } from '../hooks/useSentimentAnalysis';\nimport { MessageSquare, Send, Loader2, Smile, Frown, Meh } from 'lucide-react';\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={`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={`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","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';\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={`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={`flex ${msg.role === 'user' ? 'justify-end' : 'justify-start'} animate-in fade-in slide-in-from-bottom-2`}>\n <div className={`flex gap-3 max-w-[85%] ${msg.role === 'user' ? 'flex-row-reverse' : ''}`}>\n <div className={`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={`p-3 rounded-2xl shadow-sm text-sm ${\n 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 }`}>\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"]}
|
|
1
|
+
{"version":3,"sources":["../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/components/ui/button.tsx","../src/components/ui/card.tsx","../src/components/ui/badge.tsx","../src/components/ui/input.tsx","../src/components/ui/label.tsx","../src/components/ui/tabs.tsx","../src/components/ui/dialog.tsx","../src/components/ui/alert-dialog.tsx","../src/components/ui/dropdown-menu.tsx","../src/components/ui/popover.tsx","../src/components/ui/progress.tsx","../src/components/ui/scroll-area.tsx","../src/components/ui/select.tsx","../src/components/ui/separator.tsx","../src/components/ui/sheet.tsx","../src/components/ui/textarea.tsx","../src/components/ui/tooltip.tsx","../src/components/ui/avatar.tsx","../src/components/CollisionBalls.tsx","../src/components/Timeline.tsx","../src/components/popover/internal/Modal.tsx","../src/components/popover/internal/Avatar.tsx","../src/components/popover/ProfileModal.tsx","../src/components/popover/internal/Badge.tsx","../src/components/popover/internal/BadgeList.tsx","../src/components/popover/internal/Stat.tsx","../src/components/popover/internal/StatList.tsx","../src/components/popover/ProfileButton.tsx","../src/components/popover/AutoOpenModal.tsx","../src/components/navigation/NavigationItem.tsx","../src/components/navigation/Navigation.tsx","../src/components/navigation/NavigationToggle.tsx","../src/components/menu/FloatingMenu.tsx","../src/components/Grid.tsx","../src/components/Avatar.tsx"],"names":["useState","useRef","React","useCallback","useEffect","Loader2","X","Send","React6","React7","cva","React8","React9","React10","React11","React12","React13","React14","React15","React16","React17","React18","Check","Separator","React19","SheetPrimitive","React20","React21","React22","React23","draggedBall","width","height","mousePos","Avatar","Badge"],"mappings":"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","file":"index.mjs","sourcesContent":["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","import React, { useState, useRef } from 'react';\nimport { useOCR } from '../hooks/useOCR';\nimport { Loader2, Upload, FileText, Image as ImageIcon, X } from 'lucide-react';\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={`p-6 border-2 border-dashed rounded-xl transition-all ${\n isProcessing ? 'border-blue-400 bg-blue-50/10' : 'border-gray-200 hover:border-blue-400'\n } ${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={`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","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';\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={`p-6 border-2 border-dashed rounded-xl transition-all ${\n isProcessing ? 'border-purple-400 bg-purple-50/10' : 'border-gray-200 hover:border-purple-400'\n } ${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","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","import React, { useState } from 'react';\nimport { useSentimentAnalysis } from '../hooks/useSentimentAnalysis';\nimport { MessageSquare, Send, Loader2, Smile, Frown, Meh } from 'lucide-react';\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={`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={`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","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';\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={`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={`flex ${msg.role === 'user' ? 'justify-end' : 'justify-start'} animate-in fade-in slide-in-from-bottom-2`}>\n <div className={`flex gap-3 max-w-[85%] ${msg.role === 'user' ? 'flex-row-reverse' : ''}`}>\n <div className={`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={`p-3 rounded-2xl shadow-sm text-sm ${\n 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 }`}>\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","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } 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\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n\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}\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}\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}\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}\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} />\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}\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} />\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}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\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 React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\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}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\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 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow\",\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\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}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\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}\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}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\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\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/utils\"\nimport { buttonVariants } from \"@/components/ui/button\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\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}\n />\n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\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}\n />\n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold\", className)}\n {...props}\n />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action\n ref={ref}\n className={cn(buttonVariants(), className)}\n {...props}\n />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(\n buttonVariants({ variant: \"outline\" }),\n \"mt-2 sm:mt-0\",\n className\n )}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\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 * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\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 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\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\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n \"relative h-2 w-full overflow-hidden rounded-full bg-primary/20\",\n className\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn(\"relative overflow-hidden\", className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n \"flex touch-none select-none transition-colors\",\n orientation === \"vertical\" &&\n \"h-full w-2.5 border-l border-l-transparent p-[1px]\",\n orientation === \"horizontal\" &&\n \"h-2.5 flex-col border-t border-t-transparent p-[1px]\",\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\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 data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-sm font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\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 focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\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\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n 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}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/utils\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n)\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\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}\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}\n />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\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}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@/utils\"\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className\n )}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\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}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","'use client';\n\nimport React, { useEffect, useRef, useState } from \"react\";\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\nconst 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={`px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors ${\n isShaking ? \"animate-pulse\" : \"\"\n }`}\n >\n 摇一摇\n </button>\n <button\n onClick={slowdown}\n className={`px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors ${\n isShaking ? \"animate-pulse\" : \"\"\n }`}\n >\n 减速\n </button>\n </div>\n </div>\n );\n};\n\nexport default CollisionBalls;\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\nconst 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 ReactDOM from 'react-dom';\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 maskClosable?: boolean;\n showCloseButton?: boolean;\n className?: string;\n contentClassName?: string;\n zIndex?: number;\n children: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n title,\n width = 400,\n height = 'auto',\n maskClosable = true,\n showCloseButton = true,\n className = '',\n contentClassName = '',\n zIndex = 1000,\n children,\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n const [mounted, setMounted] = useState(false);\n\n // 确保只在客户端渲染Portal\n useEffect(() => {\n setMounted(true);\n return () => {\n setMounted(false);\n };\n }, []);\n\n useEffect(() => {\n // 处理按ESC键关闭弹窗\n const handleEscKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n // 禁止背景滚动\n if (isOpen && typeof document !== 'undefined' && document.body) {\n document.body.style.overflow = 'hidden';\n document.addEventListener('keydown', handleEscKey);\n }\n\n return () => {\n // 安全地恢复样式和移除监听器\n try {\n if (typeof document !== 'undefined' && document.body) {\n document.body.style.overflow = '';\n document.removeEventListener('keydown', handleEscKey);\n }\n } catch (error) {\n console.warn('清理Modal事件监听器时出错:', error);\n }\n };\n }, [isOpen, onClose]);\n\n // 处理点击遮罩层关闭\n const handleMaskClick = (e: React.MouseEvent) => {\n if (maskClosable && e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // 弹窗内容样式\n const modalStyle = {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n zIndex,\n };\n\n // 只在客户端且Modal打开时渲染\n if (!mounted || !isOpen) return null;\n\n // 安全检查document.body是否存在\n if (typeof document === 'undefined' || !document.body) {\n return null;\n }\n\n // 使用Portal渲染到body下,避免层级问题\n try {\n return ReactDOM.createPortal(\n <div \n className=\"fixed inset-0 bg-black/50 flex items-center justify-center z-[1000] animate-fade-in\" \n onClick={handleMaskClick}\n >\n <div\n className={cn(\n \"bg-white rounded-lg shadow-[0_4px_20px_rgba(0,0,0,0.15)] max-w-[90vw] max-h-[90vh] overflow-hidden flex flex-col animate-slide-up\",\n className\n )}\n style={modalStyle}\n ref={modalRef}\n >\n {(title || showCloseButton) && (\n <div className=\"flex justify-between items-center px-5 py-4 border-b border-gray-100\">\n {title && <div className=\"text-lg font-semibold text-gray-800 m-0\">{title}</div>}\n {showCloseButton && (\n <button \n className=\"bg-transparent border-none text-2xl leading-none text-gray-400 cursor-pointer p-0 m-0 w-6 h-6 flex items-center justify-center transition-colors hover:text-gray-800\" \n onClick={onClose}\n >\n ×\n </button>\n )}\n </div>\n )}\n <div className={cn(\"p-5 overflow-y-auto\", contentClassName)}>\n {children}\n </div>\n </div>\n </div>,\n document.body\n );\n } catch (error) {\n console.error('Portal创建失败:', error);\n return null;\n }\n};\n\nexport default Modal; ","import React from 'react';\nimport { cn } from '@/utils';\n\ninterface AvatarProps {\n src: string;\n alt: string;\n size?: number;\n borderColor?: string;\n className?: string;\n}\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n size = 80,\n borderColor,\n className = '',\n}) => {\n return (\n <div\n className={cn(\"rounded-full overflow-hidden border-[3px] border-transparent\", className)}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n borderColor: borderColor || 'transparent',\n }}\n >\n <img src={src} alt={alt} className=\"w-full h-full object-cover\" />\n </div>\n );\n};","import React from 'react';\nimport Modal, { ModalProps } from './internal/Modal';\nimport { Avatar } from './internal/Avatar';\nimport { ProfileData, SocialLink } from './types';\nimport { cn } from '@/utils';\n\nconst themeStyles = {\n light: \"\",\n dark: \"bg-[#222] text-[#eee]\",\n blue: \"bg-[#f0f8ff]\",\n};\n\nexport interface ProfileModalProps extends Omit<ModalProps, 'title' | 'children'> {\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 children?: React.ReactNode;\n}\n\nconst ProfileModal: React.FC<ProfileModalProps> = ({\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 ...modalProps\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=\"w-8 h-8 flex items-center justify-center bg-gray-100 rounded-full text-gray-800 no-underline transition-all hover:bg-gray-200 hover:-translate-y-0.5\"\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=\"mt-4 border-t border-gray-100 pt-4\">\n {Object.entries(data.contacts).map(([type, value], index) => (\n <div \n key={index} \n className=\"flex mb-2 cursor-pointer py-1.5 hover:bg-gray-50 transition-colors\"\n onClick={() => onContactClick && onContactClick(type, value)}\n >\n <span className=\"font-medium text-gray-500 w-[70px] shrink-0\">{type}:</span>\n <span className=\"text-gray-800\">{value}</span>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <Modal\n {...modalProps}\n title={''}\n className={cn(\"w-[500px]\", themeStyles[themeName as keyof typeof themeStyles] || \"\")}\n >\n <div className=\"flex gap-5 mb-5\">\n {showAvatar && data.avatar && (\n <div \n className=\"shrink-0\"\n onClick={onAvatarClick}\n style={{ cursor: onAvatarClick ? 'pointer' : 'default' }}\n >\n <Avatar \n src={data.avatar} \n alt={data.name} \n size={avatarSize} \n />\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n <h2 className=\"text-2xl font-semibold m-0 mb-1 text-gray-800\">{data.name}</h2>\n {data.title && <div className=\"text-sm text-gray-500 mb-2\">{data.title}</div>}\n {showSocial && renderSocialLinks()}\n </div>\n </div>\n \n {showBio && data.bio && (\n <div className=\"mb-5 leading-relaxed text-gray-600\">\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 </Modal>\n );\n};\n\nexport default ProfileModal; ","import { BadgeType } from \"..\";\nimport { cn } from '@/utils';\n\ninterface BadgeProps extends BadgeType {\n className?: string;\n}\n\nconst badgeTypeStyles = {\n default: \"bg-gray-100 text-gray-600\",\n primary: \"bg-blue-50 text-blue-600\",\n success: \"bg-green-50 text-green-600\",\n warning: \"bg-yellow-50 text-yellow-600\",\n danger: \"bg-red-50 text-red-600\",\n info: \"bg-blue-50 text-blue-600\",\n};\n\nexport const Badge: React.FC<BadgeProps> = ({\n label,\n type = 'default',\n icon,\n className = '',\n}) => {\n return (\n <span className={cn(\n \"inline-flex items-center px-2 py-1 rounded text-xs font-medium\",\n badgeTypeStyles[type as keyof typeof badgeTypeStyles] || badgeTypeStyles.default,\n className\n )}>\n {icon && <span className=\"mr-1 flex items-center\">{icon}</span>}\n <span>{label}</span>\n </span>\n );\n};\n","import { BadgeType } from \"..\";\nimport { Badge } from \"./Badge\";\nimport { cn } from '@/utils';\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 key={index} {...badge} />\n ))}\n </div>\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';\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 style={{ marginTop: 20, borderTop: '1px solid #eee', paddingTop: 15 }}>\n <h3 style={{ fontSize: 16, marginBottom: 10 }}>专业技能</h3>\n <p style={{ margin: 0, lineHeight: 1.6 }}>\n 精通React、Vue、Angular等前端框架,熟悉TypeScript、JavaScript、CSS3、HTML5等前端技术。\n 有丰富的大型项目开发经验,能独立负责前端架构设计。\n </p>\n </div>\n ),\n};\n\ninterface ProfileButtonProps {\n data?: ProfileData;\n buttonText?: string;\n buttonClassName?: string;\n modalTheme?: 'light' | 'dark' | 'blue';\n}\n\n/**\n * 个人信息按钮组件,点击后显示个人信息弹窗\n */\nconst ProfileButton: React.FC<ProfileButtonProps> = ({\n data = exampleProfileData,\n buttonText = '查看个人信息',\n buttonClassName = '',\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 onClick={openModal} className={buttonClassName}>\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\n/**\n * 示例用法:\n * \n * import ProfileButton from '@/utils/popWindow/selfInfo';\n * \n * // 使用默认数据\n * <ProfileButton />\n * \n * // 使用自定义数据\n * <ProfileButton \n * data={customData} \n * buttonText=\"查看我的资料\" \n * modalTheme=\"blue\" \n * />\n * \n * // 自定义按钮样式\n * <ProfileButton buttonClassName=\"myCustomButton\" />\n */\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\ninterface AutoOpenModalProps {\n data: ProfileData;\n delay?: number; // 延迟显示时间(毫秒)\n themeName?: 'light' | 'dark' | 'blue';\n onClose?: () => void;\n}\n\n/**\n * 自动打开个人信息弹窗组件\n * 页面加载后自动显示弹窗\n */\nconst 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; "," 'use client';\n\nimport React from 'react';\nimport { NavigationItem, NavigationDirection } from './types';\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={`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';\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={`${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';\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={`\n fixed ${getPositionClasses()} z-[100]\n p-3 rounded-xl\n bg-white/90 backdrop-blur-md\n shadow-lg hover:shadow-xl\n border border-gray-200/50\n transition-all duration-300 ease-in-out\n hover:scale-105 active:scale-95\n 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={`\n block w-5 h-0.5 bg-gray-600 rounded-full\n transform transition-all duration-300 ease-in-out\n ${isOpen ? 'rotate-45 translate-y-0.5' : ''}\n `}\n />\n <span\n className={`\n block w-5 h-0.5 bg-gray-600 rounded-full\n 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={`\n block w-5 h-0.5 bg-gray-600 rounded-full\n 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';\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={`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={`\n flex items-center justify-center \n w-12 h-12 md:w-12 md:h-12 \n bg-white rounded-full \n shadow-md hover:shadow-lg \n cursor-grab active:cursor-grabbing \n transition-all duration-200 \n 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={`\n absolute top-0\n bg-white rounded-lg shadow-xl \n p-3 min-w-[200px] md:min-w-[200px] max-w-[300px]\n z-[1000] \n 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;","import React from 'react';\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={`grid ${gridColsClasses} ${gapClass} ${className}`.trim()}\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 }","'use client';\n\nimport React from 'react';\n\ninterface AvatarProps {\n src?: string;\n size?: 'small' | 'medium' | 'large';\n mood?: 'online' | 'offline' | 'away';\n statusText?: string;\n onClick?: () => void;\n}\n\nconst Avatar: React.FC<AvatarProps> = ({\n src,\n size = 'medium',\n mood = 'online',\n statusText,\n onClick\n}) => {\n const sizeClasses = {\n small: 'w-8 h-8',\n medium: 'w-12 h-12',\n large: 'w-16 h-16'\n };\n\n const moodColors = {\n online: 'bg-green-500',\n offline: 'bg-gray-500',\n away: 'bg-yellow-500'\n };\n\n return (\n <div className=\"relative inline-block\" onClick={onClick}>\n <img\n src={src || \"/images/avatar.jpg\"}\n alt=\"User Avatar\"\n className={`${sizeClasses[size]} rounded-full object-cover border-2 border-white shadow-md cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all duration-200`}\n />\n <div\n className={`absolute bottom-0 right-0 w-3 h-3 rounded-full border-2 border-white ${moodColors[mood]}`}\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-gray-600\">{statusText}</span>\n </div>\n )}\n </div>\n );\n};\n\nexport default Avatar;\n"]}
|