diff --git a/pages/Base64Converter/Base64ConverterSection.tsx b/pages/Base64Converter/Base64ConverterSection.tsx index 3cc0d4e..8639af9 100644 --- a/pages/Base64Converter/Base64ConverterSection.tsx +++ b/pages/Base64Converter/Base64ConverterSection.tsx @@ -57,7 +57,7 @@ export default function Base64ConverterSection({ mode }: Base64ConverterSectionP }; return ( -
+
fileInputRef.current?.click()} className={cn( - 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer transition-all duration-300', + 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer', isDragging ? 'border-primary bg-primary/10' : info @@ -107,7 +107,7 @@ export default function Base64ConverterSection({ mode }: Base64ConverterSectionP {isLoading ? (
) : info ? ( -
+
{mode === 'image' && result && (
)} - + {info.name} diff --git a/pages/Base64Converter/FileMode.tsx b/pages/Base64Converter/FileMode.tsx index c331fac..d40fd41 100644 --- a/pages/Base64Converter/FileMode.tsx +++ b/pages/Base64Converter/FileMode.tsx @@ -45,7 +45,7 @@ export default function FileMode() { }; return ( -
+
fileInputRef.current?.click()} className={cn( - 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer transition-all duration-300', + 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer', isDragging ? 'border-primary bg-primary/10' : info @@ -100,7 +100,7 @@ export default function FileMode() {
) : info ? (
- + {info.name} diff --git a/pages/Base64Converter/ImageMode.tsx b/pages/Base64Converter/ImageMode.tsx index a61285a..eafb0c3 100644 --- a/pages/Base64Converter/ImageMode.tsx +++ b/pages/Base64Converter/ImageMode.tsx @@ -52,7 +52,7 @@ export default function ImageMode() { }; return ( -
+
fileInputRef.current?.click()} className={cn( - 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer transition-all duration-300', + 'flex flex-col items-center justify-center min-h-[190px] border-2 border-dashed rounded-2xl p-8 cursor-pointer', isDragging ? 'border-primary bg-primary/10' : info @@ -103,7 +103,7 @@ export default function ImageMode() { {isLoading ? (
) : info ? ( -
+
{result && (
{decoded && ( -
+
+
{/* 受控方向切流中枢 */}
+
{t('imageDataUriHint')} @@ -134,7 +134,7 @@ export default function TextMode({ onSwitchToImageMode }: TextModeProps = {}) { variant="ghost" size="sm" onClick={onSwitchToImageMode} - className="h-7 rounded-md text-xs font-bold text-primary hover:text-primary hover:bg-primary/20 dark:hover:bg-primary/10 transition-colors px-2.5" + className="h-7 rounded-md text-xs font-bold text-primary hover:text-primary hover:bg-primary/20 dark:hover:bg-primary/10 px-2.5" > {t('switchToImageMode')} @@ -143,7 +143,7 @@ export default function TextMode({ onSwitchToImageMode }: TextModeProps = {}) { {/* 5. 编码/解码核心数据承载流卡片 */} {output && ( -
+
{outputLabel} diff --git a/pages/Base64Converter/index.tsx b/pages/Base64Converter/index.tsx index 5b53d44..dadb075 100644 --- a/pages/Base64Converter/index.tsx +++ b/pages/Base64Converter/index.tsx @@ -20,7 +20,7 @@ export default function Index() { ); return ( -
+
{/* 右侧指示小箭头 */} -
+
diff --git a/pages/Dashboard/index.tsx b/pages/Dashboard/index.tsx index 2a413ab..8479dda 100644 --- a/pages/Dashboard/index.tsx +++ b/pages/Dashboard/index.tsx @@ -16,7 +16,7 @@ export default function DashboardPage() {
{pageOrder.map((key) => { diff --git a/pages/HtmlToMarkdown/index.tsx b/pages/HtmlToMarkdown/index.tsx index aab869b..f860989 100644 --- a/pages/HtmlToMarkdown/index.tsx +++ b/pages/HtmlToMarkdown/index.tsx @@ -49,7 +49,7 @@ export default function HtmlToMarkdownPage() { - 彻底清除多余的 container max-w-7xl 这种网页大边距, - 统一收拢为我们先前在 Dashboard 页、JSON 工具箱制定的 p-4 space-y-4 标准极客桌面规格。 */ -
+
{/* 工具栏集成区 */}
@@ -72,7 +72,7 @@ export default function HtmlToMarkdownPage() { size="sm" onClick={handleDownload} disabled={!result.markdown} - className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm active:scale-95 transition-all" + className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm" > {t('download')} @@ -83,7 +83,7 @@ export default function HtmlToMarkdownPage() { variant="outline" size="sm" onClick={handleClear} - className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm active:scale-95 text-destructive hover:text-destructive hover:bg-destructive/5 dark:hover:bg-destructive/10 border-input/60 transition-all" + className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm text-destructive hover:text-destructive hover:bg-destructive/5 dark:hover:bg-destructive/10 border-input/60" > {t('clear')} @@ -95,7 +95,7 @@ export default function HtmlToMarkdownPage() { - 💡 核心修复点:将硬编码的 bg-red-50 实色,完美超进化为系统的全自适应透明色变体 */} {error && ( -
+
{error}
)} @@ -114,7 +114,7 @@ export default function HtmlToMarkdownPage() { - 只要用户用鼠标点击了内部的 textarea,外层整块精巧的圆角大边框会一帧内亮起 primary 系统的深色呼吸发光环, - 这种“全外包裹层框聚焦”的体验极大模仿了本地原生 IDE 的硬核专业体验! */ -
+
{/* 卡片头部:改用标准的灰色 bg-muted/50 */}
diff --git a/pages/JsonTools/DiffNavigator.tsx b/pages/JsonTools/DiffNavigator.tsx index 353b3f4..2ee84f3 100644 --- a/pages/JsonTools/DiffNavigator.tsx +++ b/pages/JsonTools/DiffNavigator.tsx @@ -30,7 +30,7 @@ export default function DiffNavigator({ return (
@@ -81,9 +81,9 @@ export default function DiffNavigator({ aria-label={t('jsonDiff:nextDiff')} onClick={onNext} className={cn( - 'p-1 rounded-md text-muted-foreground transition-all hover:bg-accent hover:text-foreground', + 'p-1 rounded-md text-muted-foreground hover:bg-accent hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', - 'disabled:pointer-events-none disabled:opacity-30 active:scale-95', // 4. 边界拦截:触底时优雅淡化并锁死点击 + 'disabled:pointer-events-none disabled:opacity-30', // 4. 边界拦截:触底时优雅淡化并锁死点击 )} > diff --git a/pages/JsonTools/DiffResult.tsx b/pages/JsonTools/DiffResult.tsx index e254446..08ec54b 100644 --- a/pages/JsonTools/DiffResult.tsx +++ b/pages/JsonTools/DiffResult.tsx @@ -197,7 +197,7 @@ const UnifiedRow = ({ depth, type, text, active, multiline }: UnifiedRowProps) = return (
+
{/* 输入区 */} +
{/* 结果栏精致头部 */}
diff --git a/pages/JsonTools/JsonFormatSection.tsx b/pages/JsonTools/JsonFormatSection.tsx index e1f3aa0..bc4b091 100644 --- a/pages/JsonTools/JsonFormatSection.tsx +++ b/pages/JsonTools/JsonFormatSection.tsx @@ -62,7 +62,7 @@ export default function JsonFormatSection() { : null; return ( -
+
{/* 工具控制栏 */}
@@ -95,7 +95,7 @@ export default function JsonFormatSection() { /> @@ -118,7 +118,7 @@ export default function JsonFormatSection() { {/* 格式化结果流面板展示 */} {result && result.formatted ? ( -
+
{/* 结果栏头部 */}
diff --git a/pages/JsonTools/JsonTree.tsx b/pages/JsonTools/JsonTree.tsx index fcd3f0d..597791d 100644 --- a/pages/JsonTools/JsonTree.tsx +++ b/pages/JsonTools/JsonTree.tsx @@ -135,7 +135,7 @@ const NodeRow = React.memo(
setOverride(expanded ? 'closed' : 'open')} className={cn( - 'group flex items-center gap-1 py-0.5 pr-2 text-xs font-mono select-none cursor-pointer rounded-sm transition-colors w-full h-[22px] leading-relaxed', + 'group flex items-center gap-1 py-0.5 pr-2 text-xs font-mono select-none cursor-pointer rounded-sm w-full h-[22px] leading-relaxed', theme.bg, isActive && 'bg-primary/10 relative before:absolute before:left-0 before:top-0 before:bottom-0 before:w-0.5 before:bg-blue-500 rounded-none ring-0', @@ -207,7 +207,7 @@ const NodeRow = React.memo(
+
setPageMode(v)} @@ -129,7 +129,7 @@ export default function Index() { /> {pageMode === 'diff' ? ( -
+
{ const { t } = useLazyTranslation('jwt'); return ( -
+
{title} @@ -70,7 +68,7 @@ export default function Index() { }, [debouncedInput]); return ( -
+
{/* 输入终端 */} +
{/* Header 分区:完美致敬 JWT.io 的鲜艳色彩,同时实现黑夜暗化自适应 */}
{/* Signature 签名区:完全对齐标准的 shadcn 骨架阶度 */} -
+
{t('jwt:signatureTitle')} diff --git a/pages/MarkdownToHtml/index.tsx b/pages/MarkdownToHtml/index.tsx index b27cfa3..a43eda3 100644 --- a/pages/MarkdownToHtml/index.tsx +++ b/pages/MarkdownToHtml/index.tsx @@ -175,7 +175,7 @@ export default function MarkdownToHtmlPage() { const showPreview = previewMode !== 'html'; return ( -
+
{/* 工具集成控制中枢 */}
@@ -196,7 +196,7 @@ export default function MarkdownToHtmlPage() { variant="outline" size="sm" onClick={handleClear} - className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm active:scale-95 text-destructive hover:text-destructive hover:bg-destructive/5 dark:hover:bg-destructive/10 border-input/60 transition-all" + className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm text-destructive hover:text-destructive hover:bg-destructive/5 dark:hover:bg-destructive/10 border-input/60" > {t('clear')} @@ -206,7 +206,7 @@ export default function MarkdownToHtmlPage() { size="sm" onClick={handlePrint} disabled={!result.html} - className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm active:scale-95 transition-all" + className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm" > {t('print')} @@ -216,7 +216,7 @@ export default function MarkdownToHtmlPage() { size="sm" onClick={handleDownload} disabled={!result.html} - className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm active:scale-95 transition-all" + className="h-8 rounded-md font-medium text-xs gap-1.5 shadow-sm" > {t('download')} @@ -228,7 +228,7 @@ export default function MarkdownToHtmlPage() { {error && (
{error}
@@ -243,7 +243,7 @@ export default function MarkdownToHtmlPage() { > {/* Markdown 输入翼终端 */} {showInput && ( -
+
{t('inputLabel')} @@ -263,7 +263,7 @@ export default function MarkdownToHtmlPage() { {/* 实时 HTML/Iframe 预览翼终端 */} {showPreview && ( -
+
{(previewMode as string) === 'html' ? t('htmlOutputLabel') : t('previewLabel')} diff --git a/pages/QrCode/components/GeneratePanel.tsx b/pages/QrCode/components/GeneratePanel.tsx index f3eceec..e9f5243 100644 --- a/pages/QrCode/components/GeneratePanel.tsx +++ b/pages/QrCode/components/GeneratePanel.tsx @@ -10,11 +10,11 @@ export default function GeneratePanel() { const { generatorState, setTextToEncode, downloadQrCode, copyQrCode } = useQrCodeContext(); return ( -
+
{/* 左翼:高性能受控输入翼终端 */}
diff --git a/pages/QrCode/components/ParsePanel.tsx b/pages/QrCode/components/ParsePanel.tsx index 80a138f..cd97651 100644 --- a/pages/QrCode/components/ParsePanel.tsx +++ b/pages/QrCode/components/ParsePanel.tsx @@ -61,7 +61,7 @@ export default function ParsePanel() { /* 💡 统一大视觉轴: - 追加 p-0.5 微隔离,配合 gap-6 建立与生成面板(GeneratePanel)绝对像素对齐的网格天平。 */ -
+
{/* 左翼:图片接收/拖拽/剪贴板上传终端 */}
+
{/* 流式中央控制切流卡:注入 sm 断点防御,防范单栏状态下发生变形 */}
{qrCode.mode === 'generate' ? ( -
+
) : ( -
+
)} diff --git a/pages/TextStatistics/index.tsx b/pages/TextStatistics/index.tsx index 8dd5b5f..7d063c6 100644 --- a/pages/TextStatistics/index.tsx +++ b/pages/TextStatistics/index.tsx @@ -26,7 +26,7 @@ export default function Index() { ]; return ( -
+
{/* 文本输入区域 */} diff --git a/pages/Timestamp/LiveClock.tsx b/pages/Timestamp/LiveClock.tsx index 9a651dc..a809183 100644 --- a/pages/Timestamp/LiveClock.tsx +++ b/pages/Timestamp/LiveClock.tsx @@ -80,7 +80,7 @@ const LiveClock = React.memo(({ unit, onUseNow, className, ...props }: LiveClock type="button" onClick={handleUseNow} title={t('timestamp:useNowTooltip')} - className="flex h-7 w-7 items-center justify-center rounded-md border border-input bg-background text-muted-foreground shadow-sm transition-all hover:bg-accent hover:text-foreground active:scale-95 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring" + className="flex h-7 w-7 items-center justify-center rounded-md border border-input bg-background text-muted-foreground shadow-sm hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring" > diff --git a/pages/Timestamp/ResultView.tsx b/pages/Timestamp/ResultView.tsx index 582b169..536d138 100644 --- a/pages/Timestamp/ResultView.tsx +++ b/pages/Timestamp/ResultView.tsx @@ -50,7 +50,7 @@ const ResultView = React.memo( return (
+
{/* 顶部小标签 */} {t('timestamp:resultLabel')} @@ -78,7 +72,7 @@ const ResultView = React.memo( 对齐 shadcn 官方卡片风格,使用 bg-card、border-border 构筑多层级阴影。 核心数值直接拉粗为 text-foreground (在黑夜模式下会自动转为大气的纯白,完美避开刺眼强光) */} -
+
{result} diff --git a/pages/Timestamp/index.tsx b/pages/Timestamp/index.tsx index 7999c6d..d362db2 100644 --- a/pages/Timestamp/index.tsx +++ b/pages/Timestamp/index.tsx @@ -70,17 +70,13 @@ export default function Index() { value={input} onChange={(e: { target: { value: string } }) => setInput(e.target.value)} className={cn( - 'font-mono font-semibold h-10 shadow-sm placeholder:text-muted-foreground/60 focus:bg-background transition-all', + 'font-mono font-semibold h-10 shadow-sm placeholder:text-muted-foreground/60 focus:bg-background', error && 'border-destructive focus-visible:ring-destructive', )} /> {/* 错误自愈提示 */} - {error && ( -

- {error} -

- )} + {error &&

{error}

}
{/* 核心配置群:单位切换 + 时区选择紧凑横排 */}