From 795c43f0a7e5df760276a014050742b3eccabcb2 Mon Sep 17 00:00:00 2001 From: leafyy Date: Thu, 27 Aug 2026 17:10:34 +0800 Subject: [PATCH] refactor(stage-pages): share polaroid page (#2375) --- .../pages/devtools/polaroid.browser.test.ts | 13 +-- .../stage-web/src/pages/devtools/polaroid.vue | 95 ------------------- packages/stage-pages/README.md | 23 +++++ .../src/pages/devtools/polaroid.vue | 0 4 files changed, 27 insertions(+), 104 deletions(-) delete mode 100644 apps/stage-web/src/pages/devtools/polaroid.vue create mode 100644 packages/stage-pages/README.md rename {apps/stage-pocket => packages/stage-pages}/src/pages/devtools/polaroid.vue (100%) diff --git a/apps/stage-web/src/pages/devtools/polaroid.browser.test.ts b/apps/stage-web/src/pages/devtools/polaroid.browser.test.ts index 85f79edda..98ed2bb62 100644 --- a/apps/stage-web/src/pages/devtools/polaroid.browser.test.ts +++ b/apps/stage-web/src/pages/devtools/polaroid.browser.test.ts @@ -1,14 +1,13 @@ import type { Component } from 'vue' +import PolaroidPage from '@proj-airi/stage-pages/pages/devtools/polaroid.vue' + import { DisplayModelFormat, useDisplayModelsStore } from '@proj-airi/stage-ui/stores/display-models' import { useSettingsStageModel } from '@proj-airi/stage-ui/stores/settings/stage-model' import { createPinia } from 'pinia' import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from 'vitest' import { createApp } from 'vue' -import PocketPolaroid from '../../../../stage-pocket/src/pages/devtools/polaroid.vue' -import WebPolaroid from './polaroid.vue' - import 'virtual:uno.css' let presetArchive: Blob @@ -110,7 +109,7 @@ async function expectImportedModelPhoto(component: Component, modelId: string) { } describe('polaroid imported Live2D model', () => { - it('loads and captures an imported model on the web page', async () => { + it('loads and captures an imported model on the shared page', async () => { // ROOT CAUSE: // // Polaroid passed only the object URL to the Live2D loader. An imported @@ -120,10 +119,6 @@ describe('polaroid imported Live2D model', () => { // The loader also kept its mutex locked when the first render had no model // source. We fixed both paths by passing the selected ID and releasing the // mutex across every early return. - await expectImportedModelPhoto(WebPolaroid, 'display-model-polaroid-web') - }) - - it('loads and captures an imported model on the pocket page', async () => { - await expectImportedModelPhoto(PocketPolaroid, 'display-model-polaroid-pocket') + await expectImportedModelPhoto(PolaroidPage, 'display-model-polaroid') }) }) diff --git a/apps/stage-web/src/pages/devtools/polaroid.vue b/apps/stage-web/src/pages/devtools/polaroid.vue deleted file mode 100644 index de3898d09..000000000 --- a/apps/stage-web/src/pages/devtools/polaroid.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/packages/stage-pages/README.md b/packages/stage-pages/README.md new file mode 100644 index 000000000..8114c8ec5 --- /dev/null +++ b/packages/stage-pages/README.md @@ -0,0 +1,23 @@ +# Stage Pages + +`@proj-airi/stage-pages` contains route-level Vue pages that multiple AIRI stage applications share. + +## Use + +Add a page under `src/pages`. Each stage application scans this directory through its Vite router configuration. + +Import a shared page through the package boundary when code needs the component directly: + +```ts +import PolaroidPage from '@proj-airi/stage-pages/pages/devtools/polaroid.vue' +``` + +## When to use this package + +Use this package when two or more stage applications need the same page behavior and route structure. + +## When not to use this package + +Keep application-specific pages in the owning application. Put reusable business components in `@proj-airi/stage-ui`. + +Put primitive UI components in `@proj-airi/ui`. Put shared layouts in `@proj-airi/stage-layouts`. diff --git a/apps/stage-pocket/src/pages/devtools/polaroid.vue b/packages/stage-pages/src/pages/devtools/polaroid.vue similarity index 100% rename from apps/stage-pocket/src/pages/devtools/polaroid.vue rename to packages/stage-pages/src/pages/devtools/polaroid.vue