62 lines
4.1 KiB
Markdown
62 lines
4.1 KiB
Markdown
---
|
||
quick_id: 260929-dmx
|
||
type: quick
|
||
wave: 1
|
||
autonomous: true
|
||
---
|
||
|
||
# Quick 260929-dmx: Widget-Raster horizontal feiner (48 Spalten), Kalender schmaler
|
||
|
||
## User requests (29.09.2026)
|
||
|
||
1. "das kalender widget soll in der breite schmäler gemacht werden können."
|
||
2. "und mache das widget raster horizontal etwas feiner."
|
||
|
||
## Measurements (orchestrator, browser, lg breakpoint, grid width 1593 px, margin 12)
|
||
|
||
- Today: 24 cols → one width unit ≈ 66 px. Calendar minW 6 ≈ 383 px, default 8 ≈ 515 px.
|
||
- Calendar rendered at 251 px: fully usable (month grid, header "September 2026", event list truncates titles cleanly).
|
||
- Calendar at 185 px: header clipped, event titles reduced to one letter → too narrow.
|
||
- Target: calendar minimum ≈ 250 px.
|
||
|
||
## Decision (locked)
|
||
|
||
Double the HORIZONTAL resolution only: `COLS = { lg: 48, md: 40, sm: 24, xs: 16, xxs: 4 }` in
|
||
`apps/web/src/components/dashboard/dashboard-grid.tsx`. Row height (20) and margin (12) unchanged.
|
||
Every existing widget keeps its exact on-screen size and position.
|
||
|
||
## Task 1: Grid version 3 (horizontal x2) with migration
|
||
|
||
- files: apps/web/src/lib/grid-layout-migration.ts (+ test), apps/web/src/components/dashboard/dashboard-grid.tsx (+ test), apps/web/src/lib/stores/dashboard-store.ts (only if needed)
|
||
- action:
|
||
- Bump `GRID_VERSION` to 3. Migration becomes stepwise and cumulative:
|
||
v1 → v2: existing behavior (x,y,w,h,minW,minH,maxW,maxH × 2).
|
||
v2 → v3: NEW, horizontal only: x, w, minW, maxW × 2 (y, h, minH, maxH unchanged).
|
||
So a v1 layout gets both steps, a v2 layout only the second, a v3 layout nothing. Keep idempotence and marker semantics (marker only in persisted JSON). Update the file header comment (German, same style) to document v3.
|
||
- `COLS` as above. Check every other place that depends on column count or widget width units:
|
||
centering offset, `RESIZE_AXIS_FALLBACK`, `breakpointFor`, default positions when adding a widget
|
||
(`dashboard-grid.tsx` ~380: `defaultW ?? 4`, `minW ?? 4` fallbacks → 8), empty-dashboard suggestions,
|
||
any layout templates/seed data in apps/web or apps/api (grep `defaultW`, `w:` in dashboard code,
|
||
`layouts` defaults in apps/api/src/dashboard). Anything expressed in width units gets × 2.
|
||
- Tests: extend grid-layout-migration tests (v1→v3, v2→v3, v3 untouched, idempotence, marker 3 written), update dashboard-grid tests pinning cols.
|
||
- verify: `pnpm --filter web exec vitest run src/lib src/components/dashboard` green.
|
||
|
||
## Task 2: Widget width constraints in new units
|
||
|
||
- files: apps/web/src/components/dashboard/widget-registry.tsx (+ test)
|
||
- action: In `WIDGET_CONSTRAINTS` double every `minW` and `defaultW` (same physical size as before),
|
||
EXCEPT calendar: `minW: 8` (≈ 251 px at lg — the measured usable minimum), `defaultW: 16` (unchanged size).
|
||
minH/defaultH unchanged. Update the comment above calendar (German): narrower on user request 29.09., 8 of 48 ≈ 250 px measured usable.
|
||
Existing layouts: the existing override logic in dashboard-grid (quick-260916-dyv: stored minW/minH replaced by constants in every breakpoint) must pick up the new calendar minW so existing calendars can be shrunk — verify that path with a test.
|
||
- verify: web tests green; `pnpm turbo run type-check lint --filter web` green; biome warnings for web not above baseline 55.
|
||
|
||
## Task 3: CHANGELOG, rebuild, commit
|
||
|
||
- CHANGELOG.md under `## Unveröffentlicht` → `### Geändert` (section exists) add plain-German bullets (app text uses "Sie"):
|
||
- Dashboard: Das Raster ist in der Breite doppelt so fein – Widgets lassen sich in kleineren Schritten breiter oder schmaler ziehen und genauer platzieren. Bestehende Anordnungen bleiben unverändert.
|
||
- Dashboard: Das Kalender-Widget lässt sich deutlich schmaler ziehen als bisher.
|
||
- Rebuild local stack: `docker compose up -d --build web` (plain `up` does not rebuild).
|
||
- Commits per task, messages end with `Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>`.
|
||
- NEVER git push (orchestrator pushes after browser check).
|
||
- Browser check is done by the orchestrator (resize calendar to minimum, existing layout unchanged after migration, marker 3 persisted).
|