290e7dbc34
- ActivityChart: native SVG line chart (без chart-library, чтобы не +400KB зависимость для статичных дашборд-графиков). Y-grid 5 линий, area-gradient, 7 точек (предпоследняя выделена primary teal как «сегодня»), 3 tabs (Принято/Оплачено/Отказ). - FunnelChart: segmented bar по 14 статусам + funnel-list (sort desc). - composables/leadStatuses.ts: snapshot 14 статусов из db/schema.sql:2130 (НЕ из BRANDBOOK §3.6 - расхождение #1 handoff vs ТЗ из реестра v1.13). 14 правильных slug'ов: new/viewed/worked/base/missed/negotiations/ waiting_payment/partnership/paid/closed/test_drive/hot/replacement/final_missed. - DashboardView интегрирует оба чарта в charts-row (md=7+5). - cspell-words.txt: ldot, композаблом, инлайнингом, инлайнены. Vue compiler quirk: withDefaults factory не разрешает референсить module-level const'ы (checkInvalidScopeReference). Обходим инлайнингом литерала. Vitest +13 тестов (всего 48/48 за 5.5s): - ActivityChart 6 (3 tabs + 7 circles + 'сегодня' + custom points + legend) - FunnelChart 7 (14 segments + 14 list-items + assertion на отсутствие 'Думает'/'Спам' из handoff + сортировка + colorHex + total) Stories +2 с 3 variants каждый (Histoire 10/14 за 30.43s). Регресс: lint+type-check+format OK; vitest 48/48; vite build (DashboardView chunk 14.9->21.17 KB с чартами); story:build 10/14 за 30.43s; Pest 48/48 за 5.10s. CLAUDE.md v1.21->v1.22, реестр Открытых_вопросов v1.30->v1.31. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
46 lines
1.2 KiB
Vue
46 lines
1.2 KiB
Vue
<script setup lang="ts">
|
|
import ActivityChart from './ActivityChart.vue';
|
|
</script>
|
|
|
|
<template>
|
|
<Story title="Charts / ActivityChart" :layout="{ type: 'single', iframe: true }">
|
|
<Variant title="default (mock 7 точек)">
|
|
<v-app>
|
|
<v-main class="story-pane">
|
|
<v-container>
|
|
<ActivityChart />
|
|
</v-container>
|
|
</v-main>
|
|
</v-app>
|
|
</Variant>
|
|
|
|
<Variant title="ровный рост">
|
|
<v-app>
|
|
<v-main class="story-pane">
|
|
<v-container>
|
|
<ActivityChart :points="[10, 20, 30, 40, 50, 55, 60]" :max="60" />
|
|
</v-container>
|
|
</v-main>
|
|
</v-app>
|
|
</Variant>
|
|
|
|
<Variant title="спад">
|
|
<v-app>
|
|
<v-main class="story-pane">
|
|
<v-container>
|
|
<ActivityChart :points="[55, 45, 38, 30, 20, 12, 8]" :max="60" />
|
|
</v-container>
|
|
</v-main>
|
|
</v-app>
|
|
</Variant>
|
|
</Story>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.story-pane {
|
|
background: #f6f3ec;
|
|
min-height: 100vh;
|
|
padding: 24px;
|
|
}
|
|
</style>
|