Commit Graph

996 Commits

Author SHA1 Message Date
Alex Gleason c4caefb2d2 Merge branch 'opencode/1772580097' 2026-03-03 18:08:50 -06:00
Alex Gleason f1191299e8 Add Sentry integration with lazy loading and user-configurable DSN
Sentry SDK is loaded via dynamic import() only when a DSN is configured
and error reporting is enabled, keeping it out of the initial bundle.
Users can control error reporting via a toggle and DSN field in
Advanced Settings, with the DSN synced across devices via encrypted
NIP-78 settings. The ErrorBoundary now reports fatal crashes to Sentry
with component stack context, and a beforeSend hook censors nsec
private keys before any data leaves the browser.
2026-03-03 17:25:14 -06:00
Alex Gleason f27ca27d5f Fix crash when p tags have undefined pubkey values
Filter out undefined/empty pubkeys when extracting reply-to authors
from event p tags. Some events have malformed p tags without a pubkey
value, causing nip19.npubEncode to throw 'hex string expected, got
undefined'. Added filtering in both NoteCard (source) and ReplyContext
(defensive guard).
2026-03-03 17:24:17 -06:00
Derek Ross b8dc5f53f1 Merge branch 'fix/note-more-menu-actions' into 'main'
Fix note overflow menu: copy naddr/nevent IDs, report modal, mention action

Closes #41, #42, and #43

See merge request soapbox-pub/ditto!39
2026-03-03 16:44:55 -05:00
Derek Ross 003cc21ade Fix NoteMoreMenu: copy naddr/nevent IDs, add report modal (NIP-56), implement mention action
- Copy Event ID now copies naddr1 for addressable events or nevent1 for
  others, instead of raw hex
- Add ReportDialog component with NIP-56 kind 1984 reporting (7 report
  types, optional details textarea, scrollable on small screens)
- Wire report dialog into both NoteMoreMenu (post reports) and
  ProfileMoreMenu (profile reports)
- Mention action opens compose modal with nostr:npub pre-filled
- Fix dialog lifecycle: report/mention state lives in outer component to
  survive menu unmount
2026-03-03 16:31:41 -05:00
Alex Gleason 11070c3d55 Revert FAB scroll-hide behavior — always show FAB
Reverts 6abe9fa and the fabHidden parts of 7f26beb. The FAB is now
always visible when showFAB is true, restoring sticky positioning
inside the center column. Removes IntersectionObserver logic from
Feed.tsx, fabHidden state from LayoutStore, and the useSetFabHidden
hook.
2026-03-03 15:22:57 -06:00
Alex Gleason 32e73eb568 Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-03 11:50:16 -06:00
Chad Curtis fecaa346c7 Scroll 'More...' menu to middle of list on open 2026-03-03 11:46:54 -06:00
Alex Gleason b067b2da3e fix: render webxdc in compose preview by extracting shared NoteMedia component
The composer preview tab was missing webxdc embeds because it manually
rendered only videos and audio, while webxdc rendering lived exclusively
inside NoteCard. Extract NoteMedia into a shared component and
ImetaEntry/parseImetaMap into a shared utility, then wire them into the
ComposeBox preview with proper imeta tag generation on the mock event.
2026-03-03 11:28:19 -06:00
Derek Ross 16d0bbf650 fix: define click zones for audio cards — artwork plays, info navigates
Artwork area (cover image + play button) plays/pauses audio on click.
Info area (title, description, duration) bubbles up to NoteCard for
navigation to the detail page. Removed blanket stopPropagation that
was preventing all clicks from working.
2026-03-03 12:21:16 -05:00
Chad Curtis 5e5ef57a00 Stop auto-scroll at list limits, clean up interval on unmount 2026-03-03 11:13:36 -06:00
Chad Curtis b3cad7c796 Add scroll carets to SidebarMoreMenu dropdown lists 2026-03-03 11:04:47 -06:00
Mary Kate Fain 974b0fd927 perf: optimize book feed by batch-prefetching and reducing OpenLibrary API calls
- Add useBookSummary hook that fetches only edition data (1 request vs 3)
- Batch-prefetch ISBNs at the feed level with concurrency control (4 at a time)
- Switch InlineBookCard from useBookDetails to useBookSummary
- Increase cache duration from 30min/1hr to 24hr/48hr for book metadata
2026-03-03 10:35:36 -06:00
Mary Kate Fain f41c6a4126 feat: enhance Books feed with tabs, truncation, reviews, and comments
- Add Following/Global feed tabs to Books page with sticky tab bar
- Add KindInfoButton linking to Bookstr (bookstr.xyz) for content creation
- Add text truncation with 'Read more' fade (300px max-height, matching NoteCard)
- Include kind 1111 book comments in the feed with 'commented' badge
- Comments on books navigate to the book page instead of event detail
- Add Reviews tab on book detail pages (/i/isbn:*) alongside Comments
- Add review submission form with 5-star rating, spoiler warnings, and edit support
- Add 'Write Review' button in book page action bar and Reviews tab
- Support useFollowList for follows-tab scoped book queries
2026-03-03 10:25:57 -06:00
Mary Kate Fain 4691412444 feat: replace Books page with Nostr book feed using Bookstr NIP protocol
Replace the static OpenLibrary trending books list with a live social
feed of book-related Nostr events. The feed queries kind 31985 (book
reviews/ratings) and kind 1 posts tagged #bookstr or referencing ISBNs,
following the Bookstr NIP-XX protocol.

