Replace TOAST UI Calendar with FullCalendar in the calendar app - #12
Draft
arisoik wants to merge 34 commits into
Draft
Replace TOAST UI Calendar with FullCalendar in the calendar app#12arisoik wants to merge 34 commits into
arisoik wants to merge 34 commits into
Conversation
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Search is a command-palette-style modal (click-only, no keyboard shortcut) that matches title/location/description across all loaded events, including recurring series and months not currently in view, and opens the matched event's popover on selection. Also: double-click an event to edit directly; popover click-through behavior (switches to a different event in one click, only swallows day-grid select); fixed an all-day create/duplicate off-by-one day; fixed popover positioning to reliably avoid covering its own anchor. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sidebar with per-calendar show/hide, create/rename/recolor/delete (primary calendar protected from deletion, real confirm dialog instead of the browser's native one), a calendar picker in the event form, and per-event coloring. Collapsible on desktop, off-canvas drawer on mobile. Also fixes two click-handling bugs found via live testing: a calendar menu overlapping the row below it could swallow clicks meant for that row, and stopPropagation() calls elsewhere were silently blocking the event popover's and calendar menu's own bubble-phase outside-click listeners - both switched to capture phase. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Replace the click-to-open command-palette search with an always-visible search bar centered in the toolbar (hamburger left, search center, "..." overflow menu right holding Import and the FullCalendar version), and start the sidebar closed by default on both desktop and mobile. Fixes two real layout bugs found testing at actual mobile widths: #search-bar needed min-width:0 to shrink below its content size (a flex-item default that was pushing the overflow menu off-screen), and the desktop-only .collapsed sidebar class needed to be scoped to a min-width media query so it stopped clipping the mobile drawer's content once opened. Also fixes a click on the overflow menu's version line incorrectly closing the menu.
Switch the vendored FullCalendar theme from Classic to Breezy (indigo palette) for a more modern look, then wire up Peergos's ?theme= URL param to the data-color-scheme attribute Breezy's own CSS already watches for. Rather than hand-rolling a separate dark palette, rewrite calendar.css to reference Breezy's own --fc-breezy-* custom properties throughout, so one attribute flip re-themes FullCalendar's grid and this app's own sidebar/modals/popover/toolbar consistently at once. Two refinements after seeing it live: override the background/popover surfaces to Peergos web-ui's own dark-mode colors (#2c3e50/#283744) instead of Breezy's stock near-black, so the app doesn't look visually mismatched against its host; and add a brighter, index-matched CALENDAR_COLORS_DARK palette (via a displayColor() lookup used only for rendering, never for the stored cal.color identity) since the light-mode calendar colors read as muddy against a dark background. Also inlines the last few <img>-based icons as <svg> (they couldn't pick up currentColor and would've stayed solid black in dark mode), adds ISO week numbers and navLinks (day/week numbers now jump to Day/Week view, matching Google Calendar/Outlook), and moves the Today button between the prev/next arrows as one grouped control. Verified live across all five views, the native "+N more" day popover, and every custom modal/popover/dropdown, in both light and dark mode.
Export: add "Export calendar" (one calendar's full event list as a single multi-VEVENT .ics file) to the sidebar menu, matching Google/ Outlook/Apple's own whole-calendar-first export convention - available read-only, same as Search. Only ids this app minted get a Peergos UID (<id>@peergos.org) on export; a re-exported imported event keeps its original foreign UID untouched, so re-importing that file back into its source app is still recognized as the same event rather than a new duplicate. Fixes a real crash along the way: exporting a recurring series with no occurrence in the currently rendered view had ev.start === null, so duration couldn't be computed from start/end - now falls back to the duration already stored on the event's internal def. Import: add duplicate detection (skip events whose id, derived from the file's own UID, already exists), a "not a valid calendar file" check, and a post-import summary modal instead of importing silently with no feedback. Two Breezy theme fixes, both in fixDayGridEventLayout(): Month/Year event rows had no per-event color indicator at all (unlike Week/Day/List which all work correctly) and right-aligned the time label instead of reading flush-left like Classic - fixed with a small dot plus explicit ordering, space-based (not a fixed breakpoint) so the time reappears when there's actually room, e.g. rotating a phone to landscape. Applied on every resize, not just at mount, since Breezy's own responsive logic rebuilds this content on resize without re-invoking eventDidMount, which otherwise left the ordering scrambled after a couple of rotations. Also enables nowIndicator (the current-time line in Week/Day view was never turned on) and swaps the last calendar color from gray to a bright red for better dark-mode visibility.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…isons Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…loat Popover now scrolls instead of clamping (close button and actions stay reachable via corner overlay/sticky footer), double-click-to-edit is desktop-only, and comments/README trimmed for brevity throughout.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.