Commit Graph

36 Commits

Author SHA1 Message Date
Derek Ross 6abe9fade0 Hide FAB while ComposeBox is visible, fade in on scroll
Use IntersectionObserver on the ComposeBox wrapper in Feed.tsx to track
its visibility. When visible, hide the FAB to avoid redundancy. When the
user scrolls past the compose area, the FAB smoothly fades in with an
upward slide animation. Extends LayoutStore with fabHidden state that
is part of the snapshot so useSyncExternalStore triggers re-renders.
2026-03-02 21:35:36 -05:00
Chad Curtis 4bae1cdf31 fix(layout): remove min-h-screen from main wrapper to prevent outer-page scroll on vines 2026-03-01 13:41:49 -06:00
Chad Curtis e4cc47ba51 Add Magic settings page with Magic Mouse cursor fire effect
- Add /settings/magic entry to settings page with magic-intro.png icon
- New MagicSettingsPage with toggle for Magic Mouse mode
- Add magicMouse boolean to AppConfig (optional, defaults to false)
- CursorFireEffect: canvas overlay emitting fire particles in primary color
- Mount CursorFireEffect in MainLayout when magicMouse is enabled
2026-02-28 03:47:07 -06:00
Chad Curtis 8761f4d197 Fix extra bottom scroll and standardize mobile nav height to h-14 2026-02-28 03:18:46 -06:00
Alex Gleason 9782d8d2d4 Start improving visibility of sidebar content on busy custom backgrounds 2026-02-27 17:00:17 -06:00
Alex Gleason 658c7d1dc1 Refactor Webxdc page to use standard Feed with tag filters
Replace the custom WebxdcFeedPage with KindFeedPage, powered by
a new tagFilters option on useFeed/Feed/KindFeedPage. The webxdc
page now uses the same follows/global tabs, pull-to-refresh, and
NoteCard rendering as every other feed.

- useFeed: accept optional tagFilters (e.g. { '#m': [...] })
- Feed/KindFeedPage: pass tagFilters through
- FloatingComposeButton: accept onFabClick callback override
- LayoutOptions: add onFabClick for custom FAB behavior
- Remove useWebxdcFeed (no longer needed)
2026-02-27 11:21:58 -06:00
Alex Gleason 724df5e5d9 Fix background not clearing when switching to a preset without one
Use primitive bgUrl/bgMode strings as effect dependencies instead of
the background object reference, ensuring React detects the change
when switching between presets with and without backgrounds.
2026-02-26 16:03:15 -06:00
Alex Gleason 0af913c6ab Actually, only put background on center column 2026-02-26 15:54:34 -06:00
Alex Gleason 0b7928d38b Apply background color to main layout 2026-02-26 15:32:34 -06:00
Chad Curtis 68f0dd742a Refactor mobile nav with shared sidebar components and improved drawer UX 2026-02-26 03:51:33 -06:00
Alex Gleason 29a9a0f36c Merge branch 'add-custom-theme-editor-ui' 2026-02-26 02:28:23 -06:00
Chad Curtis 787676e014 Fix FAB safe-area offset on Android and generate video preview thumbnails via canvas 2026-02-25 21:44:43 -06:00
Mary Kate Fain 5fafe9c8a7 Simplify profile theme: swap global CSS vars instead of scoped theme wrapper
- Remove ScopedThemeColumns, scopedThemeTokens from LayoutContext and MainLayout
- Profile page now temporarily overrides :root CSS vars with the visited user's theme
- On navigation away, user's own theme is restored via effect cleanup
- Entire page (sidebar, center, right) uses the profile theme
- Removed all display:contents and background extension hacks
2026-02-25 18:36:31 -06:00
Mary Kate Fain 11e779e79b Extend scoped theme background to right viewport edge 2026-02-25 18:24:35 -06:00
Mary Kate Fain 36d80c2f92 Fix scoped theme: proper flex container instead of display:contents, explicit bg-background + text-foreground 2026-02-25 18:16:46 -06:00
Mary Kate Fain d31e9e9e25 Fix profile theme coverage: full-width background layer, ensure text colors inherit through scoped theme 2026-02-25 18:10:24 -06:00
Mary Kate Fain 1828ffb69d Apply profile theme to entire center + right columns via layout-level ScopedTheme
- Added scopedThemeTokens to LayoutOptions
- MainLayout wraps center + right columns in ScopedTheme (display:contents)
- Profile page passes theme tokens via useLayoutOptions instead of local wrapper
- Center column and ProfileRightSidebar use bg-background for scoped theme fill
- Removed ProfileThemeWrapper component (no longer needed)
2026-02-25 18:02:29 -06:00
Mary Kate Fain 25fd420de1 FAB on Public Themes page navigates to Create New Theme 2026-02-25 17:16:20 -06:00
Mary Kate Fain b8d7d8a730 Redesign sidebar navigation with section grouping, customization, and mobile consistency
- Desktop: Remove redundant Home/Search nav items (logo serves as Home, inline
  search covers both quick lookup and full search page navigation)
