perf: defer home page styles

This commit is contained in:
2026-06-05 19:17:35 +08:00
parent a1fd24a5f6
commit 719674b4ad
9 changed files with 21 additions and 12 deletions
+1
View File
@@ -11,6 +11,7 @@ import { Fragment, useCallback, useEffect, useMemo, useRef, useState, type CSSPr
import type { WebViewKey, WebImageWorkbenchTool } from "../../types"; import type { WebViewKey, WebImageWorkbenchTool } from "../../types";
import { useScrollEntrance } from "../../hooks/useScrollEntrance"; import { useScrollEntrance } from "../../hooks/useScrollEntrance";
import { ossAssets } from "../../data/ossAssets"; import { ossAssets } from "../../data/ossAssets";
import "../../styles/pages/home.css";
import WelcomeSplash from "./WelcomeSplash"; import WelcomeSplash from "./WelcomeSplash";
import ToolboxSection from "./ToolboxSection"; import ToolboxSection from "./ToolboxSection";
import ScriptReviewShowcase from "./ScriptReviewShowcase"; import ScriptReviewShowcase from "./ScriptReviewShowcase";
@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import "../../styles/pages/model-generation-showcase.css";
type ShowMode = "agent" | "image" | "video"; type ShowMode = "agent" | "image" | "video";
@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import "../../styles/pages/script-review-showcase.css";
const DIMS = [ const DIMS = [
{ name: "钩子设计", score: 16, max: 20, hue: 145, desc: "吸引力·悬念·黄金三秒", isPerfect: false, isLow: false }, { name: "钩子设计", score: 16, max: 20, hue: 145, desc: "吸引力·悬念·黄金三秒", isPerfect: false, isLow: false },
+1
View File
@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import "../../styles/pages/script-review-visual.css";
const DIMS = [ const DIMS = [
{ name: "钩子设计", score: 19, max: 20, hue: 145 }, { name: "钩子设计", score: 19, max: 20, hue: 145 },
+1
View File
@@ -1,6 +1,7 @@
import { ToolOutlined } from "@ant-design/icons"; import { ToolOutlined } from "@ant-design/icons";
import type { WebViewKey, WebImageWorkbenchTool } from "../../types"; import type { WebViewKey, WebImageWorkbenchTool } from "../../types";
import { ossAssets } from "../../data/ossAssets"; import { ossAssets } from "../../data/ossAssets";
import "../../styles/pages/toolbox.css";
const { const {
imageBefore: toolImageBefore, imageBefore: toolImageBefore,
+1
View File
@@ -1,4 +1,5 @@
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import "../../styles/pages/welcome-splash.css";
interface WelcomeSplashProps { interface WelcomeSplashProps {
onEnter: () => void; onEnter: () => void;
@@ -38,6 +38,9 @@ type WorkMode = "single" | "blend";
type OutputSize = "9:16" | "16:9" | "4:3" | "3:4" | "1:1"; type OutputSize = "9:16" | "16:9" | "4:3" | "3:4" | "1:1";
type OutputCount = 1 | 2 | 3 | 4; type OutputCount = 1 | 2 | 3 | 4;
const OUTPUT_SIZE_OPTIONS: OutputSize[] = ["9:16", "16:9", "4:3", "3:4", "1:1"];
const OUTPUT_COUNT_OPTIONS: OutputCount[] = [1, 2, 3, 4];
const SIZE_TO_RATIO: Record<OutputSize, string> = { const SIZE_TO_RATIO: Record<OutputSize, string> = {
"9:16": "9:16", "9:16": "9:16",
"16:9": "16:9", "16:9": "16:9",
@@ -761,7 +764,7 @@ function ImageWorkbenchPage({ initialTool = "workbench", onOpenMore, onSelectVie
<h3></h3> <h3></h3>
<span className="image-workbench-field-label"></span> <span className="image-workbench-field-label"></span>
<div className="image-workbench-segmented"> <div className="image-workbench-segmented">
{(["9:16", "16:9", "4:3", "3:4", "1:1"] as OutputSize[]).map((s) => ( {OUTPUT_SIZE_OPTIONS.map((s) => (
<button key={s} type="button" className={outputSize === s ? "is-active" : ""} onClick={() => setOutputSize(s)}> <button key={s} type="button" className={outputSize === s ? "is-active" : ""} onClick={() => setOutputSize(s)}>
{s} {s}
</button> </button>
@@ -1317,7 +1320,7 @@ function ImageWorkbenchPage({ initialTool = "workbench", onOpenMore, onSelectVie
<h3></h3> <h3></h3>
<span className="image-workbench-field-label"></span> <span className="image-workbench-field-label"></span>
<div className="image-workbench-segmented"> <div className="image-workbench-segmented">
{(["9:16", "16:9", "4:3", "3:4", "1:1"] as OutputSize[]).map((s) => ( {OUTPUT_SIZE_OPTIONS.map((s) => (
<button key={s} type="button" className={outputSize === s ? "is-active" : ""} onClick={() => setOutputSize(s)}> <button key={s} type="button" className={outputSize === s ? "is-active" : ""} onClick={() => setOutputSize(s)}>
{s} {s}
</button> </button>
@@ -1326,7 +1329,7 @@ function ImageWorkbenchPage({ initialTool = "workbench", onOpenMore, onSelectVie
<div className="image-workbench-count"> <div className="image-workbench-count">
<span></span> <span></span>
<div> <div>
{([1, 2, 3, 4] as OutputCount[]).map((count) => ( {OUTPUT_COUNT_OPTIONS.map((count) => (
<button <button
key={count} key={count}
type="button" type="button"
+9 -3
View File
@@ -17,7 +17,7 @@ import {
ShareAltOutlined, ShareAltOutlined,
UserOutlined, UserOutlined,
} from "@ant-design/icons"; } from "@ant-design/icons";
import { useEffect, useRef, useState, type ChangeEvent, type FormEvent } from "react"; import { useEffect, useMemo, useRef, useState, type ChangeEvent, type FormEvent } from "react";
import "../../styles/pages/profile.css"; import "../../styles/pages/profile.css";
import { aiGenerationClient } from "../../api/aiGenerationClient"; import { aiGenerationClient } from "../../api/aiGenerationClient";
import { assetClient } from "../../api/assetClient"; import { assetClient } from "../../api/assetClient";
@@ -255,8 +255,14 @@ function ProfilePage({
const [bioStatusNotice, setBioStatusNotice] = useState<string | null>(null); const [bioStatusNotice, setBioStatusNotice] = useState<string | null>(null);
const [bannerUrl, setBannerUrl] = useState(() => session?.user.backgroundUrl || readLocalProfileValue(userId, "background")); const [bannerUrl, setBannerUrl] = useState(() => session?.user.backgroundUrl || readLocalProfileValue(userId, "background"));
const completedTasks = tasks.filter((task) => task.status === "completed"); const completedTasks = useMemo(
const visibleWorks = completedTasks.length ? completedTasks : tasks.slice(0, 6); () => tasks.filter((task) => task.status === "completed"),
[tasks],
);
const visibleWorks = useMemo(
() => (completedTasks.length ? completedTasks : tasks.slice(0, 6)),
[completedTasks, tasks],
);
const totalBalance = usage.balanceCents + (session?.user.enterpriseBalanceCents || 0); const totalBalance = usage.balanceCents + (session?.user.enterpriseBalanceCents || 0);
const packageLabel = session?.user.activePackages?.[0]?.name || "按量积分"; const packageLabel = session?.user.activePackages?.[0]?.name || "按量积分";
const avatarUrl = session?.user.avatarUrl || localAvatarUrl || null; const avatarUrl = session?.user.avatarUrl || localAvatarUrl || null;
-6
View File
@@ -3,12 +3,6 @@
@import "./shell/app-shell.css"; @import "./shell/app-shell.css";
@import "./components/primitives.css"; @import "./components/primitives.css";
@import "./components/legacy-components.css"; @import "./components/legacy-components.css";
@import "./pages/home.css";
@import "./pages/welcome-splash.css";
@import "./pages/toolbox.css";
@import "./pages/script-review-visual.css";
@import "./pages/script-review-showcase.css";
@import "./pages/model-generation-showcase.css";
@import "./pages/more-tools.css"; @import "./pages/more-tools.css";
@import "./pages/studio-layout.css"; @import "./pages/studio-layout.css";
@import "./pages/size-template.css"; @import "./pages/size-template.css";