New files:
- src/lib/bookstr.ts: protocol constants, event parsing, ISBN extraction
- src/hooks/useBookFeed.ts: infinite scroll feed of book events
- src/hooks/useBookDetails.ts: OpenLibrary book metadata by ISBN
- src/components/BookFeedItem.tsx: feed item with inline book card,
  star ratings, spoiler guards, and full social actions
2026-03-03 10:25:57 -06:00
Derek Ross 3eaee4d560 fix: emoji/gif picker hidden behind modal dialogs
Bump z-index from z-50 to z-[200] on PopoverContent, TooltipContent,
and DropdownMenuContent so they render above dialog overlays (z-[150]).
2026-03-03 11:20:09 -05:00
Derek Ross f0ffdda17f fix: eliminate 'Post Details' flash on specialized detail pages and standardize headers
- PostDetailShell accepts optional title prop for kind-aware loading states
- AddrPostDetailPage derives correct title from addr.kind before event loads
- PostDetailPage shows neutral 'Loading...' during fetch instead of 'Post Details'
- Standardize all detail headers to 'X Details' pattern (Track Details, Playlist Details, Episode Details, Trailer Details)
- Fix music detail headers from text-lg to text-xl for consistency
2026-03-03 10:01:19 -05:00
Derek Ross 0c881b9196 Merge branch 'fix/audio-cards-styling' into 'main'
feat: redesign audio feed cards and add podcast detail pages

See merge request soapbox-pub/ditto!34
2026-03-03 09:53:03 -05:00
Derek Ross b1dcb0af7f feat: redesign audio feed cards and add podcast detail pages
- Redesign music/podcast feed cards with vertical layout, full-width artwork, play button overlays, and spacious info sections
- Add PodcastDetailContent with play/pause hero matching MusicDetailContent (artwork, reactions, comments, zap stats)
- Route podcast episodes (kind 30054) and trailers (kind 30055) to dedicated detail view
2026-03-03 09:47:53 -05:00
Derek Ross a15a56b717 Merge branch 'fix/events-feed-sizing' into 'main'
fix: redesign events feed cards and detail page

