Merge remote-tracking branch 'origin/master' into codex/editor-asset-library

# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
This commit is contained in:
2026-06-17 20:52:41 +08:00
68 changed files with 2279 additions and 2676 deletions
@@ -126,6 +126,7 @@ import {
ProfileStatCardSkeleton,
} from '../platform-entry/PlatformProfilePrimitives';
import { PlatformProfileModalShell } from '../platform-entry/PlatformProfileModalShell';
import { PlatformProfileGenerationQueueCard } from '../platform-entry/PlatformProfileGenerationQueueCard';
import { PlatformProfilePlayedWorksModal } from '../platform-entry/PlatformProfilePlayedWorksModal';
import { PlatformProfileQrScannerModal } from '../platform-entry/PlatformProfileQrScannerModal';
import { PlatformProfileRechargeModal } from '../platform-entry/PlatformProfileRechargeModal';
@@ -133,6 +134,7 @@ import { PlatformProfileReferralModal } from '../platform-entry/PlatformProfileR
import { PlatformProfileRewardCodeRedeemModal } from '../platform-entry/PlatformProfileRewardCodeRedeemModal';
import { PlatformProfileTaskCenterModal } from '../platform-entry/PlatformProfileTaskCenterModal';
import { PlatformProfileWalletLedgerModal } from '../platform-entry/PlatformProfileWalletLedgerModal';
import type { ExternalGenerationQueueStatus } from '../platform-entry/platformExternalGenerationQueueStatusModel';
import { getInitialPlatformDesktopLayout } from '../platform-entry/platformEntryResponsive';
import {
type RechargePaymentResult,
@@ -276,6 +278,7 @@ export interface RpgEntryHomeViewProps {
onOpenProjects?: () => void;
onRechargeSuccess?: () => void | Promise<void>;
profileTaskRefreshKey?: number;
profileGenerationQueueStatus?: ExternalGenerationQueueStatus | null;
createTabContent?: ReactNode;
draftTabContent?: ReactNode;
hasUnreadDraftUpdate?: boolean;
@@ -2571,6 +2574,7 @@ export function RpgEntryHomeView({
onOpenProjects,
onRechargeSuccess,
profileTaskRefreshKey = 0,
profileGenerationQueueStatus = null,
createTabContent,
draftTabContent,
hasUnreadDraftUpdate = false,
@@ -3424,6 +3428,8 @@ export function RpgEntryHomeView({
const [recommendDragOffsetY, setRecommendDragOffsetY] = useState(0);
const [recommendDragCommitDirection, setRecommendDragCommitDirection] =
useState<RecommendSwipeDirection | null>(null);
const [isRecommendDragResetting, setIsRecommendDragResetting] =
useState(false);
const activeRecommendEntryKeyForSelection =
recommendFeedWindow.activeEntryKey;
const recommendCardStageRef = useRef<HTMLDivElement | null>(null);
@@ -3438,6 +3444,7 @@ export function RpgEntryHomeView({
return;
}
setIsRecommendDragResetting(false);
setRecommendDragCommitDirection(direction);
const panelHeight =
recommendCardStageRef.current?.getBoundingClientRect().height ?? 0;
@@ -3454,8 +3461,12 @@ export function RpgEntryHomeView({
} else {
onSelectPreviousRecommendEntry?.(activeRecommendEntryKeyForSelection);
}
setIsRecommendDragResetting(true);
setRecommendDragOffsetY(0);
setRecommendDragCommitDirection(null);
window.requestAnimationFrame(() => {
setIsRecommendDragResetting(false);
});
}, RECOMMEND_ENTRY_COMMIT_ANIMATION_MS);
},
[
@@ -3517,6 +3528,7 @@ export function RpgEntryHomeView({
const deltaY = event.clientY - drag.startY;
const commitDirection = resolveRecommendDragCommitDirection(deltaY);
if (!commitDirection) {
setIsRecommendDragResetting(false);
setRecommendDragOffsetY(0);
return;
}
@@ -3532,6 +3544,7 @@ export function RpgEntryHomeView({
event.currentTarget.releasePointerCapture?.(drag.pointerId);
}
recommendDragStartRef.current = null;
setIsRecommendDragResetting(false);
setRecommendDragOffsetY(0);
},
[],
@@ -3542,6 +3555,7 @@ export function RpgEntryHomeView({
const recommendRailClassName = buildRecommendSwipeRailClassName({
offsetY: recommendDragOffsetY,
commitDirection: recommendDragCommitDirection,
isResetting: isRecommendDragResetting,
});
const selectNextRecommendEntry = useCallback(() => {
if (
@@ -4338,6 +4352,10 @@ export function RpgEntryHomeView({
/>
</button>
<PlatformProfileGenerationQueueCard
queueStatus={profileGenerationQueueStatus}
/>
<section
className="platform-profile-shortcut-panel"
aria-label="常用功能"