Files
portal/app/resources/js/components/AppShell.vue
T
Дмитрий 952373fce5 phase2(trigger): Vue 3 + Vuetify 3 + ESLint+Prettier+Vue + vue-tsc + Vitest
Триггер фазы 2 выполнен — первый коммит в app/resources/js/. Активирует
5 из 6 инструментов фазы 2 (CLAUDE.md §3.3) — без Histoire (отдельно).

Tailwind удалён (правило CLAUDE.md §5 п.2).

Стек:
  - vue@3.5, vuetify@3.12, @vitejs/plugin-vue@6 (для Vite 8 совместимости —
    @vitejs/plugin-vue@5 поддерживает только Vite 5/6), vite-plugin-vuetify@2
    (auto-import), sass-embedded
  - eslint@10 (flat-config), eslint-plugin-vue@10,
    @vue/eslint-config-typescript@14, eslint-config-prettier, prettier@3.8
  - typescript@6, vue-tsc@3.2
  - vitest@4.1, @vue/test-utils, jsdom, @vitest/coverage-v8

Конфиги:
  - app/vite.config.js — vue + vuetify auto-import
  - app/vitest.config.ts — jsdom + setup file для ResizeObserver/
    IntersectionObserver/matchMedia/CSS.supports stubs (без них Vuetify
    падает в JSDOM)
  - app/eslint.config.js — flat-config
  - app/.prettierrc.json, app/tsconfig.json

Frontend-структура:
  - resources/js/app.ts — точка входа
  - resources/js/plugins/vuetify.ts — палитра Forest (Teal/ivory/теало-нуар
    из BRANDBOOK_v2 §3)
  - resources/js/components/AppShell.vue — первый компонент: v-app +
    v-app-bar + v-card
  - resources/css/app.css — Inter (UI, opsz axis), JetBrains Mono
    (.numeric, tnum)
  - resources/views/welcome.blade.php — упрощён под Vue mount

Smoke-тесты Vitest 3/3 за 2.8 сек:
  - монтируется без ошибок
  - содержит «Лидерра.»
  - рендерит chip с фазой 2

Build: 158 модулей за 386 ms (184 KB JS / 295 KB CSS gzipped).

npm-scripts: lint:vue, format, format:check, type-check, test:vue.
lefthook job #8 (ESLint на staged .ts/.vue) добавлен в pre-commit.
Полный type-check (vue-tsc) и Vitest — отдельно вручную (медленно для
pre-commit: ~3 сек на каждый).

CLAUDE.md v1.16 → v1.17 (фаза 1 → фаза 2 в §6).
Реестр Открытые_вопросы v1.25 → v1.26.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 16:07:14 +03:00

44 lines
1.7 KiB
Vue

<script setup lang="ts">
/**
* Корневая Vuetify-обёртка приложения.
*
* Пока минимальный layout (app-bar + main + footer-placeholder) — реальные
* экраны будут отдельными components/views, мапящимися в Vue Router
* по SPA-маршрутам. На MVP-старт фазы 2 — smoke-test того, что Vue +
* Vuetify собираются и палитра Forest применяется.
*
* Источник дизайна: liderra_v8_handoff/concepts/v8_dashboard.html.
*/
import { ref } from 'vue';
const product = ref('Лидерра.');
</script>
<template>
<v-app>
<v-app-bar color="secondary" :elevation="0">
<v-app-bar-title class="text-h6">
{{ product }}
</v-app-bar-title>
<template #append>
<v-chip color="primary" size="small" variant="elevated">phase 2</v-chip>
</template>
</v-app-bar>
<v-main>
<v-container>
<v-card class="pa-6" :max-width="640">
<h1 class="text-h4 mb-2">Vue 3 + Vuetify 3 фаза 2 запущена</h1>
<p class="mb-4">
Триггер фазы 2 по
<code>CLAUDE.md §6</code> первый коммит в <code>resources/js/</code>. Активирует tooling:
Volar, vue-tsc, ESLint+Prettier+Vue, Vitest, Histoire.
</p>
<v-btn color="primary">primary</v-btn>
<v-btn class="ms-2" color="secondary">secondary</v-btn>
</v-card>
</v-container>
</v-main>
</v-app>
</template>