c8131a39c8
- vuedraggable@^4.1.0 + sortablejs@1.14.0 (--legacy-peer-deps). - KanbanColumn: <draggable v-model="localDeals" group="kanban-deals" item-key="id" ghost-class="ghost-card" drag-class="drag-card" animation="150"> + #footer empty-state «пусто · перетащите сюда». - DraggableChangeEvent типизирован (added/removed/moved discriminated union). - KanbanView: const → reactive<Record<slug, MockDeal[]>> (vuedraggable v-model требует независимые arrays); shallow-clone {...d} чтобы не мутировать MOCK_DEALS. - onColumnChange: при event.added → element.statusSlug = targetSlug. TODO: POST /api/deals/{id}/transition с проверкой allowed-переходов. - cspell-words.txt: vuedraggable, симулируется. Visual: ghost-card opacity 0.4 + ivory-tint bg, drag-card rotate 1deg. Vitest +1 (всего 71/71 за 7.48s): эмулирует $emit('change', {added}) → проверяет statusSlug update. Полный mouse-DnD не симулируется — JSDOM не умеет drag-events, но event-handler логика покрыта. Регресс: lint+type+format OK; vitest 71/71; vite build (KanbanView lazy-chunk вырос до 180.53KB - SortableJS-обёртка, грузится только на /kanban); story:build 14/20 за 30.45s; Pest 48/48 за 4.88s. CLAUDE.md v1.24->v1.25, реестр Открытых_вопросов v1.33->v1.34. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
44 lines
1.5 KiB
JSON
44 lines
1.5 KiB
JSON
{
|
|
"$schema": "https://www.schemastore.org/package.json",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"build": "vite build",
|
|
"dev": "vite",
|
|
"lint:vue": "eslint \"resources/js/**/*.{ts,vue}\" \"tests/Frontend/**/*.ts\"",
|
|
"format": "prettier --write \"resources/js/**/*.{ts,vue,css}\" \"tests/Frontend/**/*.ts\"",
|
|
"format:check": "prettier --check \"resources/js/**/*.{ts,vue,css}\" \"tests/Frontend/**/*.ts\"",
|
|
"type-check": "vue-tsc --noEmit",
|
|
"test:vue": "vitest run",
|
|
"story": "histoire dev",
|
|
"story:build": "histoire build",
|
|
"story:preview": "histoire preview"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@histoire/plugin-vue": "^1.0.0-beta.1",
|
|
"@vitejs/plugin-vue": "^6.0.6",
|
|
"@vitest/coverage-v8": "^4.1.5",
|
|
"@vue/eslint-config-typescript": "^14.7.0",
|
|
"@vue/test-utils": "^2.4.10",
|
|
"concurrently": "^9.0.1",
|
|
"eslint": "^10.3.0",
|
|
"eslint-config-prettier": "^10.1.8",
|
|
"eslint-plugin-vue": "^10.9.1",
|
|
"histoire": "^1.0.0-beta.1",
|
|
"jsdom": "^29.1.1",
|
|
"laravel-vite-plugin": "^3.1",
|
|
"prettier": "^3.8.3",
|
|
"sass-embedded": "^1.99.0",
|
|
"typescript": "^6.0.3",
|
|
"vite": "^8.0.0",
|
|
"vite-plugin-vuetify": "^2.1.3",
|
|
"vitest": "^4.1.5",
|
|
"vue": "^3.5.34",
|
|
"vue-router": "^4.6.4",
|
|
"vue-tsc": "^3.2.8",
|
|
"vuedraggable": "^4.1.0",
|
|
"vuetify": "^3.12.5"
|
|
}
|
|
}
|