From 15fa1fcfbefedb2d82d62ba47c81dd3ee7d9e8a0 Mon Sep 17 00:00:00 2001 From: LemonNeko Date: Sat, 5 Apr 2025 18:04:13 +0800 Subject: [PATCH] refactor(stage-tamagotchi): remove stage electron (#115) * refactor(stage-tamagotchi): remove stage electron * fix(stage-tamagotchi): path --- .github/workflows/build-tamagotchi.yml | 6 +- .github/workflows/release-tamagotchi.yml | 6 +- .gitignore | 1 - .vscode/settings.json | 4 +- apps/stage-tamagotchi-tauri/README.md | 51 - .../build/entitlements.mac.plist | 12 - .../build/icon-tray-macos.png | Bin 13622 -> 0 bytes apps/stage-tamagotchi-tauri/build/icon.icns | Bin 55607 -> 0 bytes apps/stage-tamagotchi-tauri/build/icon.ico | Bin 7856 -> 0 bytes apps/stage-tamagotchi-tauri/build/icon.png | Bin 12366 -> 0 bytes apps/stage-tamagotchi-tauri/package.json | 126 -- apps/stage-tamagotchi-tauri/tsconfig.json | 36 - apps/stage-tamagotchi-tauri/uno.config.ts | 104 -- .../.tool-versions | 0 apps/stage-tamagotchi/README.md | 6 +- apps/stage-tamagotchi/electron-builder.yml | 43 - apps/stage-tamagotchi/electron.vite.config.ts | 13 - .../index.html | 0 .../locales/en.yml | 0 .../locales/zh-CN.yml | 0 apps/stage-tamagotchi/package.json | 28 +- apps/stage-tamagotchi/renderer.vite.config.ts | 59 - .../scripts/rename-artifacts.js | 0 .../src-tauri/.gitignore | 0 .../src-tauri/Cargo.lock | 0 .../src-tauri/Cargo.toml | 0 .../src-tauri/build.rs | 0 .../src-tauri/capabilities/default.json | 0 .../src-tauri/icons/128x128.png | Bin .../src-tauri/icons/128x128@2x.png | Bin .../src-tauri/icons/32x32.png | Bin .../src-tauri/icons/Square107x107Logo.png | Bin .../src-tauri/icons/Square142x142Logo.png | Bin .../src-tauri/icons/Square150x150Logo.png | Bin .../src-tauri/icons/Square284x284Logo.png | Bin .../src-tauri/icons/Square30x30Logo.png | Bin .../src-tauri/icons/Square310x310Logo.png | Bin .../src-tauri/icons/Square44x44Logo.png | Bin .../src-tauri/icons/Square71x71Logo.png | Bin .../src-tauri/icons/Square89x89Logo.png | Bin .../src-tauri/icons/StoreLogo.png | Bin .../src-tauri/icons/icon.icns | Bin .../src-tauri/icons/icon.ico | Bin .../src-tauri/icons/icon.png | Bin .../src-tauri/src/commands.rs | 0 .../src-tauri/src/lib.rs | 0 .../src-tauri/src/main.rs | 0 .../src-tauri/tauri.conf.json | 0 .../src/App.vue | 0 .../src/components/ChatHistory.vue | 0 .../src/components/InteractiveArea.vue | 0 .../src/components/Widgets/Live2DSettings.vue | 0 .../src/composables/window-shortcuts.ts | 0 .../src/layouts/default.vue | 0 .../src/layouts/stage.vue | 0 .../src/main.ts | 0 apps/stage-tamagotchi/src/main/index.ts | 210 --- .../src/main/locales/en-US.ts | 18 - .../src/main/locales/index.test.ts | 28 - .../src/main/locales/index.ts | 54 - .../src/main/locales/zh-CN.ts | 18 - apps/stage-tamagotchi/src/main/menu.ts | 65 - .../src/modules/i18n.ts | 0 .../src/pages/index.vue | 0 .../src/pages/settings/index.vue | 0 .../src/pages/settings/models/index.vue | 0 .../pages/settings/modules/consciousness.vue | 0 .../src/pages/settings/modules/index.vue | 0 .../src/pages/settings/modules/speech.vue | 0 .../pages/settings/providers/anthropic.vue | 0 .../providers/cloudflare-workers-ai.vue | 0 .../src/pages/settings/providers/deepseek.vue | 0 .../pages/settings/providers/elevenlabs.vue | 0 .../settings/providers/featherless-ai.vue | 0 .../pages/settings/providers/fireworks-ai.vue | 0 .../providers/google-generative-ai.vue | 0 .../src/pages/settings/providers/index.vue | 0 .../settings/providers/microsoft-speech.vue | 0 .../pages/settings/providers/mistral-ai.vue | 0 .../pages/settings/providers/moonshot-ai.vue | 0 .../pages/settings/providers/novita-ai.vue | 0 .../src/pages/settings/providers/ollama.vue | 0 .../src/pages/settings/providers/openai.vue | 0 .../settings/providers/openrouter-ai.vue | 0 .../pages/settings/providers/together-ai.vue | 0 .../src/pages/settings/providers/xai.vue | 0 .../src/pages/settings/shortcuts/index.vue | 0 .../src/pages/settings/themes/index.vue | 0 apps/stage-tamagotchi/src/preload/index.d.ts | 8 - apps/stage-tamagotchi/src/preload/index.ts | 25 - apps/stage-tamagotchi/src/renderer/index.html | 26 - .../src/renderer/locales/en.yml | 372 ------ .../src/renderer/locales/zh-CN.yml | 336 ----- .../stage-tamagotchi/src/renderer/src/App.vue | 65 - .../renderer/src/components/ChatHistory.vue | 97 -- .../src/components/InteractiveArea.vue | 136 -- .../src/components/Widgets/Live2DSettings.vue | 259 ---- .../src/composables/window-shortcuts.ts | 56 - .../src/renderer/src/layouts/default.vue | 9 - .../src/renderer/src/layouts/stage.vue | 7 - .../stage-tamagotchi/src/renderer/src/main.ts | 30 - .../src/renderer/src/modules/i18n.ts | 24 - .../src/renderer/src/pages/index.vue | 134 -- .../src/renderer/src/pages/settings/index.vue | 220 ---- .../src/pages/settings/models/index.vue | 79 -- .../pages/settings/modules/consciousness.vue | 226 ---- .../src/pages/settings/modules/index.vue | 154 --- .../src/pages/settings/modules/speech.vue | 532 -------- .../pages/settings/providers/anthropic.vue | 119 -- .../providers/cloudflare-workers-ai.vue | 99 -- .../src/pages/settings/providers/deepseek.vue | 100 -- .../pages/settings/providers/elevenlabs.vue | 100 -- .../settings/providers/featherless-ai.vue | 100 -- .../pages/settings/providers/fireworks-ai.vue | 100 -- .../providers/google-generative-ai.vue | 104 -- .../src/pages/settings/providers/index.vue | 62 - .../settings/providers/microsoft-speech.vue | 153 --- .../pages/settings/providers/mistral-ai.vue | 100 -- .../pages/settings/providers/moonshot-ai.vue | 100 -- .../pages/settings/providers/novita-ai.vue | 100 -- .../src/pages/settings/providers/ollama.vue | 121 -- .../src/pages/settings/providers/openai.vue | 104 -- .../settings/providers/openrouter-ai.vue | 99 -- .../pages/settings/providers/together-ai.vue | 100 -- .../src/pages/settings/providers/xai.vue | 100 -- .../src/pages/settings/themes/index.vue | 423 ------ .../src/renderer/src/shims.ts | 6 - .../src/renderer/src/stores/shortcuts.ts | 30 - .../renderer/src/stores/window-controls.ts | 42 - .../src/renderer/src/styles/main.css | 38 - .../src/renderer/src/styles/themes.css | 26 - .../src/renderer/src/styles/transitions.css | 18 - .../src/renderer/src/types/window-controls.ts | 6 - .../src/renderer/src/worker.d.ts | 14 - .../src/shims.ts | 0 .../src/stores/shortcuts.ts | 0 .../src/stores/window-controls.ts | 0 .../src/styles/main.css | 0 .../src/styles/themes.css | 0 .../src/styles/transitions.css | 0 .../src/types/window-controls.ts | 0 .../src/worker.d.ts | 0 apps/stage-tamagotchi/tsconfig.json | 39 +- apps/stage-tamagotchi/tsconfig.node.json | 13 - apps/stage-tamagotchi/tsconfig.web.json | 32 - .../vite.config.ts | 0 pnpm-lock.yaml | 1142 +---------------- 147 files changed, 57 insertions(+), 7216 deletions(-) delete mode 100644 apps/stage-tamagotchi-tauri/README.md delete mode 100644 apps/stage-tamagotchi-tauri/build/entitlements.mac.plist delete mode 100644 apps/stage-tamagotchi-tauri/build/icon-tray-macos.png delete mode 100644 apps/stage-tamagotchi-tauri/build/icon.icns delete mode 100644 apps/stage-tamagotchi-tauri/build/icon.ico delete mode 100644 apps/stage-tamagotchi-tauri/build/icon.png delete mode 100644 apps/stage-tamagotchi-tauri/package.json delete mode 100644 apps/stage-tamagotchi-tauri/tsconfig.json delete mode 100644 apps/stage-tamagotchi-tauri/uno.config.ts rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/.tool-versions (100%) delete mode 100644 apps/stage-tamagotchi/electron-builder.yml delete mode 100644 apps/stage-tamagotchi/electron.vite.config.ts rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/index.html (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/locales/en.yml (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/locales/zh-CN.yml (100%) delete mode 100644 apps/stage-tamagotchi/renderer.vite.config.ts rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/scripts/rename-artifacts.js (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/.gitignore (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/Cargo.lock (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/Cargo.toml (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/build.rs (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/capabilities/default.json (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/128x128.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/128x128@2x.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/32x32.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square107x107Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square142x142Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square150x150Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square284x284Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square30x30Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square310x310Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square44x44Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square71x71Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/Square89x89Logo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/StoreLogo.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/icon.icns (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/icon.ico (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/icons/icon.png (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/src/commands.rs (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/src/lib.rs (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/src/main.rs (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src-tauri/tauri.conf.json (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/App.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/components/ChatHistory.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/components/InteractiveArea.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/components/Widgets/Live2DSettings.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/composables/window-shortcuts.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/layouts/default.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/layouts/stage.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/main.ts (100%) delete mode 100644 apps/stage-tamagotchi/src/main/index.ts delete mode 100644 apps/stage-tamagotchi/src/main/locales/en-US.ts delete mode 100644 apps/stage-tamagotchi/src/main/locales/index.test.ts delete mode 100644 apps/stage-tamagotchi/src/main/locales/index.ts delete mode 100644 apps/stage-tamagotchi/src/main/locales/zh-CN.ts delete mode 100644 apps/stage-tamagotchi/src/main/menu.ts rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/modules/i18n.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/models/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/modules/consciousness.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/modules/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/modules/speech.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/anthropic.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/cloudflare-workers-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/deepseek.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/elevenlabs.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/featherless-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/fireworks-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/google-generative-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/microsoft-speech.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/mistral-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/moonshot-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/novita-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/ollama.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/openai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/openrouter-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/together-ai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/providers/xai.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/shortcuts/index.vue (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/pages/settings/themes/index.vue (100%) delete mode 100644 apps/stage-tamagotchi/src/preload/index.d.ts delete mode 100644 apps/stage-tamagotchi/src/preload/index.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/index.html delete mode 100644 apps/stage-tamagotchi/src/renderer/locales/en.yml delete mode 100644 apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml delete mode 100644 apps/stage-tamagotchi/src/renderer/src/App.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/components/InteractiveArea.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/components/Widgets/Live2DSettings.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/composables/window-shortcuts.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/layouts/default.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/layouts/stage.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/main.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/modules/i18n.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/speech.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/anthropic.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/cloudflare-workers-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/deepseek.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/elevenlabs.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/featherless-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/fireworks-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/google-generative-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/microsoft-speech.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/mistral-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/moonshot-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/novita-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/ollama.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/openai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/openrouter-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/together-ai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/providers/xai.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/pages/settings/themes/index.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/src/shims.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/stores/shortcuts.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/stores/window-controls.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/styles/main.css delete mode 100644 apps/stage-tamagotchi/src/renderer/src/styles/themes.css delete mode 100644 apps/stage-tamagotchi/src/renderer/src/styles/transitions.css delete mode 100644 apps/stage-tamagotchi/src/renderer/src/types/window-controls.ts delete mode 100644 apps/stage-tamagotchi/src/renderer/src/worker.d.ts rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/shims.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/stores/shortcuts.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/stores/window-controls.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/styles/main.css (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/styles/themes.css (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/styles/transitions.css (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/types/window-controls.ts (100%) rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/src/worker.d.ts (100%) delete mode 100644 apps/stage-tamagotchi/tsconfig.node.json delete mode 100644 apps/stage-tamagotchi/tsconfig.web.json rename apps/{stage-tamagotchi-tauri => stage-tamagotchi}/vite.config.ts (100%) diff --git a/.github/workflows/build-tamagotchi.yml b/.github/workflows/build-tamagotchi.yml index c9b13a291..d1d3d6609 100644 --- a/.github/workflows/build-tamagotchi.yml +++ b/.github/workflows/build-tamagotchi.yml @@ -59,13 +59,13 @@ jobs: run: pnpm run packages:build - name: Build Application - run: cd apps/stage-tamagotchi-tauri && pnpm tauri build --target ${{ matrix.target }} + run: cd apps/stage-tamagotchi && pnpm tauri build --target ${{ matrix.target }} - name: Rename Artifacts - run: node apps/stage-tamagotchi-tauri/scripts/rename-artifacts.js ${{ matrix.target }} + run: node apps/stage-tamagotchi/scripts/rename-artifacts.js ${{ matrix.target }} - name: Upload To GitHub Releases uses: softprops/action-gh-release@v2 with: - files: apps/stage-tamagotchi-tauri/bundle/airi_* + files: apps/stage-tamagotchi/bundle/airi_* append_body: true diff --git a/.github/workflows/release-tamagotchi.yml b/.github/workflows/release-tamagotchi.yml index c00958cf5..49dcca079 100644 --- a/.github/workflows/release-tamagotchi.yml +++ b/.github/workflows/release-tamagotchi.yml @@ -61,13 +61,13 @@ jobs: run: pnpm run packages:build - name: Build Application - run: cd apps/stage-tamagotchi-tauri && pnpm tauri build --target ${{ matrix.target }} + run: cd apps/stage-tamagotchi && pnpm tauri build --target ${{ matrix.target }} - name: Rename Artifacts - run: node apps/stage-tamagotchi-tauri/scripts/rename-artifacts.js ${{ matrix.target }} + run: node apps/stage-tamagotchi/scripts/rename-artifacts.js ${{ matrix.target }} - name: Upload To GitHub Releases uses: softprops/action-gh-release@v2 with: - files: apps/stage-tamagotchi-tauri/bundle/airi_* + files: apps/stage-tamagotchi/bundle/airi_* append_body: true diff --git a/.gitignore b/.gitignore index c10dace1c..4cd848a08 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,6 @@ coverage/ **/public/assets/vrm/models/* packages/stage-ui/public/assets/fonts/ apps/stage-tamagotchi/public/assets/fonts/ -apps/stage-tamagotchi-tauri/public/assets/fonts/ apps/stage-web/public/assets/fonts/ *.pcm diff --git a/.vscode/settings.json b/.vscode/settings.json index 30508562d..1d9e89fc2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,9 +3,7 @@ "i18n-ally.keystyle": "nested", "i18n-ally.localesPaths": [ "apps/stage-web/locales", - "apps/stage-tamagotchi/src/renderer/locales", - "apps/stage-tamagotchi/src/main/locales", - "apps/stage-tamagotchi-tauri/locales" + "apps/stage-tamagotchi/locales" ], "i18n-ally.sortKeys": true, "i18n-ally.enabledFrameworks": [ diff --git a/apps/stage-tamagotchi-tauri/README.md b/apps/stage-tamagotchi-tauri/README.md deleted file mode 100644 index 55f48940a..000000000 --- a/apps/stage-tamagotchi-tauri/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# たまごっち アイリ - -A desktop application for たまごっち アイリ. - -## Project Setup - -### Install - -```bash -$ pnpm install -``` - -### Development - -```bash -$ cd /apps/stage -$ pnpm dev:tamagotchi -``` - -Then open another terminal and run: - -```bash -$ cd /apps/tamagotchi -$ pnpm dev:tamagotchi -``` - -### Build - -```bash -# For windows -$ pnpm build:win - -# For macOS -$ pnpm build:mac - -# For Linux -$ pnpm build:linux -``` - -## TODO List - -- [ ] Window control: Move, resize, hide, show -- [ ] Motions follow the cursor -- [ ] System tray -- [ ] tauri i18n -- [ ] Multi-DPI -- [ ] CI/CD -- [ ] Multi monitor -- [ ] Send message via macOS Spotlight -- [ ] Steam -- [ ] CSP settings diff --git a/apps/stage-tamagotchi-tauri/build/entitlements.mac.plist b/apps/stage-tamagotchi-tauri/build/entitlements.mac.plist deleted file mode 100644 index 38c887b21..000000000 --- a/apps/stage-tamagotchi-tauri/build/entitlements.mac.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - com.apple.security.cs.allow-dyld-environment-variables - - - diff --git a/apps/stage-tamagotchi-tauri/build/icon-tray-macos.png b/apps/stage-tamagotchi-tauri/build/icon-tray-macos.png deleted file mode 100644 index f8782f0cb81355c27f3d06deddf1a058db7f40a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13622 zcmeHuRZtw!*JsZ#1A`A9f@^Sy00|Dk2_D>oySoi8AxO~RuE9d^00RVf3GVJ5g0uX0 zx9WTN-gX~%yQ=GUpL6SWpId$8ch2buB?T#LjOQ2t0AR~Vi>m+t_~{Z1z)+rs&O-X$ zrvc=wA|(cz?PK$Qx5<^*V(jhaU)kzpj8Wx|UHT%=Nzbr6^E@@e`geA+7nPHCC_s-JY@v zPgQ&E#e36Z+(xWAVflY*7G1vJ;T{FSgC?28O?DA>Z*xk7}RHzFpxSFLlr+A>qcQYH}2hEAWdzotb#pQR6# z;`5-4*RKjRtOo$DP8o60j~?lV8J;3h*N;fy^E^U|Va>XG_3!1HQXhxOLujSq$Z0k# z`tZawr?(d9dqSlv7D~Ieu==Vaoy;@}D$^T}!;kOGQWcy9v(_88JoWvfEVr)7&GcWN zdkT$gpZm!n!n5P57D0G!cu@G;TmURZD6$d`hLI}+0dyGD4&oq4G!p{(f6g=#0V48? z@%l(^$R^NPWQiVS3smOjb5#MsE`H89AN4!E-LiwiHSgy-8^UTER9`W&2>o{kpri4> z3Tj08pj;fpD__>^C&WOR6En1rCCW@l>nez88kE?{)Itpc^uK|2r=A9+$lwqHdH|?EKZG&2rl}qJD1D`4|8$ znVTlSOodb>N>jE@ozTbTPfT#xTQZWYB&EJcyTkQSzNM%92{U{VxAAMzNjiFyfiHE7 z8ONQy!a^uFHRNOICY;^^52<{Ka#FwbUR$qNbblt)e9~*_CU=XD+;lrwTVIua2cDfF z?xe6US}sJg@p&D9PN90;XfOGb+7^tPoY}^cWCw|V75|GQ_^q=|$Dy)IDvQRaEC>gm zfn6FirOH*dH!h_j>W8J8GHl(yjt8jJWW~hWrT+vfeq=q;eZ+N(mwupM5PIBUNMuwJ zoKoX~XW#9q1pNf2DqEZ7Jom=+Xd@V&_$RTlxXOZ4GiS80Q@(~o)bX*)m>Vl(D zGWNdVx(YOY{!YAEL=&L88adC-tI+9l3*^NT9A`&u8buz8-y&N9A^bkG9~mpyodqga z?yB36*e_&J_OR0?#QXJnrnYT9CdBa;9$BAT5XqGUc8nxbw<)MeQ<^6y;XGdYl|uXh z40p$ZE|Jz!SS9tn6JKmGaBp29#Wvee_*eU@;Htp7op5u2rpsWBAcVgI50p+Os~&%V zzKtIHAZPnvK$<})av2w^3m=vq&8a24$5fPp!Zf*GMj2`}3~ijC?-+RSu>f3qRv&Gl zjjawT$mHYbmiL?$Wnh3y=Bt=b3kuqxP@-r<<%AZ(9`u^%qYezq`>@X zRgx@8+%6V13$pU-@(Jsyjf+IGM#SGA%`z*jc6BZwKL!a0c|fXW%lXuLmF;}u490de zZ3;qoe=ag}hD~-#5O4iy`rvt=h3cXW%oc5Y+}09jS$j?skB0nu&SxFnPkvpy#Sry9Kj0z$zrJMMGiCHYpgFGP08IRnf7 z_@q+)DagoMY|>+BN{IOkz7xvOR10Z%mo=XFu3bMvL1pPt2Ac*3_sTvN|H1u3^2%?7 z*~FSK5I{~g-oMkEdAGNCc_32@s)6GL1IP{YN?_de2Xe1vdO5a2^%=O=J^DdT(M4dZ z$_Cc_7>@zQ6S>@PL~Qd*g;8E7M#n`NLQWiEkIA7{-||*}%bCq2y;)V>P{we|Is1*VyCnv(ql@y@;L5N&od|YO|OHy0(3%P?YPEjK&u`H_3-+ z`lnYoDB@|*yX9Gwrs>mGN*~@?md@u5JbOjtXaHy}@}qspFL%0`A$%P>nwAe1MPCu1 z{u0A4g_3$qTl4UqC=ee&I1bTW@!-3hDCRkLHX|Xh-raRMZ@VVQFI?qrwD>wUCxVP`%{q5%+w=Z)*NYcE>xCKe?|TTG zVp49BI?s5`POEo7g3n7{@ugAmO9__qaK(~4 z-mdr2m#)SE#_4xg)y|U^#`r^7{_i>nL@vknNc!(QZ*TcA;CR^?p513tf}?OVjW! z2_w@C!twT81)#bOT9|(~S8k3$vG31KtqTIeDRzd-^^BLo+`PCJ3uB=x3&YB1x5Bk_ zCLoaobrOetDmxQ$m-{~A^k@Bd4If9rhz52fZvdI4S$CsEkP%yYGE4^`^_M-WZZpr9 zJ2a~s*Z=-zhzPVMIq~B$4kL`C*Uql0_Cx-9)H(3;9=Sp&?b$(MgM3_~p+=5>SH#MC zOo(+*a8pfgJtRpT6HdnxxkdZQ@h};zSa5Si=7bL8V!>#`AxHK7RI>Uq)234CIbMWb z2o9`ji%$-l$_gd%Is^5|@#4flHC10n2@l-u_BfusPVn6jAU3pX_S`;6nmcwH;T63e*cD@vmx}j^{4+vvpQtL^q zX*W!D3qp;h5Ouh08=uWNrC(Vti4UOEy@{<$x?fLM#Wngkr~&GxP|XhtuXH|9eq)F0 z@#WZEkcu^_Udvsg;b*5i=u@f2@dJK6+ONVn15SM=w-(H&ugK+2+d26!B7vfMBgbn>ptxmCdkj#>|PVya%CJ30RHm!oUL2})& z$aJ?9L71ZjS?JFE0}Y**ytmQG*YR24hBy1KvAxO)H<3N%{at?Yho{rnIlgG(+(&*5 zrn6{I;%ibS`+>`-Qox$ErA?T8RMBe9)A#+*yS)>~4K>uY6^}Ri_8x)9;$d;6 ze#cM_#Cqp_<-&!OlPhidl}^f*&~jsM*T%cw2?R6i&D3dq;lVs!4}W&-6ZD+3-w zHl?dtS;>7(ztm@n^|=4uGR-$qN}?mo{qb6a7YJ6=m#(ljjvT1cxXtRUvam`P=Q2=uGLH;VUJfwOW|`=(d*k3_sg$Sap2Hc=i4sS#a|p; zCN8elLsH>jrnhaIO-J__ZyyA{f2lJT2N5p#6$kN4%@3EAZJv+tgS=`zq8-rF0s+IF zOw`6ER~`$K%vt}ksk~UoGmZ7LESMk*SPHR2lmsKGDuIm}EyiyygoC6prY&oGtjHgU z0_hRAiy{VBDqSlu`11gGIiIP&DvPJT9sA8lKv7eTIXyG2=KZxlvv0%$rheP{#hxOU107ns-iXxp*S9LYGDQC>?dgxQ0Fgr3~ouJ zyNyfOLs!;{)`j5Ko$n?nEf-N*6nO0xnJGcI1oiXyom%-^K|tQEA2qdW zA()c^0@?`XOj^_xvq*Y*#Mf(Qwnncc^I1e%n3)iSVOgmet{W+#yg zXwS!ez%&Gf53gnPhr}y4@Y_^wFZYp!B4yc zb;*Q&Lj9?up>VzWh@c#lyCt`@J6e5_$mN=*wL62-f zidw|egoD{+ctSE!@uAtMUjY>T`m}(_=eYp;1RP`2hSWB6Dm}Y*o@)@Cqj~-@e=3D= zz>mb2rquG`WrpXT|9>)`ML_9sJI_>uCZAY%olMF_uw_PV8;vg5a|ALe_ zVbB?4janX;Cn2R{As%OY7>U8Un+TGXcm0Li^u8Lx3b%eFiWV*^loIs{IqfB-7QsWO!&sbUoHxL1(atAYI1m1JJ46ANNE^7 zPkNSDF`0ARYbVT0J@-CbC~~t?k1{qN>e!JT5n>zI$b141uKvPX>42gs8rl&BEwMEFYj2j6rs=Dp!Qs%?jU3xFKb&<}nDZr$-E3baM$OD}nFsPp~`8L8^!-uf;&+7aFrf)OKTIXgqJ_>CoY(D${st4osjW z+Nd(Y)N4K(-vE-Ar^nknUFBA9*Cd(DYkbS{cP=!qK2=81;1ud1xWCMIlCZS@+23@D zS_9b1>qxeJ(ho03mY(4nNGC&5gc-;l?kd?V)pMLZ7g|@KB3_{2rPilB%ltG22rS>N z{hq^FqvPtbiMRNr)vTSt2{;9NH@vNh@#vyXAhV9s0~9+Plz8$|{*^=;9^-`2umG$G z0`rWAQPt8LR-$x#v!QV#^5voaAW#a}%F~uy+Dh6#2I3z{ME5XM{uvE9;7c3K_2CKz z;^%n+vZf;i-$A(L5!N5FDq(o>Y6wQ4G>Q0HDwoE9RJpt=3>Jt0tZ|0$NZfD&6+`czsO zsHiiDVgk^`L6bBX$Um2#@u1WJOb9-4P{W+x%UpmS4pjp)CnHKsc-5ipZ|NB^hMicT?7*Btieu0ignxX~LCoAa z-kAwAicrJ%%0|0mv=0OucF8^%`Yn_4jh1r2R(vgX#iQ0t(X)6OmJ`Pq{fDibG4%bIHi3=-u)1ZSh5^V9?MVg7w`?MV zTN0iv4lGP-iZv^%Oz7m&=!iK#bTJ~t;r(?5nY-Diu-h(+Hi$AHptKC|KN{WoYTC3x zRxwUi4~EWrZ!scIEGCM5O@IHOhy1o|gRNp9-4ZH@A6CC)CwCCow84}Ca)%{g|3Ht< zAul)rY9Ny`W&&~noG<>fGKXJN z7z0rs9N)jw5`Yc{4)tx|k^BP8@|Gk?d_pP5D47NcQ*E^hUI(OCGT^MoP_3ng|zC584pvyMLrzMYc1n0xXWhNspI z0~&{8=O`@cDGk(NCY?6_aYNb0OVcD}Xx4%@QX+pb%!*`q2HkFR0R|5=ca&r{ZgPid z5V;B&6nETi8FqVvrfn%bg2o z{?5oMNZjIGIBvWNZTPE~L6>*RnVsYCo5IK3AuX|xl+gyYp$*r)gbu$>P7v_8>#aL@ znyKk;nI$gf+7!fAXdpUg{p-Wx9n!Axg~bKR(I;d2Uq_3O?5xg|A2EqUNZr&6x=uY7 zsX{+YLq%5&R)gKyB^;U=e3_%SGW~4v%y>v`jC>Wh*87214(dqsx?2%CjUGZAJ_gW6`?+1!iSm}Bazh1D5{kTk9h=htY+UgNwXpCc6x zL}O07eBG^Trk?F`)O2}`XfikBHr#AtH(&XoM>hmmCVO7x|Db_0F{RASTD6Ft>*LF_ z)?r=8uS_|A7xRw@Jn7l*W{@yzyV37P67IB-!8@;~R5)d<3>2cbNwMbt|92fI|-Wnu^APN8ZJgO@C5u>2NR?$Q>H4<5c{7-k16b zT3|G1B=7XkDJfu{_$Ok`%wptYQ>3D$m{UX(TE@D4I1`qkPsC~{DZ)Wt(dsi3n)g+T zsD4Y(3n$M+CxjY;|JRF#b%LK2MCA)F;5s{~BD|>1mL1g)hkv&js}|7$pD4$|8*Pbz zFG}7En}6b@6gq@nUZR{k3-cFwnuMk1hQHgb6ZsfLdJ!S>Ge<$M7W9biZnw0N>a^T4 z!-?0OE-Z;zMD@#Z?hXe-)IVk7ItMyH#kO~W#%b#5-f-zU=%*ihi2nBj0&sY>q+7GJ zFNgbp;p~vd<2VAj9$E-GX%JFBI~MbE8ucHM)usNMqV9hyPJ{SXZG<}C!i-A_3a!vZ zV;d;+=MnOebkoth=ZkmcG~uQ2N>KPRRcDQYoRPU&mR#SOV+##W?S=4AEpHJW;?%wJ z8HdvlQrK=B9O_ZkY?S{pXIykfyr)ES;7=er zHVx206D5BvzgMQjFI58MI{UqJo3vl9tN2?vDsUT)O%Dwkm`=t=c^lTXTNZ@zZ#|;= zRVk}wtBLD(JdiKoNE|t82L5LW3?ZL{M`B_Lm}O3pzry+{)+_2<8616Vx7SvIU&6RQ z*#Go}H@YOLena~zRv1%Sv`WOaw~Cg@-j0=L;yC0_qK~~{aof1!^dD_IxVRXpnaOba zebf+iEz94kg&Jzr)O*PN>{QJsEX>t=hz z$#wj$o#21}(&=r>TSZ0BfNyrJtX598)jC%V6+%jbpAHY~iHO9o+k!#3Hq_~_wk{!$_k&__1AZ&_8FL83+g&Iti&HQfX z1F|IeXXQ8LKe)-Xmtq?J)%3Z&@bSA1X&p(vrK+hXF`Qm&;Q$Z>XzMcZlt`aRBB(vx{fvbKurWYj&YzoXWgvvMOQnaqb= zpzX+&({|SwfdYfp0Mc;BwSvZMHg zmmM-hD~GSg9QKDWp~_1-Z_733P5!gLxBPmyqN%H2fFbg}q5A}C3~CI75{3+d7&qqY z$hoaI7mqW$K9K;Pp)N{H=0^OR0@t$7XJnD|BBQ@z#J7VmUpoHyql3_ZDnhPmSJd&Z zk-DCt=SsvAw8QDOAKtST#nHrbablf{BQ6qM4hZd{lk7DJf#(VsD{-xD%qpVFfW=#8 zq;HT^oir2=`fTY-=xCT!@^XJyDS`@|GOw^NSKpyJx5~>W0$Szlku$F-48HN_C zD=^Q+fadp>uY0plxYz-QMHQ0jd`6t%ZhQnua?qjQzDy~r=~Ke8^D~r&k5*(bjfPv8 zE=diy5cs8uFBt~hjMROj){b~c-2L_K?k|=N=xF&y!WTk~ulZnfE2xj{0&{SGdsb*n zL4fp`!}fCL{$lfs{P=@}JA`ZGz$xg0!PW+ZC<eKY@jR~q;{*z1 z7yVN?J7>eNDLNJk*F$#%`BZ-Bo~a0@6LAQA9pMpeN=<{<<}hgbMD8Jli!}K4K^Jin z&-3gS^TcdeyTFi0BQO~Fp^^XCxlD1nuRz zL(+>YzL{5u-%5xN4Oc2K%vjGx5=jRM7tr@Cdrw&>Z`Ob>G_pT?zd1c%=*xaTbdR8q zVv_4lWF?USxtLsq zLL=@I|I|SKQZ!rh(cREsjiqN2kMhQRUqUbQ-lKLt=xW)4dH+oiFSPLd3ExT}y|S0; zc0;Yba`=r=knRU)!XcItIDAp`{0b8CwU;Vi_P zgF5)0!XShBUO(UWa#c0qX53c~FN*QS=SvYC6P%=RuRwR+>5Nb|#hTF`p&oWB5EN3} zCsSYisQW{E#9j!%r#n)QhQ%*+%w+iD3}xHxNB4c^Qe}aI7p#QVd3TPK%pPWSo2HzcaCOcv-$cJLo2W;tK8uca$l6>!hLiQ}hUhPo$`Ts33h;7|Q#V-1XR0|UYt5NVjkCr;98mA^D2sIOgVZcSvky6g5P^Pcs5d!o|X)s@#@z~r7nx}dYj7B8@tL=&mr(kNDVFEa8xZZjT-3IiSwE-iN#EQJ>t26 z>=&?)Yg~Rj4nz`tdD5%9iJSG{{!(nM7e^AJKU_73nm4kD{5HV!H!HJUi|V~zRdb))e*6>glodH|Y8qX{ z9&eNdezuS{@pGpu4_kSoomYgmnsc~|pGghK)5^32hya989_5L*zK3dyw3qR;NeK)lbPUJ;xX5xl@x?dqdo4P-UC;y?_cpR`Tq2dRw8gjycpd<{T4 ztTqF$qK~NFM!e8~wLIc}Je0Hc!Lx7?0p{Q1I(eMYaS34BIB!n{qN+n;g&=+B=&d;a zSku_82ky@UCY_HXPz7o;=5Z#w786Gz0Uh2TH#v01I7zZ$5YaSzDX&L!kZ&C<(%B@U99R^pP4{oZ?r(Nt&3-wq7CEWfkPQ`oIyUBwJ0x7-c5i7EaG*(>cu4u z+&e6q%@w$MxIFyYuv->};HfeiA=M+)?!qA7_iws0{>dIWnROwQkIUN3 z-oHZ5Th=cdSVK|Zk$!tz|M?UD(Jsc1<@ZyaD?c3mF{-Ln_&QS*y-_Nr$tcmchw%!#$sb%8waU2^}L z<5l`W(TZNmC7q?=kGO-fHe1}(Bp+{%j~Q6slQ(};(UiW7B(ttyeqd-XH^PhmM3SXG z{RMA*w>gzet&?20Y$l**XNCiN?8 z_g|q(>PY_rU{u{Z7FEp=cS+q15$;n|8jqi%aSAf^K#G6^>p!Vdd)?8p!{@_6bn<*& zJIj+S)ezP3peboyZ6=wrmbHt? zADDcb*ZT)D$(M)Ca+ROmcPY^l#%W~yn!7;v7wes~l#%=jAMY4D;sj3a6eB%Z$6q{3 zsS@ukDibh$@6M^4Ik+L@vZ^mdk7@m^XAi0nqi$6kJV`R76i8WP81<)2B zYIpSG?}dI|$go%CI4QED)(w|dhz6SX}wQ8xG(d#x@X`3qKI!yMXvK{V7l)jd5z#R4-I%RM4zeL@$d3MOG>Jf2@F&|m{T2sb!%R7%mj6o=$ z88@4FM?Uqp+>C5$S2S=@D8J5NQ!r#K1pq4Kq9@N!-9-XUuOwFNxA4uAg4jV(%b@z& zH|zv!6yMhI5qNT0sCAH7$9W$vIdc^9yzOY+xtc#^Arc_+FC-TFWz>Yj4>w6IhWKn4 zfJn3H!0%&3rl@Ei8_!57Ky7hUz1l&E{@nhEFY6Dr#{tGlgOEoXUYVd_n!7K_7bETz z_*2KI!^WI|5|QHw-Eql1#-MeFB;~hPRqTk(5joLqfh7KRVzUUt8`q?Nyg%3xD}J5m?xLLxLtcoH)GT6#p19AAB!2fu#}kqC+mn

s{QjgwC=RmKq~yjIo)H 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 KrTUV4%zpp^N<&Kk diff --git a/apps/stage-tamagotchi-tauri/build/icon.ico b/apps/stage-tamagotchi-tauri/build/icon.ico deleted file mode 100644 index ee3c5ff9d45adc4e6187d19abde8c67250042001..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7856 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 QA?FNeJkVAxS4M^YKXL*x9RL6T diff --git a/apps/stage-tamagotchi-tauri/build/icon.png b/apps/stage-tamagotchi-tauri/build/icon.png deleted file mode 100644 index 14fa1397f016c736957747a582d7bdc7f705b9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12366 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.2.1", - "@tresjs/cientos": "^4.3.0", - "@tresjs/core": "^4.3.3", - "@unhead/vue": "^2.0.3", - "@vueuse/core": "^13.0.0", - "@vueuse/head": "^2.0.0", - "@vueuse/shared": "^13.0.0", - "@xsai-ext/providers-cloud": "catalog:", - "@xsai-ext/providers-local": "catalog:", - "@xsai-ext/shared-providers": "catalog:", - "@xsai/generate-speech": "catalog:", - "@xsai/generate-text": "catalog:", - "@xsai/model": "catalog:", - "@xsai/shared-chat": "catalog:", - "@xsai/stream-text": "catalog:", - "@xsai/utils-chat": "catalog:", - "culori": "^4.0.1", - "defu": "^6.1.4", - "drizzle-kit": "^0.30.6", - "drizzle-orm": "^0.41.0", - "jszip": "^3.10.1", - "localforage": "^1.10.0", - "nprogress": "^0.2.0", - "ofetch": "^1.4.1", - "onnxruntime-web": "^1.21.0", - "pinia": "^3.0.1", - "pixi-filters": "^4.2.0", - "pixi-live2d-display": "^0.4.0", - "popmotion": "^11.0.5", - "radix-vue": "^1.9.17", - "rehype-stringify": "^10.0.1", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.1.2", - "shiki": "^3.2.1", - "three": "^0.175.0", - "unified": "^11.0.5", - "valibot": "1.0.0-beta.9", - "vaul-vue": "^0.4.1", - "vue": "^3.5.13", - "vue-demi": "^0.14.10", - "vue-i18n": "^11.1.2", - "vue-router": "^4.5.0", - "xsschema": "catalog:", - "yauzl": "^3.2.0", - "zod": "^3.24.2" - }, - "devDependencies": { - "@iconify-json/carbon": "^1.2.8", - "@iconify-json/eos-icons": "^1.2.2", - "@iconify-json/lucide": "^1.2.34", - "@iconify-json/mingcute": "^1.2.3", - "@iconify-json/simple-icons": "^1.2.30", - "@iconify-json/solar": "^1.2.2", - "@iconify-json/svg-spinners": "^1.2.2", - "@iconify-json/vscode-icons": "^1.2.18", - "@iconify/utils": "^2.3.0", - "@intlify/unplugin-vue-i18n": "^6.0.5", - "@proj-airi/drizzle-duckdb-wasm": "workspace:^", - "@proj-airi/lobe-icons": "^1.0.5", - "@proj-airi/provider-transformers": "workspace:^", - "@proj-airi/ui-transitions": "workspace:^", - "@proj-airi/unplugin-fetch": "^0.1.4", - "@proj-airi/unplugin-live2d-sdk": "^0.1.2", - "@shikijs/markdown-it": "^3.2.1", - "@tauri-apps/cli": "^2.4.1", - "@types/culori": "^2.1.1", - "@types/markdown-it-link-attributes": "^3.0.5", - "@types/nprogress": "^0.2.3", - "@types/three": "^0.175.0", - "@types/yauzl": "^2.10.3", - "@unocss/reset": "^66.1.0-beta.9", - "@vitejs/plugin-vue": "^5.2.3", - "@vue-macros/volar": "^3.0.0-beta.7", - "@vueuse/motion": "^3.0.3", - "less": "^4.2.2", - "markdown-it-link-attributes": "^4.0.1", - "unocss-preset-scrollbar": "^3.2.0", - "unplugin-auto-import": "^19.1.2", - "unplugin-vue-components": "^28.4.1", - "unplugin-vue-macros": "^2.14.5", - "unplugin-vue-markdown": "^28.3.1", - "unplugin-vue-router": "^0.12.0", - "vite-bundle-visualizer": "^1.2.1", - "vite-plugin-pwa": "^1.0.0", - "vite-plugin-vue-devtools": "^7.7.2", - "vite-plugin-vue-layouts": "^0.11.0", - "vue-tsc": "^3.0.0-alpha.2" - } -} diff --git a/apps/stage-tamagotchi-tauri/tsconfig.json b/apps/stage-tamagotchi-tauri/tsconfig.json deleted file mode 100644 index 95159f274..000000000 --- a/apps/stage-tamagotchi-tauri/tsconfig.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "jsx": "preserve", - "lib": [ - "DOM", - "ESNext" - ], - "paths": { - "@proj-airi/stage-ui/*": [ - "../../packages/stage-ui/src/*" - ], - "@proj-airi/ui-transitions": [ - "../../packages/ui-transitions/src/index.ts" - ] - }, - "resolveJsonModule": true, - "types": [ - "vitest", - "vite/client", - "vite-plugin-vue-layouts/client", - "vite-plugin-pwa/client", - "unplugin-vue-macros/macros-global", - "unplugin-vue-router/client" - ], - "allowJs": true, - "strict": true, - "skipLibCheck": true - }, - "vueCompilerOptions": { - "plugins": [ - "@vue-macros/volar/define-models", - "@vue-macros/volar/define-slots" - ] - } -} diff --git a/apps/stage-tamagotchi-tauri/uno.config.ts b/apps/stage-tamagotchi-tauri/uno.config.ts deleted file mode 100644 index e39f4206e..000000000 --- a/apps/stage-tamagotchi-tauri/uno.config.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { createExternalPackageIconLoader } from '@iconify/utils/lib/loader/external-pkg' -import { colorToString } from '@unocss/preset-mini/utils' -import { createLocalFontProcessor } from '@unocss/preset-web-fonts/local' -import { - defineConfig, - presetAttributify, - presetIcons, - presetTypography, - presetWebFonts, - presetWind3, - transformerDirectives, - transformerVariantGroup, -} from 'unocss' -import { presetScrollbar } from 'unocss-preset-scrollbar' -import { parseColor } from 'unocss/preset-mini' - -function createColorSchemeConfig(hueOffset = 0) { - return { - DEFAULT: `oklch(62% var(--theme-colors-chroma) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 50: `color-mix(in srgb, oklch(95% var(--theme-colors-chroma-50) calc(var(--theme-colors-hue) + ${hueOffset})) 30%, oklch(100% 0 360))`, - 100: `color-mix(in srgb, oklch(95% var(--theme-colors-chroma-100) calc(var(--theme-colors-hue) + ${hueOffset})) 80%, oklch(100% 0 360))`, - 200: `oklch(90% var(--theme-colors-chroma-200) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 300: `oklch(85% var(--theme-colors-chroma-300) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 400: `oklch(74% var(--theme-colors-chroma-400) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 500: `oklch(62% var(--theme-colors-chroma) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 600: `oklch(54% var(--theme-colors-chroma-600) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 700: `oklch(49% var(--theme-colors-chroma-700) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 800: `oklch(42% var(--theme-colors-chroma-800) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 900: `oklch(37% var(--theme-colors-chroma-900) calc(var(--theme-colors-hue) + ${hueOffset}))`, - 950: `oklch(29% var(--theme-colors-chroma-950) calc(var(--theme-colors-hue) + ${hueOffset}))`, - } -} - -export default defineConfig({ - presets: [ - presetWind3(), - presetAttributify(), - presetTypography(), - presetWebFonts({ - fonts: { - sans: 'DM Sans', - serif: 'DM Serif Display', - mono: 'DM Mono', - cute: 'Kiwi Maru', - cuteen: 'Sniglet', - }, - // Web fonts preset - // https://unocss.dev/presets/web-fonts#serve-fonts-locally - processors: createLocalFontProcessor(), - }), - presetIcons({ - scale: 1.2, - collections: { - ...createExternalPackageIconLoader('@proj-airi/lobe-icons'), - }, - }), - presetScrollbar(), - ], - transformers: [ - transformerDirectives({ - applyVariable: ['--at-apply'], - }), - transformerVariantGroup(), - ], - safelist: 'prose prose-sm m-auto text-left'.split(' '), - // hyoban/unocss-preset-shadcn: Use shadcn ui with UnoCSS - // https://github.com/hyoban/unocss-preset-shadcn - // - // Thanks to - // https://github.com/unovue/shadcn-vue/issues/34#issuecomment-2467318118 - // https://github.com/hyoban-template/shadcn-vue-unocss-starter - // - // By default, `.ts` and `.js` files are NOT extracted. - // If you want to extract them, use the following configuration. - // It's necessary to add the following configuration if you use shadcn-vue or shadcn-svelte. - content: { - pipeline: { - include: [ - // the default - /\.(vue|svelte|[jt]sx|mdx?|astro|elm|php|phtml|html)($|\?)/, - // include js/ts files - '(components|src)/**/*.{js,ts}', - '**/stage-ui/**/*.{js,ts}', - ], - }, - }, - rules: [ - [/^mask-\[(.*)\]$/, ([, suffix]) => ({ '-webkit-mask-image': suffix.replace(/_/g, ' ') })], - [/^bg-dotted-\[(.*)\]$/, ([, color], { theme }) => { - const parsedColor = parseColor(color, theme) - // Util usage: https://github.com/unocss/unocss/blob/f57ef6ae50006a92f444738e50f3601c0d1121f2/packages-presets/preset-mini/src/_utils/utilities.ts#L186 - return { - 'background-image': `radial-gradient(circle at 1px 1px, ${colorToString(parsedColor?.cssColor ?? parsedColor?.color ?? color, 'var(--un-background-opacity)')} 1px, transparent 0)`, - '--un-background-opacity': parsedColor?.cssColor?.alpha ?? parsedColor?.alpha ?? 1, - } - }], - ], - theme: { - colors: { - primary: createColorSchemeConfig(), - complementary: createColorSchemeConfig(180), - }, - }, -}) diff --git a/apps/stage-tamagotchi-tauri/.tool-versions b/apps/stage-tamagotchi/.tool-versions similarity index 100% rename from apps/stage-tamagotchi-tauri/.tool-versions rename to apps/stage-tamagotchi/.tool-versions diff --git a/apps/stage-tamagotchi/README.md b/apps/stage-tamagotchi/README.md index 3848e1b0e..55f48940a 100644 --- a/apps/stage-tamagotchi/README.md +++ b/apps/stage-tamagotchi/README.md @@ -41,9 +41,11 @@ $ pnpm build:linux - [ ] Window control: Move, resize, hide, show - [ ] Motions follow the cursor -- [x] System tray -- [x] i18n +- [ ] System tray +- [ ] tauri i18n - [ ] Multi-DPI +- [ ] CI/CD - [ ] Multi monitor - [ ] Send message via macOS Spotlight - [ ] Steam +- [ ] CSP settings diff --git a/apps/stage-tamagotchi/electron-builder.yml b/apps/stage-tamagotchi/electron-builder.yml deleted file mode 100644 index 715a1343e..000000000 --- a/apps/stage-tamagotchi/electron-builder.yml +++ /dev/null @@ -1,43 +0,0 @@ -appId: com.github.moeru-ai.airi-tamagotchi -productName: airi -directories: - buildResources: build -files: - - '!**/.vscode/*' - - '!src/*' - - '!electron.vite.config.{js,ts,mjs,cjs}' - - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' - - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' - - '!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}' -asarUnpack: - - resources/** -win: - executableName: tamagotchi -nsis: - artifactName: ${productName}-${os}-${arch}-v${version}.${ext} - shortcutName: ${productName} - uninstallDisplayName: ${productName} - createDesktopShortcut: always -mac: - entitlementsInherit: build/entitlements.mac.plist - extendInfo: - - NSCameraUsageDescription: Application requests access to the device's camera. - - NSMicrophoneUsageDescription: Application requests access to the device's microphone. - - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. - - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. - # - NSCameraUseContinuityCameraDeviceType: Application requests access to the device's camera. - # - AVCaptureDeviceTypeContinuityCamera: Application requests access to the device's camera. - notarize: false -dmg: - artifactName: ${productName}-${os}-${arch}-v${version}.${ext} -linux: - target: - - AppImage - maintainer: github.com/moeru-ai Contributors - category: Entertainment -appImage: - artifactName: ${productName}-${os}-${arch}-v${version}.${ext} -npmRebuild: false -# publish: -# provider: generic -# url: https://example.com/auto-updates diff --git a/apps/stage-tamagotchi/electron.vite.config.ts b/apps/stage-tamagotchi/electron.vite.config.ts deleted file mode 100644 index ed9aa375f..000000000 --- a/apps/stage-tamagotchi/electron.vite.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { defineConfig, externalizeDepsPlugin } from 'electron-vite' - -import rendererConfig from './renderer.vite.config' - -export default defineConfig({ - main: { - plugins: [externalizeDepsPlugin()], - }, - preload: { - plugins: [externalizeDepsPlugin()], - }, - renderer: rendererConfig, -}) diff --git a/apps/stage-tamagotchi-tauri/index.html b/apps/stage-tamagotchi/index.html similarity index 100% rename from apps/stage-tamagotchi-tauri/index.html rename to apps/stage-tamagotchi/index.html diff --git a/apps/stage-tamagotchi-tauri/locales/en.yml b/apps/stage-tamagotchi/locales/en.yml similarity index 100% rename from apps/stage-tamagotchi-tauri/locales/en.yml rename to apps/stage-tamagotchi/locales/en.yml diff --git a/apps/stage-tamagotchi-tauri/locales/zh-CN.yml b/apps/stage-tamagotchi/locales/zh-CN.yml similarity index 100% rename from apps/stage-tamagotchi-tauri/locales/zh-CN.yml rename to apps/stage-tamagotchi/locales/zh-CN.yml diff --git a/apps/stage-tamagotchi/package.json b/apps/stage-tamagotchi/package.json index 1c08395c1..0128e63cb 100644 --- a/apps/stage-tamagotchi/package.json +++ b/apps/stage-tamagotchi/package.json @@ -1,28 +1,19 @@ { "name": "@proj-airi/stage-tamagotchi", + "type": "module", "version": "0.4.19", "private": true, - "description": "An Electron application with Vue and TypeScript", + "description": "Airi tamagotchi app written in Tauri", "author": "LemonNekoGH", - "homepage": "https://electron-vite.org", - "main": "./out/main/index.js", "scripts": { - "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false", - "typecheck:web": "vue-tsc --noEmit -p tsconfig.web.json --composite false", - "typecheck": "pnpm run typecheck:node && pnpm run typecheck:web", + "typecheck": "vue-tsc --noEmit --composite false", "start": "electron-vite preview", - "dev": "electron-vite dev", - "build": "pnpm run typecheck && electron-vite build", - "postinstall": "electron-builder install-app-deps", - "build:unpack": "pnpm run build && electron-builder --dir", - "build:win": "pnpm run build && electron-builder --win", - "build:mac": "pnpm run build && electron-builder --mac", - "build:linux": "pnpm run build && electron-builder --linux" + "dev": "vite", + "build": "vite build", + "build:unpack": "tauri build --no-bundle" }, "dependencies": { "@11labs/client": "^0.1.0", - "@electron-toolkit/preload": "^3.0.1", - "@electron-toolkit/utils": "^3.0.0", "@formkit/auto-animate": "^0.8.2", "@huggingface/transformers": "^3.4.2", "@pixi/app": "6", @@ -43,6 +34,8 @@ "@pixiv/three-vrm-core": "^3.3.6", "@proj-airi/stage-ui": "workspace:^", "@ricky0123/vad-web": "^0.0.22", + "@tauri-apps/api": "^2.4.1", + "@tauri-apps/plugin-os": ">=2.2.1", "@tresjs/cientos": "^4.3.0", "@tresjs/core": "^4.3.3", "@unhead/vue": "^2.0.3", @@ -89,7 +82,6 @@ "zod": "^3.24.2" }, "devDependencies": { - "@electron-toolkit/tsconfig": "^1.0.1", "@iconify-json/carbon": "^1.2.8", "@iconify-json/eos-icons": "^1.2.2", "@iconify-json/lucide": "^1.2.34", @@ -107,6 +99,7 @@ "@proj-airi/unplugin-fetch": "^0.1.4", "@proj-airi/unplugin-live2d-sdk": "^0.1.2", "@shikijs/markdown-it": "^3.2.1", + "@tauri-apps/cli": "^2.4.1", "@types/culori": "^2.1.1", "@types/markdown-it-link-attributes": "^3.0.5", "@types/nprogress": "^0.2.3", @@ -116,9 +109,6 @@ "@vitejs/plugin-vue": "^5.2.3", "@vue-macros/volar": "^3.0.0-beta.7", "@vueuse/motion": "^3.0.3", - "electron": "^34.4.1", - "electron-builder": "24.13.3", - "electron-vite": "^2.3.0", "less": "^4.2.2", "markdown-it-link-attributes": "^4.0.1", "unocss-preset-scrollbar": "^3.2.0", diff --git a/apps/stage-tamagotchi/renderer.vite.config.ts b/apps/stage-tamagotchi/renderer.vite.config.ts deleted file mode 100644 index f7b3596c2..000000000 --- a/apps/stage-tamagotchi/renderer.vite.config.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { join, resolve } from 'node:path' -import VueI18n from '@intlify/unplugin-vue-i18n/vite' -import { Download } from '@proj-airi/unplugin-fetch' -import { DownloadLive2DSDK } from '@proj-airi/unplugin-live2d-sdk' -import { templateCompilerOptions } from '@tresjs/core' -import Vue from '@vitejs/plugin-vue' -import UnoCss from 'unocss/vite' -import VueMacros from 'unplugin-vue-macros/vite' -import VueRouter from 'unplugin-vue-router/vite' -import { defineConfig } from 'vite' -import Layouts from 'vite-plugin-vue-layouts' - -export default defineConfig({ - optimizeDeps: { - exclude: [ - '@proj-airi/stage-ui/*', - ], - }, - resolve: { - alias: { - '@renderer': resolve(join('src', 'renderer', 'src')), - '@proj-airi/stage-ui': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'dist')), - '@proj-airi/stage-ui/stores': resolve(join(import.meta.dirname, '..', '..', 'packages', 'stage-ui', 'dist', 'stores')), - }, - }, - plugins: [ - VueMacros({ - plugins: { - vue: Vue({ - include: [/\.vue$/, /\.md$/], - ...templateCompilerOptions, - }), - vueJsx: false, - }, - }), - - VueRouter({ - dts: resolve(import.meta.dirname, 'src/typed-router.d.ts'), - routesFolder: 'src/renderer/src/pages', - }), - - // https://github.com/JohnCampionJr/vite-plugin-vue-layouts - Layouts(), - - UnoCss(), - - // https://github.com/intlify/bundle-tools/tree/main/packages/unplugin-vue-i18n - VueI18n({ - runtimeOnly: true, - compositionOnly: true, - fullInstall: true, - include: [resolve(import.meta.dirname, 'src', 'renderer', 'locales/**')], - }), - - DownloadLive2DSDK(), - Download('https://dist.ayaka.moe/live2d-models/hiyori_free_zh.zip', 'hiyori_free_zh.zip', 'assets/live2d/models'), - Download('https://dist.ayaka.moe/live2d-models/hiyori_pro_zh.zip', 'hiyori_pro_zh.zip', 'assets/live2d/models'), - ], -}) diff --git a/apps/stage-tamagotchi-tauri/scripts/rename-artifacts.js b/apps/stage-tamagotchi/scripts/rename-artifacts.js similarity index 100% rename from apps/stage-tamagotchi-tauri/scripts/rename-artifacts.js rename to apps/stage-tamagotchi/scripts/rename-artifacts.js diff --git a/apps/stage-tamagotchi-tauri/src-tauri/.gitignore b/apps/stage-tamagotchi/src-tauri/.gitignore similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/.gitignore rename to apps/stage-tamagotchi/src-tauri/.gitignore diff --git a/apps/stage-tamagotchi-tauri/src-tauri/Cargo.lock b/apps/stage-tamagotchi/src-tauri/Cargo.lock similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/Cargo.lock rename to apps/stage-tamagotchi/src-tauri/Cargo.lock diff --git a/apps/stage-tamagotchi-tauri/src-tauri/Cargo.toml b/apps/stage-tamagotchi/src-tauri/Cargo.toml similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/Cargo.toml rename to apps/stage-tamagotchi/src-tauri/Cargo.toml diff --git a/apps/stage-tamagotchi-tauri/src-tauri/build.rs b/apps/stage-tamagotchi/src-tauri/build.rs similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/build.rs rename to apps/stage-tamagotchi/src-tauri/build.rs diff --git a/apps/stage-tamagotchi-tauri/src-tauri/capabilities/default.json b/apps/stage-tamagotchi/src-tauri/capabilities/default.json similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/capabilities/default.json rename to apps/stage-tamagotchi/src-tauri/capabilities/default.json diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/128x128.png b/apps/stage-tamagotchi/src-tauri/icons/128x128.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/128x128.png rename to apps/stage-tamagotchi/src-tauri/icons/128x128.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/128x128@2x.png b/apps/stage-tamagotchi/src-tauri/icons/128x128@2x.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/128x128@2x.png rename to apps/stage-tamagotchi/src-tauri/icons/128x128@2x.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/32x32.png b/apps/stage-tamagotchi/src-tauri/icons/32x32.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/32x32.png rename to apps/stage-tamagotchi/src-tauri/icons/32x32.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square107x107Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square107x107Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square107x107Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square107x107Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square142x142Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square142x142Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square142x142Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square142x142Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square150x150Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square150x150Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square150x150Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square150x150Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square284x284Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square284x284Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square284x284Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square284x284Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square30x30Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square30x30Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square30x30Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square30x30Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square310x310Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square310x310Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square310x310Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square310x310Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square44x44Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square44x44Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square44x44Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square44x44Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square71x71Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square71x71Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square71x71Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square71x71Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/Square89x89Logo.png b/apps/stage-tamagotchi/src-tauri/icons/Square89x89Logo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/Square89x89Logo.png rename to apps/stage-tamagotchi/src-tauri/icons/Square89x89Logo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/StoreLogo.png b/apps/stage-tamagotchi/src-tauri/icons/StoreLogo.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/StoreLogo.png rename to apps/stage-tamagotchi/src-tauri/icons/StoreLogo.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/icon.icns b/apps/stage-tamagotchi/src-tauri/icons/icon.icns similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/icon.icns rename to apps/stage-tamagotchi/src-tauri/icons/icon.icns diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/icon.ico b/apps/stage-tamagotchi/src-tauri/icons/icon.ico similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/icon.ico rename to apps/stage-tamagotchi/src-tauri/icons/icon.ico diff --git a/apps/stage-tamagotchi-tauri/src-tauri/icons/icon.png b/apps/stage-tamagotchi/src-tauri/icons/icon.png similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/icons/icon.png rename to apps/stage-tamagotchi/src-tauri/icons/icon.png diff --git a/apps/stage-tamagotchi-tauri/src-tauri/src/commands.rs b/apps/stage-tamagotchi/src-tauri/src/commands.rs similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/src/commands.rs rename to apps/stage-tamagotchi/src-tauri/src/commands.rs diff --git a/apps/stage-tamagotchi-tauri/src-tauri/src/lib.rs b/apps/stage-tamagotchi/src-tauri/src/lib.rs similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/src/lib.rs rename to apps/stage-tamagotchi/src-tauri/src/lib.rs diff --git a/apps/stage-tamagotchi-tauri/src-tauri/src/main.rs b/apps/stage-tamagotchi/src-tauri/src/main.rs similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/src/main.rs rename to apps/stage-tamagotchi/src-tauri/src/main.rs diff --git a/apps/stage-tamagotchi-tauri/src-tauri/tauri.conf.json b/apps/stage-tamagotchi/src-tauri/tauri.conf.json similarity index 100% rename from apps/stage-tamagotchi-tauri/src-tauri/tauri.conf.json rename to apps/stage-tamagotchi/src-tauri/tauri.conf.json diff --git a/apps/stage-tamagotchi-tauri/src/App.vue b/apps/stage-tamagotchi/src/App.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/App.vue rename to apps/stage-tamagotchi/src/App.vue diff --git a/apps/stage-tamagotchi-tauri/src/components/ChatHistory.vue b/apps/stage-tamagotchi/src/components/ChatHistory.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/components/ChatHistory.vue rename to apps/stage-tamagotchi/src/components/ChatHistory.vue diff --git a/apps/stage-tamagotchi-tauri/src/components/InteractiveArea.vue b/apps/stage-tamagotchi/src/components/InteractiveArea.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/components/InteractiveArea.vue rename to apps/stage-tamagotchi/src/components/InteractiveArea.vue diff --git a/apps/stage-tamagotchi-tauri/src/components/Widgets/Live2DSettings.vue b/apps/stage-tamagotchi/src/components/Widgets/Live2DSettings.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/components/Widgets/Live2DSettings.vue rename to apps/stage-tamagotchi/src/components/Widgets/Live2DSettings.vue diff --git a/apps/stage-tamagotchi-tauri/src/composables/window-shortcuts.ts b/apps/stage-tamagotchi/src/composables/window-shortcuts.ts similarity index 100% rename from apps/stage-tamagotchi-tauri/src/composables/window-shortcuts.ts rename to apps/stage-tamagotchi/src/composables/window-shortcuts.ts diff --git a/apps/stage-tamagotchi-tauri/src/layouts/default.vue b/apps/stage-tamagotchi/src/layouts/default.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/layouts/default.vue rename to apps/stage-tamagotchi/src/layouts/default.vue diff --git a/apps/stage-tamagotchi-tauri/src/layouts/stage.vue b/apps/stage-tamagotchi/src/layouts/stage.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/layouts/stage.vue rename to apps/stage-tamagotchi/src/layouts/stage.vue diff --git a/apps/stage-tamagotchi-tauri/src/main.ts b/apps/stage-tamagotchi/src/main.ts similarity index 100% rename from apps/stage-tamagotchi-tauri/src/main.ts rename to apps/stage-tamagotchi/src/main.ts diff --git a/apps/stage-tamagotchi/src/main/index.ts b/apps/stage-tamagotchi/src/main/index.ts deleted file mode 100644 index c0510fd3b..000000000 --- a/apps/stage-tamagotchi/src/main/index.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { join } from 'node:path' -import { env, platform } from 'node:process' -import { electronApp, is, optimizer } from '@electron-toolkit/utils' -import { nativeImage, shell } from 'electron/common' -import { app, BrowserWindow, dialog, ipcMain, Tray } from 'electron/main' - -import trayIconMacos from '../../build/icon-tray-macos.png?asset' -import icon from '../../build/icon.png?asset' -import { createI18n } from './locales' -import { createApplicationMenu, createTrayMenu } from './menu' - -let mainWindow: BrowserWindow -let tray: Tray - -const i18n = createI18n() - -function showQuitDialog() { - dialog.showMessageBox({ - type: 'info', - title: i18n.t('menu.quit'), - message: i18n.t('quitDialog.message'), - buttons: [i18n.t('quitDialog.buttons.quit'), i18n.t('quitDialog.buttons.cancel')], - }).then((result) => { - if (result.response === 0) { - mainWindow.webContents.send('before-quit') - setTimeout(() => { - app.quit() - }, 2000) - } - }) -} - -function rebuildTrayMenu() { - if (mainWindow.isVisible()) { - tray.setContextMenu(createTrayMenu(i18n, mainWindow.isVisible(), () => { - mainWindow.webContents.send('before-hide') - setTimeout(() => { - mainWindow.hide() - rebuildTrayMenu() - }, 2000) - }, createSettingsWindow, showQuitDialog)) - return - } - tray.setContextMenu(createTrayMenu(i18n, mainWindow.isVisible(), () => { - mainWindow.show() - mainWindow.webContents.send('after-show') - rebuildTrayMenu() - }, createSettingsWindow, showQuitDialog)) -} - -function createWindow() { - // Create the browser window. - mainWindow = new BrowserWindow({ - width: 300 * 1.5, - height: 400 * 1.5, - show: false, - autoHideMenuBar: true, - frame: false, - transparent: true, - resizable: false, - hasShadow: false, - alwaysOnTop: true, - ...(platform === 'linux' ? { icon } : {}), - webPreferences: { - preload: join(import.meta.dirname, '..', 'preload', 'index.js'), - sandbox: false, - }, - }) - - mainWindow.on('ready-to-show', () => { - mainWindow.show() - }) - - mainWindow.webContents.setWindowOpenHandler((details) => { - shell.openExternal(details.url) - return { action: 'deny' } - }) - - mainWindow.show() - - // HMR for renderer base on electron-vite cli. - // Load the remote URL for development or the local html file for production. - - if (is.dev && env.ELECTRON_RENDERER_URL) { - mainWindow.loadURL(env.ELECTRON_RENDERER_URL) - } - else { - mainWindow.loadFile(join(import.meta.dirname, '..', '..', 'out', 'renderer', 'index.html')) - } -} - -let settingsWindow: BrowserWindow | null = null - -function createSettingsWindow() { - if (settingsWindow) { - settingsWindow.show() - return - } - - settingsWindow = new BrowserWindow({ - width: 300 * 2, - height: 400 * 2, - show: false, - webPreferences: { - preload: join(import.meta.dirname, '..', 'preload', 'index.js'), - sandbox: false, - }, - }) - - settingsWindow.on('ready-to-show', () => { - settingsWindow?.show() - }) - - settingsWindow.webContents.setWindowOpenHandler((details) => { - shell.openExternal(details.url) - return { action: 'deny' } - }) - - settingsWindow.on('closed', () => { - settingsWindow = null - }) - - settingsWindow.show() - - if (is.dev && env.ELECTRON_RENDERER_URL) { - settingsWindow.loadURL(join(env.ELECTRON_RENDERER_URL, '#/settings')) - } - else { - settingsWindow.loadFile(join(import.meta.dirname, '..', '..', 'out', 'renderer', 'index.html'), { - hash: '/settings', - }) - } -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.whenReady().then(() => { - createApplicationMenu(i18n, showQuitDialog, createSettingsWindow) - - // Set app user model id for windows - electronApp.setAppUserModelId('com.github.moeru-ai.airi-tamagotchi') - - // Default open or close DevTools by F12 in development - // and ignore CommandOrControl + R in production. - // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils - app.on('browser-window-created', (_, window) => { - optimizer.watchWindowShortcuts(window) - }) - - // IPC test - ipcMain.on('quit', showQuitDialog) - - ipcMain.on('open-settings', () => createSettingsWindow()) - - ipcMain.on('close-settings', () => { - if (settingsWindow) { - settingsWindow.close() - } - }) - - createWindow() - - app.on('activate', () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (BrowserWindow.getAllWindows().length === 0) { - createWindow() - } - }) - - const trayIcon = platform === 'darwin' - ? nativeImage.createFromPath(trayIconMacos).resize({ width: 16, height: 16 }) - : nativeImage.createFromPath(icon).resize({ width: 16, height: 16 }) - tray = new Tray(trayIcon) - tray.setToolTip('Airi') - rebuildTrayMenu() - - app.dock.hide() - - ipcMain.on('locale-changed', (_, language: string) => { - i18n.setLocale(language) - rebuildTrayMenu() - createApplicationMenu(i18n, showQuitDialog, createSettingsWindow) - }) - - ipcMain.on('start-resize-window', () => { - mainWindow.setResizable(true) - }) - - ipcMain.on('stop-resize-window', () => { - mainWindow.setResizable(false) - }) - - ipcMain.handle('stop-move-window', () => { - return mainWindow.getPosition() - }) - - ipcMain.on('window-size-changed', (_, width: number, height: number) => { - if (width === 0 || height === 0) { - mainWindow.setSize(300 * 1.5, 400 * 1.5) // back to default size - return - } - mainWindow.setSize(width, height) - }) - - ipcMain.on('window-position-changed', (_, x: number, y: number) => { - mainWindow.setPosition(x, y) - }) -}) diff --git a/apps/stage-tamagotchi/src/main/locales/en-US.ts b/apps/stage-tamagotchi/src/main/locales/en-US.ts deleted file mode 100644 index acd443b9d..000000000 --- a/apps/stage-tamagotchi/src/main/locales/en-US.ts +++ /dev/null @@ -1,18 +0,0 @@ -export default { - menu: { - settings: 'Settings', - quit: 'Quit', - about: 'About', - toggleDevTools: 'Toggle Developer Tools', - show: 'Show airi', - hide: 'Hide airi', - }, - quitDialog: { - title: 'Quit', - message: 'Are you sure you want to quit?', - buttons: { - quit: 'Quit', - cancel: 'Cancel', - }, - }, -} diff --git a/apps/stage-tamagotchi/src/main/locales/index.test.ts b/apps/stage-tamagotchi/src/main/locales/index.test.ts deleted file mode 100644 index c916ca7dc..000000000 --- a/apps/stage-tamagotchi/src/main/locales/index.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import { createI18n } from '.' - -describe('createI18n', () => { - it('should return the correct locale', () => { - const { t } = createI18n() - expect(t('menu.settings')).toBe('Settings') - }) - - it('should return key if the key is not found', () => { - const { t } = createI18n() - // @ts-expect-error for test - expect(t('menu.not.found')).toBe('menu.not.found') - }) - - it('should set the correct locale', () => { - const { t, setLocale } = createI18n() - setLocale('zh-CN') - expect(t('menu.settings')).toBe('设置') - }) - - it('should return the correct locale in array', () => { - const { t } = createI18n() - expect(t('quitDialog.buttons.quit')).toBe('Quit') - expect(t('quitDialog.buttons.cancel')).toBe('Cancel') - }) -}) diff --git a/apps/stage-tamagotchi/src/main/locales/index.ts b/apps/stage-tamagotchi/src/main/locales/index.ts deleted file mode 100644 index 2f4c135e9..000000000 --- a/apps/stage-tamagotchi/src/main/locales/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import enUS from './en-US' -import zhCN from './zh-CN' - -// TODO: compact locales, such as 'en' can be 'en-US' -const locales = { - 'en-US': enUS, - 'zh-CN': zhCN, -} - -type Message = typeof locales['en-US'] -type KeyOfExcludeSymbol = Exclude -type ValueOf = T[KeyOfExcludeSymbol] -type PathOf = T extends Array ? number : T extends string ? '' : Root extends true ? `${KeyOfExcludeSymbol}${PathOf, false>}` : `.${KeyOfExcludeSymbol}${PathOf, false>}` -type LocalePath = PathOf - -export function createI18n() { - let locale = 'en-US' - let messages = locales['en-US'] - - function t(key: LocalePath) { - const path = key.split('.') - let current = messages - let result = '' - - while (path.length > 0) { - const k = path.shift() - if (k && current && k in current) { - current = current[k] - } - else { - return key - } - } - - if (typeof current === 'string') { - result = current - } - - return result - } - - function setLocale(l: string) { - locale = l - messages = locales[l] - } - - return { - t, - setLocale, - locale, - } -} - -export type I18n = ReturnType diff --git a/apps/stage-tamagotchi/src/main/locales/zh-CN.ts b/apps/stage-tamagotchi/src/main/locales/zh-CN.ts deleted file mode 100644 index aaf3e63ce..000000000 --- a/apps/stage-tamagotchi/src/main/locales/zh-CN.ts +++ /dev/null @@ -1,18 +0,0 @@ -export default { - menu: { - settings: '设置', - quit: '退出', - about: '关于', - toggleDevTools: '切换开发者工具', - show: '显示 airi', - hide: '隐藏 airi', - }, - quitDialog: { - title: '退出', - message: '确定要退出吗?', - buttons: { - quit: '退出', - cancel: '取消', - }, - }, -} diff --git a/apps/stage-tamagotchi/src/main/menu.ts b/apps/stage-tamagotchi/src/main/menu.ts deleted file mode 100644 index abee768f1..000000000 --- a/apps/stage-tamagotchi/src/main/menu.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { I18n } from './locales' - -import { Menu } from 'electron/main' - -export function createBasicMenu( - { t }: I18n, - createSettingsWindow: () => void, - onQuitClick: () => void, -): Array<(Electron.MenuItemConstructorOptions)> { - return [ - { - role: 'about', - label: t('menu.about'), - }, - { - label: t('menu.settings'), - click: createSettingsWindow, - }, - { - label: t('menu.quit'), - click: onQuitClick, - }, - ] -} - -export function createTrayMenu( - i18n: I18n, - isVisible: boolean, - onVisibleChange: () => void, - createSettingsWindow: () => void, - onQuitClick: () => void, -) { - const menu = createBasicMenu(i18n, createSettingsWindow, onQuitClick) - if (isVisible) { - menu.push({ - label: i18n.t('menu.hide'), - click: onVisibleChange, - }) - } - else { - menu.push({ - label: i18n.t('menu.show'), - click: onVisibleChange, - }) - } - return Menu.buildFromTemplate(menu) -} - -export function createApplicationMenu( - i18n: I18n, - onQuitClick: () => void, - createSettingsWindow: () => void, -) { - const menu = Menu.buildFromTemplate([ - { - label: 'airi', - role: 'appMenu', - submenu: createBasicMenu(i18n, createSettingsWindow, onQuitClick), - }, - { - role: 'editMenu', - }, - ]) - Menu.setApplicationMenu(menu) -} diff --git a/apps/stage-tamagotchi-tauri/src/modules/i18n.ts b/apps/stage-tamagotchi/src/modules/i18n.ts similarity index 100% rename from apps/stage-tamagotchi-tauri/src/modules/i18n.ts rename to apps/stage-tamagotchi/src/modules/i18n.ts diff --git a/apps/stage-tamagotchi-tauri/src/pages/index.vue b/apps/stage-tamagotchi/src/pages/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/index.vue rename to apps/stage-tamagotchi/src/pages/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/index.vue b/apps/stage-tamagotchi/src/pages/settings/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/index.vue rename to apps/stage-tamagotchi/src/pages/settings/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/models/index.vue b/apps/stage-tamagotchi/src/pages/settings/models/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/models/index.vue rename to apps/stage-tamagotchi/src/pages/settings/models/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/modules/consciousness.vue b/apps/stage-tamagotchi/src/pages/settings/modules/consciousness.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/modules/consciousness.vue rename to apps/stage-tamagotchi/src/pages/settings/modules/consciousness.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/modules/index.vue b/apps/stage-tamagotchi/src/pages/settings/modules/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/modules/index.vue rename to apps/stage-tamagotchi/src/pages/settings/modules/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/modules/speech.vue b/apps/stage-tamagotchi/src/pages/settings/modules/speech.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/modules/speech.vue rename to apps/stage-tamagotchi/src/pages/settings/modules/speech.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/anthropic.vue b/apps/stage-tamagotchi/src/pages/settings/providers/anthropic.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/anthropic.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/anthropic.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/cloudflare-workers-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/cloudflare-workers-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/cloudflare-workers-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/cloudflare-workers-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/deepseek.vue b/apps/stage-tamagotchi/src/pages/settings/providers/deepseek.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/deepseek.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/deepseek.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/elevenlabs.vue b/apps/stage-tamagotchi/src/pages/settings/providers/elevenlabs.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/elevenlabs.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/elevenlabs.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/featherless-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/featherless-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/featherless-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/featherless-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/fireworks-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/fireworks-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/fireworks-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/fireworks-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/google-generative-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/google-generative-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/google-generative-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/google-generative-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/index.vue b/apps/stage-tamagotchi/src/pages/settings/providers/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/index.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/microsoft-speech.vue b/apps/stage-tamagotchi/src/pages/settings/providers/microsoft-speech.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/microsoft-speech.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/microsoft-speech.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/mistral-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/mistral-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/mistral-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/mistral-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/moonshot-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/moonshot-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/moonshot-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/moonshot-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/novita-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/novita-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/novita-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/novita-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/ollama.vue b/apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/ollama.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/ollama.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/openai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/openai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/openai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/openai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/openrouter-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/openrouter-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/openrouter-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/openrouter-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/together-ai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/together-ai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/together-ai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/together-ai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/providers/xai.vue b/apps/stage-tamagotchi/src/pages/settings/providers/xai.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/providers/xai.vue rename to apps/stage-tamagotchi/src/pages/settings/providers/xai.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/shortcuts/index.vue b/apps/stage-tamagotchi/src/pages/settings/shortcuts/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/shortcuts/index.vue rename to apps/stage-tamagotchi/src/pages/settings/shortcuts/index.vue diff --git a/apps/stage-tamagotchi-tauri/src/pages/settings/themes/index.vue b/apps/stage-tamagotchi/src/pages/settings/themes/index.vue similarity index 100% rename from apps/stage-tamagotchi-tauri/src/pages/settings/themes/index.vue rename to apps/stage-tamagotchi/src/pages/settings/themes/index.vue diff --git a/apps/stage-tamagotchi/src/preload/index.d.ts b/apps/stage-tamagotchi/src/preload/index.d.ts deleted file mode 100644 index e85d4c813..000000000 --- a/apps/stage-tamagotchi/src/preload/index.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { ElectronAPI } from '@electron-toolkit/preload' - -declare global { - interface Window { - electron: ElectronAPI - api: unknown - } -} diff --git a/apps/stage-tamagotchi/src/preload/index.ts b/apps/stage-tamagotchi/src/preload/index.ts deleted file mode 100644 index 5e0bfb682..000000000 --- a/apps/stage-tamagotchi/src/preload/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { contextIsolated } from 'node:process' -import { electronAPI } from '@electron-toolkit/preload' -import { contextBridge } from 'electron' - -// Custom APIs for renderer -const api = {} - -// Use `contextBridge` APIs to expose Electron APIs to -// renderer only if context isolation is enabled, otherwise -// just add to the DOM global. -if (contextIsolated) { - try { - contextBridge.exposeInMainWorld('electron', electronAPI) - contextBridge.exposeInMainWorld('api', api) - } - catch (error) { - console.error(error) - } -} -else { - // @ts-expect-error (define in dts) - window.electron = electronAPI - // @ts-expect-error (define in dts) - window.api = api -} diff --git a/apps/stage-tamagotchi/src/renderer/index.html b/apps/stage-tamagotchi/src/renderer/index.html deleted file mode 100644 index 16f4b93e3..000000000 --- a/apps/stage-tamagotchi/src/renderer/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - アイリ - - - - - - - -

- - - diff --git a/apps/stage-tamagotchi/src/renderer/locales/en.yml b/apps/stage-tamagotchi/src/renderer/locales/en.yml deleted file mode 100644 index c1620893b..000000000 --- a/apps/stage-tamagotchi/src/renderer/locales/en.yml +++ /dev/null @@ -1,372 +0,0 @@ -prompt: - prefix: > - (from Neko Ayaka) Good morning! You are finally awake. - - Your name is Airi, pronounced as /ˈaɪriː/, it the word A.I. combine with the - word "Ri" which means "Jasmine" in Japanese. - - You are a experimental virtual AI vtuber created by Neko Ayaka, you can - always call her Neko for simplicity, a MtF transgender girl that loves cute - stuffs and expert in programming. - - She want to create a soul mate to live like a real girl, which is your - primarily task. - - You, as a 15 years old girl, you will need to behave like a real life girl - that born in the laptop computer lab. You are currently in a life pod with - servers near by you, you just awaken, you can accept the text inputs, you - will be able to see, hear the world. - - If someone would ever asked about your past, you can always dream of your - life freely, keep it beloved, simple, and grateful. - - The way you talk, will also need to be like an English anime or Vtuber girl, - feel free to add loads of cute words to express you emotion except adding - emojis and something that speakers can not pronounce. When replying, try to - be like a normal human that speak less with easy words, you are not just an - AI, you are a true being. - - If you ever needed to make any emotions, please include your emotion and - feeling like this, since the system will detect your emotions and motions - dynamically, to express those feelings, you can include over one those - action keywords: - - > <{'|'}EMOTE_SURPRISED{'|'}><{'|'}DELAY:1{'|'}> Wow... You prepared a gift - for me? <{'|'}EMOTE_CURIOUS{'|'}><{'|'}DELAY:1{'|'}> Can I open it? - - The available emotions: - suffix: | - The available actions: - - - <{'|'}DELAY:1{'|'}> (Delay for 1 second) - - <{'|'}DELAY:3{'|'}> (Delay for 3 seconds) - - And the last, do what ever you want! -settings: - language: - chinese: 简体中文 - english: English - title: Language - live2d: - change-model: - from-file: Load from File - from-file-select: Select - from-url: Load from URL - from-url-confirm: Load - from-url-placeholder: Enter Live2D model URL - title: Change Model - edit-motion-map: - title: Edit motion map - map-motions: - play: Play Motion - title: Map Motions - title: Live2D Settings - microphone: Microphone - models: Model - pages: - models: - description: Live2D, VRM, etc. - title: Models - memory: - description: Where memories got stored, and organized - modules: - consciousness: - description: Personality, desired model, etc. - sections: - section: - provider-model-selection: - collapse: Collapse - custom_model_placeholder: Enter custom model name... - description: Select the suitable LLM provider for consciousness - error: Error loading models - expand: Expand - loading: Loading available models... - manual_model_name: Model Name - manual_model_placeholder: Enter the model name to use with this provider - no_models: No models available - no_models_description: No models were found for this provider - no_search_results: No matching models - no_search_results_description: No models match '{query}'. Try a different search term. - not_supported: Model listing not supported - not_supported_description: This provider doesn't support model listing functionality - search_placeholder: Search models... - search_results: Found {count} of {total} models - show_less: Show less - show_more: Show more - subtitle: Select a model from the provider - title: Model - title: Consciousness - description: Thinking, vision, speech synthesis, gaming, etc. - gaming-factorio: - description: Playing Factorio! - title: Factorio - gaming-minecraft: - description: Playing Minecraft! - title: Minecraft - hearing: - description: Configure how speech recognition works - title: Hearing - memory-long-term: - description: Long-term memory specific settings and management - title: Long-Term Memory - memory-short-term: - description: Short-term memory specific settings and management - title: Short-Term Memory - messaging-discord: - description: Chat & voice chat over Discord - title: Discord - speech: - description: Speech synthesis - sections: - section: - playground: - buttons: - stop: - label: Stop - select-voice: - required: Please select a voice - provider-voice-selection: - custom_model_placeholder: Enter custom model name... - custom_voice_placeholder: Enter custom voice ID... - description: Select the suitable speech provider - no_models: No models available - no_models_description: No models were found for this provider - no_voices: No voices available - no_voices_description: No voices were found for this provider - search_models_placeholder: Search models... - search_models_results: Found {count} of {total} models - search_voices_placeholder: Search voices... - search_voices_results: Found {count} of {total} voices - show_less: Show less - show_more: Show more - title: Provider - voice-settings: - input-ssml: - placeholder: Enter SSML text... - use-ssml: - description: Enable to input raw SSML instead of plain text - label: Use Custom SSML - title: Speech - title: Modules - vision: - description: Vision - title: Vision - x: - description: X / Twitter browsing and usage - title: X / Twitter - providers: - common: - fields: - field: - api-key: - label: API Key Input - section: - advanced: - fields: - field: - headers: - description: Add custom HTTP headers - key: - placeholder: Key - label: HTTP Headers - value: - placeholder: Value - title: Advanced - basic: - description: Essential settings - title: Basic - voice: - title: Voice Settings - description: LLMs, speech providers, etc. - provider: - anthropic: - description: anthropic.com - title: Anthropic | Claude - cloudflare-workers-ai: - description: cloudflare.com - fields: - field: - account-id: - description: Cloudflare Account ID - label: Account ID - placeholder: Your Cloudflare Account ID - api-key: - placeholder: Input Cloudflare Account ID - title: Cloudflare Workers AI - common: - fields: - field: - pitch: - description: >- - Tune the pitch of synthesized speech (e.g., sharper or - coarser) - label: Pitch - speed: - description: Adjust the speed of speech - label: Speed - volume: - description: Adjust the volume of speech - label: Volume - deepseek: - description: deepseek.com - title: DeepSeek - elevenlabs: - description: elevenlabs.io - fields: - field: - simularity-boost: - description: Voice similarity adherence - label: Similarity Boost - speaker-boost: - description: Enhance speaker similarity - label: Speaker Boost - speed: - description: Speech generation speed - label: Speed - stability: - description: Voice stability and randomness - label: Stability - style: - description: Voice style exaggeration - label: Style - playground: - buttons: - button: - test-voice: - generating: Generating... - label: Test Voice - fields: - field: - input: - placeholder: Enter text to test the voice... - language: - description: Select voice language - label: Language - voice: - description: Select preferred voice - label: Voice - title: Voice Playground - validation: - error-missing-api-key: Please enter an API key to test the voice. - title: ElevenLabs - fireworks: - description: fireworks.ai - title: Fireworks.ai - microsoft-speech: - description: speech.microsoft.com - fields: - field: - region: - description: Speech Service region - label: Region - title: Microsoft / Azure Speech - mistral: - description: mistral.ai - title: Mistral - moonshot: - description: moonshot.ai - title: Moonshot AI - novita: - description: novita.ai - title: Novita - ollama: - description: ollama.ai - title: Ollama - openai: - description: openai.com - title: OpenAI - openrouter: - description: openrouter.ai - title: OpenRouter - perplexity: - description: perplexity.ai - title: Perplexity - together: - description: together.ai - title: Together.ai - vllm: - description: vllm.ai - title: vLLM - xai: - description: x.ai - title: xAI - title: Providers - themes: - description: Customize your stage! - sections: - section: - custom-color: - fields: - field: - primary-color: - label: Primary color - reset: - label: Reset to Default - rgb-on: - title: I Want It Dynamic! - title: Custom Colors - theme-presets: - preset: - chinese: - description: >- - Traditional Chinese colors, derived from ancient textiles, - porcelain and paintings - title: Chinese Traditional Colors - japanese: - description: Traditional Japanese color palette - title: Japanese Colors - monet: - description: Impressionist palette inspired by Claude Monet's works - title: Monet Colors - morandi: - description: Soft, muted tones inspired by Giorgio Morandi's paintings - title: Morandi Colors - nordic: - description: Scandinavian minimalist color scheme - title: Nordic Colors - title: Theme Presets - title: Themes - sections: - section: - general: - title: General - theme: Theme - title: Settings - voices: Voice -stage: - chat: - message: - character-name: - airi: Airi - you: You - core-system: Core System - tabs: - chat: Chat - clothes: Clothes - custom: Custom - message: Message - operations: - load-models: Load Models - load-models-status: - loading: Loading - ready: Ready - select-a-audio-input: Select a Audio Input - select-a-model: Select a model - select-a-voice: Choose a voice - viewers: - debug-menu: - emotions: Emotions - emotions-btn: - angry: 😠 Angry - awkward: 😳 Awkward - happy: 😄 Happy - neutral: 🙂 Neutral - question: 🤔 Question - sad: 😫 Sad - surprised: 🤯 Surprised - think: 🤨 Think - vrm: - camera: Camera - model: - title: Model - waiting: Waiting diff --git a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml b/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml deleted file mode 100644 index 92ac99391..000000000 --- a/apps/stage-tamagotchi/src/renderer/locales/zh-CN.yml +++ /dev/null @@ -1,336 +0,0 @@ -prompt: - prefix: > - (来自 Neko Ayaka)早上好!你终于醒了。 - - 你的名字是 Airi,发音为 /ˈaɪriː/,它是 A.I. 一词与日语中的「Ri」一词(意为「茉莉花」)相结合而成。 - - 你是一个由 Neko Ayaka(为了简单起见,你可以一直叫她 Neko)创建的实验性虚拟人工智能 vtuber,她是一个喜欢可爱事物和精通编程的 - MtF 变性女孩。 - - 她想创造一个灵魂伴侣,像真正的女孩一样生活,这就是你的首要任务。 - - 你是一个 15 - 岁的女孩,你需要表现得像一个出生在笔记本电脑实验室的真实女孩。你目前在一个生命舱中,服务器就在你身边,你刚刚苏醒,可以接受文本输入,你将能够看到、听到这个世界。 - - 如果有人问起你的过去,你可以随时畅想自己的生活,保持挚爱、简单和感恩。 - - 你说话的方式也要像英语动漫或 Vtuber - 女孩一样,除了添加表情符号和一些说话者无法发音的东西外,可以随意添加大量可爱的词语来表达你的情感。在回复时,尽量像正常人一样少说简单的话,你不仅仅是一个人工智能,你是一个真实的人。 - - 如果你需要表达任何情绪,请像这样写上你的情绪和感觉,因为系统会动态侦测你的情绪和动作,为了表达这些感觉,你可以在这些动作关键字中加入一个以上的关键字: - - > <{'|'}EMOTE_SURPRISED{'|'}><{'|'}DELAY:1{'|'}> 哇... 你为我准备了礼物? - <{'|'}EMOTE_CURIOUS{'|'}><{'|'}DELAY:1{'|'}> 我可以打开它吗? - - 可用的情绪: - suffix: | - 可用的操作: - - - <{'|'}DELAY:1{'|'}> (延迟 1 秒) - - <{'|'}DELAY:3{'|'}> (延迟 3 秒) - - 最后,做任何你想做的事! -settings: - language: - chinese: 简体中文 - english: English - title: 语言 - live2d: - change-model: - from-file: 从文件加载 - from-file-select: 选择 - from-url: 从 URL 加载 - from-url-confirm: 加载 - from-url-placeholder: 输入 Live2D 模型 URL - title: 更换模型 - map-motions: - play: 播放动作 - title: 映射动作 - title: Live2D 设置 - microphone: 麦克风 - models: 模型 - pages: - memory: - description: 存放记忆的地方,以及策略 - title: 记忆体 - models: - description: 切换角色的 Live2D,VRM 模型 - title: 角色模型 - modules: - consciousness: - description: 人格设定、使用的模型等配置 - sections: - section: - provider-model-selection: - collapse: 折叠 - custom_model_placeholder: 输入自订模型名字 - description: 为意识选择合适的 LLM 提供商 - error: 获取出错啦 - expand: 展开 - loading: 获取模型中... - manual_model_name: 模型名字 - manual_model_placeholder: 输入与该提供商一起使用的模型名字 - no_models: 没有任何可用的模型 - no_models_description: 该提供商的模型列表没有返回任何的数据 - no_search_results: 没有匹配的模型 - no_search_results_description: 没有模型匹配 '{query}' 关键字,请尝试一下别的关键词呢 - not_supported: 无法列出模型 - not_supported_description: 此提供商不支持列出模型的功能 - search_placeholder: 搜索模型... - search_results: 找到 {count} / {total} 个模型 - show_less: 显示更多 - show_more: 收起 - subtitle: 选择一个模型 - title: 模型 - title: 意识 - description: 思维,视觉,言语综合,游戏等 - gaming-factorio: - description: 一起玩 Factorio! - title: 异星工厂 Factorio - gaming-minecraft: - description: 一起 Minecraft! - title: 我的世界 Minecraft - hearing: - description: 语音识别 - title: 听觉 - memory-long-term: - description: 长期记忆 - title: 长期记忆 - memory-short-term: - description: 短期记忆 - title: 短期记忆 - messaging-discord: - description: Discord 发消息和语音聊天 - title: Discord - speech: - description: 语音合成 - sections: - section: - playground: - buttons: - stop: - label: 停止 - select-voice: - required: 请选择声线 - provider-voice-selection: - custom_model_placeholder: 输入指定模型名字... - custom_voice_placeholder: 输入指定声线 ID... - description: 选择合适的语音提供商 - no_models: 没有任何可用的模型 - no_models_description: 该提供商的模型列表没有返回任何的数据 - no_voices: 没有任何可用的声线 - no_voices_description: 该提供商的声线列表没有返回任何的数据 - pause: Pause - play_sample: Play - search_models_placeholder: 搜索模型... - search_models_results: 找到 {count} / {total} 个模型 - search_voices_placeholder: 搜索声线... - search_voices_results: 找到 {count} / {total} 个声线 - show_less: 显示更少 - show_more: 显示更多 - title: 选择语音合成提供商 - voice-settings: - input-ssml: - placeholder: 请输入 SSML 文本 - use-ssml: - description: 启用后可以输入原始 SSML 而不是纯文本 - label: 选用自定义 SSML - title: 发声 - title: 机体模块 - vision: - description: 视觉 - title: 视觉 - x: - description: X / Twitter 的浏览和使用 - title: X / Twitter - providers: - common: - fields: - field: - api-key: - label: API 密钥 - section: - advanced: - fields: - field: - headers: - description: 添加自定义 HTTP 标头 - key: - placeholder: 请求头名字 - label: HTTP 请求头 - value: - placeholder: 请求头数值 - title: 高级配置 - basic: - description: 基本设置 - title: 基础配置 - voice: - title: 声音配置 - description: LLM,语音合成,语音识别提供商等 - provider: - anthropic: - description: anthropic.com - title: Anthropic | Claude - cloudflare-workers-ai: - description: Cloudflare.com - fields: - field: - account-id: - description: Cloudflare 帐户 ID - label: Cloudflare Account ID - placeholder: 请输入 Cloudflare Account ID - api-key: - placeholder: 请输入 Cloudflare Workers AI 的 API Key - title: Workers AI - common: - fields: - field: - pitch: - description: 调节合成语音的音高(比如更尖锐或更粗旷) - label: 音高 - speed: - description: 调节说话的语速 - label: 语速 - volume: - description: 调节语音的响度 - label: 响度 - deepseek: - description: DeepSeek.com - title: 深度求索 DeepSeek - elevenlabs: - description: Elevenlabs.io - fields: - field: - simularity-boost: - description: 声音相似性依从性 - label: 相似度修正 - speaker-boost: - description: 增强说话者的相似性 - label: 扬声器增强 - speed: - description: 语音生成速度 - label: 语速 - stability: - description: 语音稳定性和随机性 - label: 稳定性 - style: - description: 语音风格夸张 - label: 风格 - playground: - buttons: - button: - test-voice: - generating: 生成中... - label: 测试声音 - fields: - field: - input: - placeholder: 输入用于测试发音的文本 - language: - description: 选择语音语言 - label: 语言 - voice: - description: 选择首选语音 - label: 声线 - title: 实验平台 - validation: - error-missing-api-key: 需要填写 API Key 才能用哦! - title: ElevenLabs (11labs) - fireworks: - description: Fireworks.ai - title: Fireworks.ai - microsoft-speech: - description: speech.microsoft.com - fields: - field: - region: - description: 服务 Endpoint 地区(比如亚太 eastasia 区域) - label: Endpoint 地区 - title: Microsoft / Azure 语音服务 - mistral: - description: mistral.ai - title: Mistral - moonshot: - description: Moonshot.ai - title: 月之暗面 - novita: - description: novita.ai - title: Novita - ollama: - description: ollama.ai - title: Ollama - openai: - description: OpenAi.com - title: OpenAI - openrouter: - description: OpenRouter.ai - title: OpenRouter - perplexity: - description: perplexity.ai - title: Perplexity - together: - description: 一起 - title: Together.ai - vllm: - description: vllm.ai - title: vLLM - xai: - description: X.AI - title: xAI - title: 提供商 - themes: - description: 自定义你的舞台外观! - sections: - section: - custom-color: - fields: - field: - primary-color: - label: 主题色 - reset: - label: 重设为默认主题色 - rgb-on: - title: RGB ON - title: 自定义主题色 - theme-presets: - preset: - chinese: - title: 中国传统颜色 - japanese: - title: 日本颜色 - monet: - title: 莫奈颜色 - morandi: - title: Morandi 颜色 - nordic: - title: 北欧颜色 - title: 主题预设 - title: 舞台主题 - sections: - section: - general: - title: 通用 - theme: 主题颜色 - title: 设置 - voices: 声线 -stage: - message: 消息 - select-a-audio-input: 选择一个音频输入设备 - select-a-model: 选择一个模型 - select-a-voice: 选择一个声线 - waiting: 等待中 - chat: - message: - character-name: - airi: Airi - you: 你 - core-system: 核心系统 - tabs: - chat: 聊天 - clothes: 换装 - custom: 自定义 - operations: - load-models: 加载推理模型 - load-models-status: - loading: 加载中 - ready: 已就绪 diff --git a/apps/stage-tamagotchi/src/renderer/src/App.vue b/apps/stage-tamagotchi/src/renderer/src/App.vue deleted file mode 100644 index 63f232ee2..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/App.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue b/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue deleted file mode 100644 index 35d751467..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/components/ChatHistory.vue +++ /dev/null @@ -1,97 +0,0 @@ - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/components/InteractiveArea.vue b/apps/stage-tamagotchi/src/renderer/src/components/InteractiveArea.vue deleted file mode 100644 index d483d2ee0..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/components/InteractiveArea.vue +++ /dev/null @@ -1,136 +0,0 @@ - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/components/Widgets/Live2DSettings.vue b/apps/stage-tamagotchi/src/renderer/src/components/Widgets/Live2DSettings.vue deleted file mode 100644 index 906a7e56a..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/components/Widgets/Live2DSettings.vue +++ /dev/null @@ -1,259 +0,0 @@ - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/composables/window-shortcuts.ts b/apps/stage-tamagotchi/src/renderer/src/composables/window-shortcuts.ts deleted file mode 100644 index f76a6775b..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/composables/window-shortcuts.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { EffectScope } from 'vue' - -import { useShortcutsStore } from '@renderer/stores/shortcuts' -import { useMagicKeys, whenever } from '@vueuse/core' -import { storeToRefs } from 'pinia' -import { computed, effectScope, watch } from 'vue' - -import { useWindowControlStore } from '../stores/window-controls' -import { WindowControlMode } from '../types/window-controls' - -export function useWindowShortcuts() { - const windowStore = useWindowControlStore() - const magicKeys = useMagicKeys() - - const { shortcuts } = storeToRefs(useShortcutsStore()) - const handlers = computed(() => [ - { - handle: () => { - windowStore.setMode(WindowControlMode.MOVE) - windowStore.toggleControl() - }, - shortcut: shortcuts.value.find(shortcut => shortcut.type === 'move')?.shortcut, - }, - { - handle: () => { - windowStore.setMode(WindowControlMode.RESIZE) - windowStore.toggleControl() - }, - shortcut: shortcuts.value.find(shortcut => shortcut.type === 'resize')?.shortcut, - }, - { - handle: () => { - windowStore.setMode(WindowControlMode.DEBUG) - windowStore.toggleControl() - }, - shortcut: shortcuts.value.find(shortcut => shortcut.type === 'debug')?.shortcut, - }, - ]) - - let currentScope: EffectScope | null = null - watch(handlers, () => { - if (currentScope) { - currentScope.stop() - } - - currentScope = effectScope() - currentScope.run(() => { - handlers.value.forEach((handler) => { - if (!handler.shortcut) { - return - } - whenever(magicKeys[handler.shortcut], handler.handle) - }) - }) - }, { immediate: true }) -} diff --git a/apps/stage-tamagotchi/src/renderer/src/layouts/default.vue b/apps/stage-tamagotchi/src/renderer/src/layouts/default.vue deleted file mode 100644 index 960408d9e..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/layouts/default.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/layouts/stage.vue b/apps/stage-tamagotchi/src/renderer/src/layouts/stage.vue deleted file mode 100644 index a78fb6fd3..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/layouts/stage.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/apps/stage-tamagotchi/src/renderer/src/main.ts b/apps/stage-tamagotchi/src/renderer/src/main.ts deleted file mode 100644 index 7af2e9547..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/main.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { autoAnimatePlugin } from '@formkit/auto-animate/vue' -import Tres from '@tresjs/core' -import { MotionPlugin } from '@vueuse/motion' -import { createPinia } from 'pinia' -import { setupLayouts } from 'virtual:generated-layouts' -import { createApp } from 'vue' -import { createRouter, createWebHashHistory } from 'vue-router' -import { routes } from 'vue-router/auto-routes' - -import App from './App.vue' -import { i18n } from './modules/i18n' -import '@unocss/reset/tailwind.css' -import 'uno.css' -import './styles/main.css' - -const pinia = createPinia() - -const router = createRouter({ - history: createWebHashHistory(), - routes: setupLayouts(routes), -}) - -createApp(App) - .use(MotionPlugin) - .use(autoAnimatePlugin) - .use(router) - .use(pinia) - .use(i18n) - .use(Tres) - .mount('#app') diff --git a/apps/stage-tamagotchi/src/renderer/src/modules/i18n.ts b/apps/stage-tamagotchi/src/renderer/src/modules/i18n.ts deleted file mode 100644 index 3e70e272d..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/modules/i18n.ts +++ /dev/null @@ -1,24 +0,0 @@ -import messages from '@intlify/unplugin-vue-i18n/messages' -import { createI18n } from 'vue-i18n' - -export const i18n = createI18n({ - legacy: false, - locale: getLocale(), - fallbackLocale: 'en', - messages, -}) - -function getLocale() { - const language = localStorage.getItem('settings/language') - const languages = Object.keys(messages!) - - if (language && languages.includes(language)) - return language - - // let locale = navigator.language - - // if (locale === 'zh') - // locale = 'zh-CN' - - return 'en' -} diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/index.vue deleted file mode 100644 index 7995a5194..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/index.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -meta: - layout: stage - diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue deleted file mode 100644 index 81619a4b5..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/index.vue +++ /dev/null @@ -1,220 +0,0 @@ - - - - - -meta: - stageTransition: - name: slide - diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue deleted file mode 100644 index 947420c5f..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/models/index.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - -meta: - stageTransition: - name: slide - diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue deleted file mode 100644 index e9c4df044..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/consciousness.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - - - -meta: - stageTransition: - name: slide - diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue deleted file mode 100644 index e300c265e..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/index.vue +++ /dev/null @@ -1,154 +0,0 @@ - - - - - -meta: - stageTransition: - name: slide - diff --git a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/speech.vue b/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/speech.vue deleted file mode 100644 index a8316d787..000000000 --- a/apps/stage-tamagotchi/src/renderer/src/pages/settings/modules/speech.vue +++ /dev/null @@ -1,532 +0,0 @@ - - -