Composition API migration
## Description Migrate components from Options API to Composition API (`<script setup>`). The codebase is on Vue 3 with `@vue/compat`; once the compat shim is removed (#730), this is the natural next step toward idiomatic Vue 3. ## Background The bulk of the codebase uses Options API patterns: `mapGetters`/`mapState`/`mapMutations`/`mapActions`, `data()`, `computed`, `methods`, `mounted` etc. These work fine but Composition API offers better TypeScript integration, easier logic reuse via composables, and clearer dependency relationships. ## Approach - Migrate incrementally — one component or domain at a time - Prefer `<script setup>` syntax - Extract repeated logic into composables under `src/composables/` - Keep Vuex 4 store access via `useStore()` during migration; evaluate Pinia as a separate initiative - Each migrated component must have its existing tests passing (update test style where needed) ## Suggested order 1. Leaf components first (no children, minimal store deps) 2. Shared UI components (`src/core/components/`) 3. Domain stores and their primary consumers 4. Complex orchestrators (e.g. Scene.vue — see also #scene-decomp) ## Acceptance Criteria - All migrated components use `<script setup>` - No regressions in existing test suite - No Vue compat warnings introduced ## Related - Blocked by: #730 (@vue/compat removal) - See also: #15 (superseded TypeScript migration — TypeScript coverage is tracked separately)
issue