feat(web): render bgm setups as a 3D table

Wire the tabletop library into the setup detail route: seed the store
from the setup, resolve the surface mount tree, and render world and HUD
surfaces. Add serializedToPackage to convert the vite-emitted package.
This commit is contained in:
2026-08-09 22:46:03 +08:00
parent cd08e6af04
commit f494a6f9be
6 changed files with 96 additions and 2 deletions
+19
View File
@@ -0,0 +1,19 @@
import { describe, expect, it } from 'vitest';
import { serializedToPackage } from './package.js';
describe('serializedToPackage', () => {
it('converts plain-object maps to Map instances', () => {
const serialized = {
meta: { id: 'harbor' },
parts: { 'token#wood': { type: 'token', id: 'wood' } },
surfaces: { 'board#harbor': { type: 'board', id: 'harbor', layout: [] } },
setups: { 'game#main': { type: 'game', id: 'main', setup: {} } },
};
const pkg = serializedToPackage(serialized);
expect(pkg.meta.id).toBe('harbor');
expect(pkg.parts).toBeInstanceOf(Map);
expect(pkg.parts.get('token#wood')).toEqual({ type: 'token', id: 'wood' });
expect(pkg.surfaces.get('board#harbor')).toMatchObject({ type: 'board' });
expect(pkg.setups.get('game#main')).toMatchObject({ type: 'game' });
});
});