See merge request soapbox-pub/ditto!33
2026-03-03 09:37:39 -05:00
Derek Ross d8923e9e85 fix: redesign events feed cards and detail page for consistent sizing and themed styling
- Compact feed cards use vertical layout with capped 180px cover image, participant avatars, truncated description, and location pill
- Event detail page uses standard top bar matching other pages
- Date/location/links use sidebar-style rounded pills (bg-background/85)
- RSVP section uses matching rounded container with pill buttons
- Zap and share icons moved inline with organizer row
2026-03-03 09:35:00 -05:00
Derek Ross 5c159477be fix: close minimized player immediately on X without stop/cancel confirmation 2026-03-03 09:05:05 -05:00
Chad Curtis 24d1291031 fix: remove unused imports and stale eslint-disable directive 2026-03-03 07:34:34 -06:00
Chad Curtis 5168fd8553 Show nip05 checkmark only on profile page 2026-03-03 07:33:05 -06:00
Chad Curtis 7aaa3e2587 Add interactive profile editor with live card, image crop, and onboarding integration 2026-03-03 07:31:06 -06:00
Chad Curtis 96fe271a65 fix: remove events from onboarding content picker, use Calendar icon 2026-03-03 06:39:43 -06:00
Chad Curtis c8ba21c412 fix: first tap on mobile reveals controls without toggling play/pause 2026-03-03 06:32:10 -06:00
Chad Curtis efd7c84756 fix: keep volume slider open while focused/dragging 2026-03-03 06:31:29 -06:00
Chad Curtis dc7f3fa568 Reapply "fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic"
This reverts commit 340fdfda04.
2026-03-03 06:30:09 -06:00
Chad Curtis 340fdfda04 Revert "fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic"
This reverts commit 532dccc599.
2026-03-03 06:29:27 -06:00
Chad Curtis 532dccc599 fix: use usePlayerControls in LiveStreamPlayer, mirror VideoPlayer click/controls logic 2026-03-03 06:27:49 -06:00
Chad Curtis f102f5374a fix: align LiveStreamPlayer volume controls with VideoPlayer 2026-03-03 06:23:09 -06:00
Chad Curtis 600841705f fix: populate OS media controls with event image, title, and artist at all player call sites 2026-03-03 06:13:47 -06:00
Chad Curtis aa04754c77 feat: wire Media Session API to video/livestream players and fix OS scrubber; hide mini-bar on mobile 2026-03-03 05:57:57 -06:00
Chad Curtis 62c8ebe9a1 fix: tighten mobile spacing on live stream page to give chat more vertical room 2026-03-03 05:52:43 -06:00
Chad Curtis b200d5a84d fix: account for safe-area-inset-bottom in live stream chat height on PWA/APK 2026-03-03 05:51:02 -06:00
Chad Curtis 696e0f6e5f fix: fall back to / when back button has no history to return to 2026-03-03 05:48:51 -06:00
Chad Curtis 8032ac585d Use StickyNote icon for view post details menu item 2026-03-03 05:46:24 -06:00
Chad Curtis fc7f6a45c1 Add 'View post details' option to NoteMoreMenu 2026-03-03 05:43:29 -06:00
Chad Curtis e82c4642c9 Portal HoverCardContent to document body so it escapes overflow-hidden containers 2026-03-03 05:42:08 -06:00
Chad Curtis 8ac5dcad41 Show 'No replies yet' for kind 1 events in CommentsSheet empty state 2026-03-03 05:40:51 -06:00
Chad Curtis ad55861708 Open CommentsSheet for kind 1 events in gallery lightbox instead of navigating away 2026-03-03 05:39:47 -06:00
Chad Curtis c337e47214 Add 'Add' dropdown to sidebar edit mode for adding new sections 2026-03-03 05:20:54 -06:00
Chad Curtis a0da63591a fix: preserve background when re-selecting user theme from dropdown 2026-03-03 05:09:32 -06:00
Chad Curtis 658b7a2253 fix: restore custom theme when clicking Custom in theme dropdown 2026-03-03 05:04:26 -06:00
Chad Curtis 24307b9e9f Replace margin with padding on sticky page headers 2026-03-03 04:45:59 -06:00
Chad Curtis 99704fed7f feat: rename Content to Feed, add Content settings page with muted/sensitive/theme prefs 2026-03-03 04:37:29 -06:00
Chad Curtis 3801b007e8 fix: sync lightbox index when sidebar opens media while tab is already active
When the media tab was already mounted, clicking a media item in the sidebar
set sidebarMediaUrl (initialOpenUrl) but flatIndex state didn't update because
useState only uses its initial value at mount time. Add a useEffect to sync
flatIndex whenever initialIndex (derived from initialOpenUrl) changes.
2026-03-03 01:49:29 -06:00
Chad Curtis 984fc2d869 Unify following-tab empty states with shared FeedEmptyState component 2026-03-03 01:42:57 -06:00
Chad Curtis bb55743ceb Fix mobile live stream layout: full-width video, scrollable chat
- Make main a flex container on mobile so chat flex-1 works correctly
- Add overflow-hidden to chat wrapper to complete flex scroll chain
- Remove horizontal padding and border-radius from video on mobile
- Apply xl:rounded-2xl to player component (main and error states)
2026-03-03 01:32:31 -06:00