v1.4 — iOS-style dashboard (grid + live edit)
v1.4 — Дашборд как iOS Springboard
Полная переделка кастомизации виджетов: размер S/M/L + drag-reorder прямо на самом дашборде, без перехода на отдельную страницу.
📐 Grid система
- CSS Grid с auto-flow: dense — 4 кол. на lg, 2 на md, 1 на sm
- 3 размера виджетов: S (1 кол.), M (2 кол.), L (4 кол. / full width)
- DEFAULT_SIZES per widget — kpi_tiles/recent_activity/documents_expiring = L по умолчанию, остальные M
- Маленькие виджеты заполняют дыры после больших (grid-auto-flow: dense)
✎ Live edit-mode
- Кнопка "Изменить" в шапке → виджеты получают синий пульсирующий inset-outline
- Floating size-segment (S/M/L) в правом-верхнем углу — клик меняет класс мгновенно, грид reflow'ит без сети
- Eye-toggle (●/○) — fade-out скрытых с пунктирным border'ом
- Drag-to-reorder на самом дашборде: курсор подсвечивает drop-target толстой синей рамкой, отпускание встаёт на новое место
- Sticky edit-bar внизу с Cancel / Save + spring-анимация
- Esc — отмена с восстановлением snapshot
🐛 Bug fixes
- `_my_kpi.html.erb`: `a.target_value` → `a.target` (колонки `target_value` не существует в `kpi_assignments`)
- Drag-reorder перевёл с live-insertBefore (дёргался) на drop-only insertBefore (стабильно)
- Убраны pulse/wiggle/transition animations в edit-mode которые ломали Chrome'овский drag state-machine
🌍 i18n
- +10 ключей в ru/en/de — паритет 2247/2247/2247
Submodule design-system
- `.dashboard-grid` + `.dashboard-widget--{s,m,l}`
- `.size-segment` (segmented pill control)
- `.dashboard-widget__edit-overlay` + `.dashboard-edit-bar`
- `.toast-apple` (минималистичный bottom-toast)