- Add visual section grouping with labeled separators (Explore, You, Settings)
- Replace ugly dashed 'Add' button with subtle 'More...' inline link
- Add edit mode with drag-and-drop reordering (@dnd-kit) and remove buttons
  for content-type items in the Explore section
- Hover-to-remove on desktop content-type items outside edit mode
- Mobile: Replace avatar menu trigger with standard hamburger icon
- Mobile: Add search icon to top bar right side
- Mobile: Redesign bottom nav as 4-tab layout (Home, Explore, Notifications, You)
- Mobile: Explore tab opens bottom sheet with content type links (vaul Drawer)
- Mobile drawer: Replace profile header with logo, restructure to match desktop
  sections, add 'Manage...' link for settings, remove redundant Profile link
- Add sidebarOrder to AppConfig for persisting custom item order
- Extend useFeedSettings hook with orderedRoutes, addToSidebar, removeFromSidebar
2026-02-25 08:54:37 -06:00
Chad Curtis 66a0388c0a Move column borders to MainLayout wrapper to fix top border gap
Borders were on each page's <main> element, causing them to start below the top of the column. Moving sidebar:border-l and xl:border-r to the wrapper div in MainLayout ensures borders span the full column height from the very top.
2026-02-24 20:57:11 -06:00
Alex Gleason 4c10c954c5 Use bottom-20 for mobile FAB position 2026-02-24 19:27:45 -06:00
Alex Gleason 7401022b05 Add spacing-22 to Tailwind config and use bottom-22 for mobile FAB 2026-02-24 19:27:34 -06:00
Alex Gleason 3b5f53eaa8 Fix FAB mobile position: use bottom-24 (valid Tailwind v3 spacing) 2026-02-24 19:26:10 -06:00
Alex Gleason 9d6eea7869 Fix FAB position on mobile to sit above bottom navigation bar 2026-02-24 19:25:25 -06:00
Alex Gleason 4fa5e391c7 Add floating compose button (+) to center column on all feed pages
- FloatingComposeButton accepts kind prop: kind=1 opens compose dialog, others show 'Coming soon'
- FAB positioned sticky bottom-right within center column (visible on all screen sizes)
- Center column gets bottom padding (pb-24) to account for FAB obstruction
- LayoutContext extended with fabKind option passed through layout system
- Home feed uses kind=1, KindFeedPage passes its kind, StreamsFeedPage uses 30311
2026-02-24 19:11:42 -06:00
Alex Gleason 5b49ea8ea4 Scope Suspense to content area with skeleton fallback
Moved the Suspense boundary from App.tsx (which wrapped the entire app)
into MainLayout around just the Outlet and right sidebar. The left
sidebar, mobile nav, and mobile top bar now persist while lazy page
chunks load. A skeleton fallback fills the content area during loading.
2026-02-21 13:37:09 -06:00
Alex Gleason 3daf38c9fd Use persistent layout route to prevent sidebar remounting on navigation
MainLayout was rendered inside each page component, causing the entire
layout (sidebar, mobile nav, drawer) to be destroyed and recreated on
every route change. This made navigations feel like full page refreshes.

Restructured to use a React Router layout route with <Outlet />, so
MainLayout persists across navigations and only the page content swaps.
Pages that need custom layout options (showFAB, rightSidebar, etc.) use
the new useLayoutOptions hook to configure the persistent layout.
2026-02-21 13:35:27 -06:00
Chad Curtis 5bbbc5022a Fix mobile live stream layout: viewport-locked chat above bottom nav
Lock main element to viewport height on mobile with body scroll disabled,
collapsible description with author under details, zap button inline with
title, and chat input sitting directly above the bottom nav with no gaps.
2026-02-20 15:14:05 -06:00
shakespeare.diy a25cbf54c7 Fix reaction hover behavior and limit FAB to feed page
- Added timeout-based hover management for reaction quick menu
- Menu now closes smoothly when mouse leaves both button and menu
- 150ms delay allows user to move from button to menu seamlessly
- FAB now only appears on the feed page (Index)
- Added showFAB prop to MainLayout for conditional rendering

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-19 06:58:41 -06:00
shakespeare.diy d4f5b786a1 Always show mobile top nav bar on every page
- Removed hideMobileTopBar prop from MainLayout entirely
- Added STICKY_HEADER_CLASS constant in utils for consistent mobile-aware
  sticky positioning (top-10 on mobile, top-0 on desktop)
- Updated all pages to use the shared constant: Search, KindFeed (Vines),
  Hashtag, Wallet, Settings, Placeholder, NotFound, Bookmarks,
  Notifications, and Profile
- Back arrows hidden on desktop where sidebar provides navigation

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 18:38:53 -06:00
shakespeare.diy f8e30c4de4 Fix feed centering: match sidebar widths (300px each)
Right sidebar was 340px vs left sidebar 300px, causing the feed
column to appear shifted left. Now both sidebars are 300px with
max-w-[1200px] container for symmetric centering.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 16:45:11 -06:00
shakespeare.diy c08ae32cb9 Fix alignment and sizing to match Ditto layout
- Widen left sidebar from 280px to 300px to match Ditto
- Add max-w-[1240px] and mx-auto to center the three-column layout
- Adjust compose box textarea top padding (py-2 → pt-3 pb-2) for better vertical alignment of placeholder text with avatar

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 16:43:37 -06:00
shakespeare.diy 8de69a21af Add profile enhancements: zap button, posting streak, media sidebar, profile fields with $BTC QR code
- Add Zap button to profile header (visible for other users with lightning address)
- Add posting streak counter with flame icon (36h window, caps at 99+)
- Create ProfileRightSidebar with Media grid and Profile Fields sections
- Handle $BTC profile field with copiable address, QR code modal, and mempool.space link
- Regular profile fields render as labels with linked URLs
- MainLayout now accepts optional custom right sidebar prop

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-17 03:43:48 -06:00
shakespeare.diy 7740c63328 Use custom sidebar breakpoint (688px) for mobile/desktop toggle
The mobile layout now activates the moment the left sidebar would need
to shrink — at 688px (72px sidebar + 600px feed + padding). Added a
custom `sidebar` Tailwind screen breakpoint and replaced all `md:`
references that control the sidebar/mobile toggle with `sidebar:`.

This ensures the bottom nav, top bar, drawer, FAB, and full-width feed
kick in precisely when the sidebar can no longer fit alongside the feed.

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:17:37 -06:00
shakespeare.diy be5cb2180f Add responsive mobile layout with bottom nav, drawer menu, and FAB compose
Mobile UI (< md breakpoint):
- MobileTopBar: user avatar (opens drawer) + centered Mew logo
- MobileDrawer: left slide-out sheet with user profile, follower stats,
  menu items (Profile, Wallet, Bookmarks, Mutes, Preferences, Domain blocks,
  Logout), and expandable Switch accounts section
- MobileBottomNav: fixed bottom bar with Home, Notifications, Search, Vines
- FloatingComposeButton: purple FAB in bottom-right corner opens compose dialog
- Feed goes full-width on mobile, max-w-[600px] only on md+
- Left sidebar hidden on mobile, right sidebar hidden below lg
- Pages with their own headers use hideMobileTopBar to avoid double headers
- Safe area bottom padding for iOS devices
- Added routes for /bookmarks, /mutes, /domain-blocks placeholders

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:13:25 -06:00
shakespeare.diy 4f1b4800d0 Build Mew: a full-featured kind 1 Nostr client
- Dark theme with purple accent colors matching the reference design
- Three-column layout: left sidebar, main feed, right sidebar
- Left sidebar: Mew logo, search, navigation (Home, Notifications, Search, Vines, Profile, Wallet, Settings, More), compose button, user profile/login
- Main feed: compose box, Follows/Global tabs, live note cards with avatars, author info, NIP-05 verification, relative timestamps, image attachments, and action buttons (reply, repost, like, zap, more)
- Right sidebar: trending hashtags with sparklines, latest accounts, footer
- Full routing: home, profile, notifications, search, hashtags, settings (profile/relays), placeholder pages
- NIP-19 routing with automatic profile redirect
- Custom hooks: useFeed, useTrendingTags, useLatestAccounts, useEventStats
- NoteContent renders mentions, links, and hashtags as clickable elements
- Inter Variable font, skeleton loading states, responsive layout

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
2026-02-16 17:05:32 -06:00