From 22c983ab16eb8f41c5cd0984981c94cfdb905201 Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Sat, 25 Apr 2026 19:07:21 +0800 Subject: [PATCH] feat(asset-center): add light animated empty workbench model --- .../platform/AssetWorkbenchEmptyBackdrop.tsx | 390 +++++++++++++----- .../AssetWorkbenchEmptyBackdrop.test.tsx | 21 +- 2 files changed, 298 insertions(+), 113 deletions(-) diff --git a/furniture-3d-system/src/components/platform/AssetWorkbenchEmptyBackdrop.tsx b/furniture-3d-system/src/components/platform/AssetWorkbenchEmptyBackdrop.tsx index 4dbd9703..8d8b9ca3 100644 --- a/furniture-3d-system/src/components/platform/AssetWorkbenchEmptyBackdrop.tsx +++ b/furniture-3d-system/src/components/platform/AssetWorkbenchEmptyBackdrop.tsx @@ -4,26 +4,25 @@ interface AssetWorkbenchEmptyBackdropProps { className?: string } -const componentPlates = [ - 'left-[18%] top-[28%] h-[86px] w-[156px] -rotate-6', - 'right-[18%] top-[24%] h-[70px] w-[126px] rotate-3', - 'left-[30%] bottom-[20%] h-[78px] w-[138px] rotate-2', - 'right-[28%] bottom-[27%] h-[56px] w-[104px] -rotate-3', +const modelBoards = [ + 'asset-empty-model-board asset-empty-model-board-main', + 'asset-empty-model-board asset-empty-model-board-back', + 'asset-empty-model-board asset-empty-model-board-side-left', + 'asset-empty-model-board asset-empty-model-board-side-right', ] -const hardwareNodes = [ - 'left-[23%] top-[34%]', - 'left-[39%] top-[42%]', - 'right-[24%] top-[31%]', - 'left-[34%] bottom-[27%]', - 'right-[33%] bottom-[36%]', - 'right-[20%] bottom-[25%]', +const modelLinks = [ + 'asset-empty-model-link asset-empty-model-link-a', + 'asset-empty-model-link asset-empty-model-link-b', + 'asset-empty-model-link asset-empty-model-link-c', ] -const relationLines = [ - 'left-[28%] top-[39%] w-[18%] rotate-[13deg]', - 'left-[45%] top-[43%] w-[22%] -rotate-[11deg]', - 'left-[38%] bottom-[34%] w-[25%] rotate-[7deg]', +const modelNodes = [ + 'asset-empty-model-node asset-empty-model-node-a', + 'asset-empty-model-node asset-empty-model-node-b', + 'asset-empty-model-node asset-empty-model-node-c', + 'asset-empty-model-node asset-empty-model-node-d', + 'asset-empty-model-node asset-empty-model-node-e', ] export function AssetWorkbenchEmptyBackdrop({ className }: AssetWorkbenchEmptyBackdropProps) { @@ -32,106 +31,283 @@ export function AssetWorkbenchEmptyBackdrop({ className }: AssetWorkbenchEmptyBa aria-hidden="true" data-testid="asset-workbench-empty-backdrop" className={cn( - 'pointer-events-none absolute inset-0 isolate overflow-hidden bg-[#0c0e10] text-white', + 'pointer-events-none absolute inset-0 isolate overflow-hidden bg-[#f4f6f6] text-[#2d3335]', className, )} > -
-
-
-
-
+
+
+
+
-
-
- - {relationLines.map(lineClassName => ( - - ))} - -
- - - - -
- - {componentPlates.map(plateClassName => ( -
- - - -
- ))} - - {hardwareNodes.map(nodeClassName => ( - - - - ))} - -
-
- META COMPONENT - -
-
-
- - - +
+
+ + {modelLinks.map(linkClassName => ( + + ))} + {modelBoards.map(boardClassName => ( + + ))} + {modelNodes.map(nodeClassName => ( + + ))} +
-
-
- - - - -
-
- 4D LINK - READY -
-
+
+
+
+
-
- - ATELIER GRID -
+
) } diff --git a/furniture-3d-system/src/components/platform/__tests__/AssetWorkbenchEmptyBackdrop.test.tsx b/furniture-3d-system/src/components/platform/__tests__/AssetWorkbenchEmptyBackdrop.test.tsx index 30c9a46a..98903d5b 100644 --- a/furniture-3d-system/src/components/platform/__tests__/AssetWorkbenchEmptyBackdrop.test.tsx +++ b/furniture-3d-system/src/components/platform/__tests__/AssetWorkbenchEmptyBackdrop.test.tsx @@ -20,14 +20,23 @@ describe('AssetWorkbenchEmptyBackdrop', () => { expect(container.querySelector('picture')).not.toBeInTheDocument() }) - it('contains quiet meta component, hardware, packaging, and HUD elements', () => { + it('contains a quiet low-noise model scene with simple motion primitives', () => { render() - expect(screen.getAllByTestId('meta-component-plate')).toHaveLength(4) - expect(screen.getAllByTestId('hardware-node')).toHaveLength(6) - expect(screen.getAllByTestId('workbench-relation-line')).toHaveLength(3) - expect(screen.getByTestId('packaging-wireframe')).toBeInTheDocument() - expect(screen.getAllByTestId('workbench-hud')).toHaveLength(3) + expect(screen.getByTestId('low-noise-model-scene')).toBeInTheDocument() + expect(screen.getByTestId('low-noise-model')).toBeInTheDocument() + expect(screen.getAllByTestId('low-noise-model-board')).toHaveLength(4) + expect(screen.getAllByTestId('low-noise-model-link')).toHaveLength(3) + expect(screen.getAllByTestId('low-noise-model-node')).toHaveLength(5) + expect(screen.getByTestId('low-noise-model-scan')).toBeInTheDocument() + }) + + it('does not render the previous HUD labels as background content', () => { + render() + + expect(screen.queryByText('META COMPONENT')).not.toBeInTheDocument() + expect(screen.queryByText('4D LINK')).not.toBeInTheDocument() + expect(screen.queryByText('ATELIER GRID')).not.toBeInTheDocument() }) it('allows viewport integrations to adjust the outer layer', () => {