Skip to content

FM-SYNCCAL-IMPORT-SCROLL: scroll the import banner's calendar list (closes #27)#48

Merged
keyxmakerx merged 1 commit into
mainfrom
claude/setup-foundry-ai-env-Znu2E
May 19, 2026
Merged

FM-SYNCCAL-IMPORT-SCROLL: scroll the import banner's calendar list (closes #27)#48
keyxmakerx merged 1 commit into
mainfrom
claude/setup-foundry-ai-env-Znu2E

Conversation

@keyxmakerx

Copy link
Copy Markdown
Owner

Hot fix — operator can't reach calendars below the fold

FM-SYNCCAL-ROOT-FIX (#47) shipped and the Sync Calendar app now opens cleanly. The empty-state import banner correctly enumerates Calendaria's full library (operator's screenshot shows Athasian, Barovian, Cerilian, Drakkenheim, Exandrian, Forbidden Lands, Galifar, Golarion, … 8+ rows). Bug #25 closed by symptom — it was a downstream effect of #26's crash, not its own bug.

New #27 surface: the calendar list overflows the modal but doesn't scroll. Operator can see ~8 calendars; the rest are clipped without a scrollbar. Closes BACKLOG #27.

Root cause

.sync-calendar .import-calendar-list had no max-height and no overflow-y. Its parent .sync-calendar-degraded is height: 100% + justify-content: center, so when the list outgrows the container the content clips top + bottom rather than rendering a scrollbar.

Fix (1 commit, CSS-only)

Two scoped rules in styles/sync-calendar-pr3.css:

  1. .sync-calendar .import-calendar-list — added max-height: 50vh; overflow-y: auto;. The list now scrolls on its own when it outgrows half the viewport. Header (NO CALENDAR IN CHRONICLE YET — IMPORT FROM CALENDARIA) + hint paragraph + Recheck button stay pinned above; only the calendar rows themselves scroll.
  2. .sync-calendar-degraded:has(.import-banner) — added justify-content: flex-start; (optional polish from the dispatch). When the import banner is present, top-align so the heading lands at a predictable position instead of getting clipped at the top from being vertically centered. Bare degraded state (no banner) keeps the base centered layout via the original rule.

Net delta: +14 lines including comments. No JS, no template, no i18n changes.

Visual smoke test (per dispatch acceptance)

  1. Degraded mode, 0 Calendaria calendarsNoCalendariaCalendars message renders inline; no scrollbar appears (overflow-y: auto only shows the bar when content overflows).
  2. Degraded mode, 1–3 calendars — list renders compactly; no scrollbar.
  3. Degraded mode, 8+ calendars (operator's repro) — list scrolls within itself; heading + hint + Recheck button stay visible above.
  4. Resize narrower / shorter50vh adapts with the viewport; the cap follows the modal's available height.

Tests

234 / 234 pass (CSS-only change, no test impact). Run: node --test tools/test-*.mjs

Out of scope (per dispatch)

  • ❌ Banner redesign
  • ❌ Search/filter UI for the calendar list (future if the library balloons further)
  • ❌ Sync Calendar discoverability fix (still in BACKLOG)

After merge

This unblocks the end-to-end Calendaria → Chronicle import round-trip test. Once operator confirms they can scroll the full list and pick any calendar, the full 6-PR calendar epic chain (chronicle#316/#319/#320/#321/#322/#323 + chronicle-foundry-module#43/#44/#45/#46/#47) gets its first real smoke test.


Generated by Claude Code

@keyxmakerx keyxmakerx merged commit 88a310f into main May 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant