Commit Graph

1599 Commits

Author SHA1 Message Date
Alex Gleason 2c20cef12c Detect wallet fields with $ prefix (e.g. $BTC) and normalize label on load 2026-03-05 21:07:58 -06:00
Alex Gleason 0779164c9c Align fixed profile fields with drag handles and improve media detection on load
- Add leading spacer to Website and Lightning rows so they align with the
  drag-handle column on custom fields
- Improve inferFieldType to detect Blossom-style URLs (SHA-256 hex paths)
  as media, not just URLs with file extensions
2026-03-05 20:38:55 -06:00
Alex Gleason 303b1e7777 Add typed profile fields (text/wallet/media) with dropdown menu and drag-and-drop reorder
- Replace 'Add Field' button with dropdown offering Text, Wallet Address, and Media options
- Wallet fields show a ticker dropdown (BTC, ETH, SOL, etc.) as the label
- Media fields include an upload button that fills the URL value via Blossom
- All custom fields are drag-and-drop reorderable using @dnd-kit
- Existing fields auto-detect their type when loaded from profile data
2026-03-05 20:30:05 -06:00
Alex Gleason d72ad98ec7 Fix poor hover contrast on Profile Fields and Advanced collapsible triggers 2026-03-05 20:18:43 -06:00
Alex Gleason 35bc1a0438 Add configurable homepage route and show all items in mobile sidebar
- Add homePage config field (default: 'feed') that determines which
  sidebar item renders at the '/' route
- Any sidebar item can be set as the homepage via Feed settings
- The feed is always accessible at /feed when not configured as home
- Normalize sidebar item IDs: every item follows path === '/' + id
  (feed path changed from '/' to '/feed', emoji-packs renamed to emojis)
- Remove BOTTOM_NAV_ITEMS filter from MobileDrawer so all sidebar
  items are visible on mobile (feed, notifications, search included)
- Mobile bottom nav dynamically reflects the configured homepage icon
- Homepage setting syncs across devices via encrypted settings
- Add emoji-packs -> emojis migration for existing sidebar orders
2026-03-05 15:23:43 -06:00
Mary Kate Fain 3945db1445 Link muted threads to their post in settings/content
Muted threads now display as clickable links (shortened event ID with
an external link icon) that navigate to the thread via its nevent
identifier, instead of showing a raw unclickable hex string.

Closes #50
2026-03-04 23:58:35 -06:00
Mary Kate Fain ff3d99f205 Fix search filter dropdown z-index rendering behind popover
SelectContent used z-50 while PopoverContent used z-[200]. Both are
portaled to the body, so when a Select inside a Popover is opened,
the Select dropdown rendered behind the Popover panel. Raised
SelectContent to z-[250] so it always appears above popovers.

Closes #55
2026-03-04 23:56:04 -06:00
Mary Kate Fain eba4121d63 Support hyphens in custom emoji shortcodes
All shortcode regexes used [a-zA-Z0-9_] which excluded hyphens,
causing custom emojis like :GM-Chachi: to fail at every stage:
publishing (no emoji tag added to event), rendering (shortcode not
resolved to image), and detection (not recognized as custom emoji).

Updated the character class to [a-zA-Z0-9_-] across all 8 locations
in NoteContent, CustomEmoji, ComposeBox, and customEmoji utility.

Also added viewer's custom emoji collection as a fallback in
NoteContent so shortcodes render even when events from other clients
omit the emoji tag.

Closes #62
2026-03-04 23:51:19 -06:00
Mary Kate Fain 929bb32c69 Fix custom emoji reactions on /i/ external content pages
Two bugs prevented NIP-30 custom emoji reactions from working on /i/
pages (e.g. country pages):

1. Publishing: QuickReactMenu's onReact callback discarded the emoji
   tag, so kind 17 events were published without the ['emoji', name,
   url] tag needed to resolve custom emojis. Now passes emojiTag
   through to the callback.

2. Display: The reaction button rendered a plain <span> that showed
   raw :shortcode: text. Now uses ReactionEmoji component which
   resolves custom emoji images from the event's tags.

Also updated useExternalUserReaction to return the event's tags
alongside the emoji string so custom emojis can be rendered.

Closes #62
2026-03-04 23:37:52 -06:00
Mary Kate Fain 575c771ca2 Rename sidebar label from 'Emoji Packs' to 'Emojis' 2026-03-04 23:30:57 -06:00
Mary Kate Fain 1352e1b617 Rename /emoji-packs to /emojis and remove Emojiverse link
- Update route path, sidebar item, extraKinds route, and NoteCard
  noun route from /emoji-packs to /emojis
- Remove Emojiverse external link from EmojiPackContent cards
- Remove sites array from emoji-packs kind definition

Closes #60
2026-03-04 23:28:53 -06:00
Mary Kate Fain 45638c1b8a Remove background color from sidebar divider in normal mode
The divider item shared bg-background/85 with regular nav items,
causing a visible pill-shaped background around the thin line. Now
only applies the background when in edit mode where it needs to be
visually distinct for drag-and-drop.

Closes #63
2026-03-04 23:21:54 -06:00
Mary Kate Fain 45aab783f6 Include own pubkey in /videos Follows tab live stream query
The useLiveStreams hook only filtered by followed pubkeys, excluding the
logged-in user's own streams from the Follows tab. Now appends
user.pubkey to the authors filter, matching the behavior of the
useFeed hook used for videos and shorts.

Closes #52
2026-03-04 23:14:09 -06:00
Mary Kate Fain d32094495b Render muted user profiles with avatar and name in content settings
Muted users in settings/content now show their avatar and display name
instead of raw hex pubkeys. Uses useAuthor to resolve profiles with a
skeleton loading state. Non-pubkey mute types (hashtags, words, threads)
retain the existing code display.

Closes #49
2026-03-04 23:08:47 -06:00
Mary Kate Fain 6448b4b17f Fix unfollow button hover contrast on hovercards
Use solid destructive background with proper foreground color on hover
instead of a semi-transparent red tint with red text, which had poor
contrast and made the button text unreadable.

Closes #44
2026-03-04 23:04:09 -06:00
Mary Kate Fain e005301e6b Replace mobile sidebar avatar trigger with hamburger menu icon
The avatar in the top-left on mobile created a double profile picture
issue when the user was logged in. Now always shows a hamburger menu
icon regardless of login state.

Closes #20
2026-03-04 23:00:41 -06:00
Mary Kate Fain 26bd8c7341 Show lightning addresses on profiles and add to edit profile forms
- Display lud16/lud06 lightning address on profile pages below NIP-05
  badge with a zap icon
- Add lightning address to profile fields sidebar (desktop) alongside
  website and custom fields
- Add lud16 input field to EditProfileForm in the website/NIP-05 grid
- Add lud16 input field to ProfileSettings in the profile fields section
- Both forms initialize from and preserve existing lud16 values

Closes #48
2026-03-04 22:53:11 -06:00
Mary Kate Fain 21368f68f6 Fix book feed: show book context on review/post detail pages and improve review visibility
- Show book preview (cover, title, author) above content when viewing a
  book review (kind 31985) or a kind 1 post tagged with an ISBN
- Add star rating display on book review detail pages
- Set page title to 'Book Review' for kind 31985 events
- Add visual left border to review text in feed cards for better visibility
- Extract ISBN from events using extractISBNFromEvent for both review
  d-tags and i-tags on regular posts

Closes #58
2026-03-04 22:43:56 -06:00
Mary Kate a2804158a4 Merge branch 'theme-feed-refactor' into 'main'
Refactor theme feed: remove Vibe sidebar item, consolidate into tabbed Themes page

Closes #8

See merge request soapbox-pub/ditto!42
2026-03-05 04:24:49 +00:00
Mary Kate Fain 7d013b3cc5 Remove unused navigate import from ProfileMoreMenu 2026-03-04 22:21:36 -06:00
Mary Kate Fain b3dadb8987 Remove 'Edit theme' link from profile three-dots menu
The palette dropdown on the profile banner now handles theme editing
directly via the Edit Profile Theme dialog.
2026-03-04 21:41:27 -06:00
Mary Kate Fain c39bb181ef Add Edit Profile Theme dialog on profile page with controlled pickers
- Refactor FontPicker and BackgroundPicker to support controlled mode via
  optional value/onChange props (backward-compatible — uncontrolled mode
  unchanged when props are omitted)
- Add 'Edit Profile Theme' button to both palette dropdown menus on the
  user's own profile (above Delete Profile Theme)
- New dialog with color pickers, font picker, and background picker that
  edit the profile theme (kind 16767) independently from the app theme
- Local state is initialized from the current profile theme when the
  dialog opens, and saved via setActiveTheme on submit
2026-03-04 21:36:17 -06:00
Mary Kate Fain 29d497501b Always show My Themes section with empty state CTA when no custom themes exist
Shows a dashed border card with a plus icon and 'Create and share your
first custom theme' prompt. Clicking it opens the builder dialog.
2026-03-04 21:18:07 -06:00
Mary Kate Fain d115f87814 Remove Active Theme section, show active theme in its normal grid position
Each theme now stays in its own section (My Themes or Presets) with the
active indicator (border highlight + check mark) showing which is selected.
2026-03-04 21:16:19 -06:00
Mary Kate Fain a5b135efbb Stack builder dialog action buttons vertically for better mobile fit 2026-03-04 21:13:29 -06:00
Mary Kate Fain 76901ddb2c Redesign builder dialog footer: split buttons, collapsible Advanced section
- Update button now says 'Update "Theme Name"' (left side)
- Publish button now says 'Publish New Theme' (right side)
- Delete moved into a collapsed 'Advanced' section below the buttons
- Uses Collapsible component with ChevronDown indicator
2026-03-04 21:11:27 -06:00
Mary Kate Fain 34876fbb30 Fix builder dialog horizontal overflow on mobile
- Add horizontal margin (1rem each side) so dialog doesn't touch screen edges
- Add rounded-lg for consistent border radius on mobile
- Shorten button labels ('Update' / 'Publish') and allow footer to flex-wrap
  to prevent overflow with multiple buttons
2026-03-04 21:08:25 -06:00
Mary Kate Fain be04eed5c4 Remove hover edit buttons from theme cards, add delete theme to builder dialog
- Remove onEdit prop from ThemeButton and all related plumbing (onEditTheme
  in ThemeGrid, handleEditTheme in ThemeSelector, Pencil icon overlay)
- Add Delete button in the builder dialog footer (visible only when editing
  an existing theme), using the existing deleteTheme from usePublishTheme
- Delete resets theme to system and closes the builder dialog
2026-03-04 21:04:29 -06:00
Mary Kate Fain 438983cb13 Use Pencil icon for theme FAB instead of Plus
Add fabIcon prop to LayoutOptions and FloatingComposeButton so pages can
override the default Plus icon. The Themes page now shows a Pencil icon
on its FAB to indicate editing/customizing rather than composing.
2026-03-04 20:59:00 -06:00
Mary Kate Fain a72fc60f55 Merge Active Theme and My Themes into a shared grid row, deduplicate active item
Active Theme card sits first in the grid, followed by My Themes cards
in the same grid with separate section labels using col-span-full.
The active theme is filtered out of both My Themes and Presets sections
so it only appears once.
2026-03-04 20:55:58 -06:00
Mary Kate Fain d67a37180c Remove header Edit button, organize My Themes into sections
- Remove the Edit button from the ThemesPage header (FAB + grid edit icons
  are sufficient for accessing the builder)
- Split the flat theme grid into three labeled sections:
  1. Active Theme — shows the currently active theme as a single card
  2. My Themes — user's published themes with edit icons (only shown when
     themes exist)
  3. Presets — builtin themes (System/Light/Dark) and preset themes
- ThemeGrid component is unchanged (still used by onboarding carousel)
2026-03-04 20:52:08 -06:00
Mary Kate Fain 9b7fdf99c4 Move theme builder into a modal dialog with FAB and header Edit button
- ThemeSelector's customize card (color pickers, font, background, publish)
  and auto-share toggle now live inside a Dialog instead of inline
- FAB (compose button) on the My Themes tab opens the builder in 'new' mode
- Header 'Edit' button opens the builder for the current theme
- User theme cards in the grid show a Pencil edit icon on hover that opens
  the builder in edit mode for that specific theme
- Builder dialog shows 'New Theme' or 'Edit Theme' title based on mode
2026-03-04 20:42:02 -06:00
Mary Kate Fain 5e8c1e2e92 Refactor theme feed: remove Vibe sidebar item, consolidate into tabbed Themes page
Move the ThemeSelector (formerly on the Vibe/settings/theme page) into the
Themes page as the first 'My Themes' tab, alongside new 'Follows' and
'Global' feed tabs for browsing published themes.

- Delete ThemeSettingsPage and ThemeBuilderPage (builder lives inline in ThemeSelector)
- Remove Vibe sidebar entry and settings section
- Add useThemeFeed hook for follows/global theme event filtering
- Rename 'Vibe' to 'Theme' in account popover dropdown
- Update all links from /settings/theme to /themes
2026-03-04 20:28:05 -06:00
Mary Kate Fain 4a4cbacac1 Merge branch 'main' of gitlab.com:soapbox-pub/ditto 2026-03-04 19:41:28 -06:00
Mary Kate Fain 706816478c Add Clear Sky Vibes theme preset with magenta primary and cyan text 2026-03-04 19:40:23 -06:00
Mary Kate Fain 8f140c4eaa Add bundled fonts and background images for all 8 new theme presets
Install Cinzel, Nunito, Quicksand, Courier Prime, and Comic Neue as
bundled fonts and register them in the font registry. Add Unsplash
background images to every new preset (Gothic, Cottage, Candy Heart,
Midnight, Hologram, Floret, Win 95, Plush).
2026-03-04 19:34:24 -06:00
Mary Kate Fain 16c9009d5f Add 8 new theme presets inspired by MySpace Windows93 themes 2026-03-04 19:24:36 -06:00
Derek Ross b4690c7391 Merge branch 'fix/dismiss-new-accounts' into 'main'
Fix dismiss button on New Accounts widget

Closes #61

See merge request soapbox-pub/ditto!41
2026-03-04 20:24:14 -05:00
Derek Ross 73c4fe4e13 Fix dismiss button on New Accounts widget in right sidebar
Wire up the non-functional X button so clicking it dismisses accounts
from the list. Dismissed pubkeys are persisted to localStorage so they
stay hidden across page reloads.
2026-03-04 20:20:26 -05:00
Alex Gleason d40c7cea60 Speed up Dork thinking animation to 100ms per frame 2026-03-04 16:26:42 -06:00
Alex Gleason 56d356ca3b Replace loading skeleton with animated Dork ASCII art 2026-03-04 16:25:35 -06:00
Alex Gleason 04af201748 Remove Bot avatar from loading indicator in AI chat 2026-03-04 16:20:37 -06:00
Alex Gleason 5290944625 Remove user and Dork avatars from AI chat message bubbles 2026-03-04 16:19:56 -06:00
Alex Gleason db8000d57e Redesign Dork AI empty state with avatar card, glow, and random greetings 2026-03-04 16:18:40 -06:00
Alex Gleason fdc6c5db68 Rebrand AI chat to Dork AI with minimal empty state 2026-03-04 16:17:15 -06:00
Alex Gleason f5bc5fdbe4 Upgrade Nostrify (to fix NIP-05 signer issue) 2026-03-04 15:55:57 -06:00
Alex Gleason 729a844606 Fix ESLint error: remove unused isTreasure variable in NoteCard 2026-03-04 14:46:49 -06:00
Alex Gleason e94f9c1739 Extract relay/author hints from reply event to enrich NIP-22 comment tags 2026-03-04 14:24:44 -06:00
Alex Gleason 350f26bc6e Display kind 1111 (NIP-22) replies on kind 1 posts 2026-03-04 14:24:24 -06:00
Chad Curtis 463a621488 Fix emoji picker blur, tab alignment, and consistent picker sizing 2026-03-04 04:03:09 -06:00