Mobile custom emoji + settings redesign#906
Merged
Merged
Conversation
Port the desktop custom-emoji data model to the Flutter mobile app: the NIP-30 per-user kind:30030 set, unioned client-side into one workspace palette (one entry per shortcode, smallest-URL tiebreak), the riverpod palette provider with read-modify-write of the caller's own set, the pure tag-building/normalization helpers, and a gpt_markdown inline component plus standalone image widget for rendering `:shortcode:` glyphs. This is the shared foundation; UI surfaces (picker, composer, reactions, status, settings) consume the provider + render component. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Add a Custom Emoji section to settings: a dedicated management page to upload an image, name it with a `:shortcode:`, and publish it to the signing user's own NIP-30 kind:30030 set, plus list and remove their own emoji. Reuses the existing Blossom media-upload path and the shared custom-emoji palette provider; the workspace palette and render/composer surfaces are unchanged. Also folds in the Status-section custom-emoji render (Pinky's hunk) since it shares this file. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
- render custom emoji in messages, previews, search, activity, profile, status, forum, and pulse surfaces - attach NIP-30 emoji tags when sending messages, edits, reactions, forum posts, and pulse notes - expose custom emoji in the picker and render custom reaction pills - cover inline render tags, edit tags, and reaction image URLs in focused tests Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Custom emoji can be rendered and reacted with, but the mobile app no longer manages (uploads/names) custom emoji — that lives on web for now. Drops the settings page, the own-set read/write provider methods, and the filename-shortcode helper, with their tests. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Move the Connection and Identity section to the bottom of the Settings screen, below Status and Appearance, and drop the card borders around the Connection, Identity, and Status list tiles so they render flush like the Appearance rows. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Add a top gap so the first section clears the frosted app bar, and give all section headers one consistent grouped-settings style via a shared _SectionHeader (muted, uppercase, semibold) instead of the mixed titleMedium/titleSmall page-title sizing. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Introduce AppListRow / AppListRowRaw / AppListSection in shared/widgets for a flush, Slack-style list look: borderless rows with a consistent icon column and generous padding, groups separated by hairline dividers instead of heavy section titles. Rebuild the Settings screen on these primitives so the styling is reusable across other screens in a follow-up. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
…tton Mute the Accent Color sub-label so it reads below the Appearance rows, top-align row icons with the title on multi-line rows, and turn the Remove Workspace outlined button into a flush destructive row so it matches the rest of the Slack-style list. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Move the version label out of the scroll view into a pinned footer at the bottom of the Settings screen (respecting the safe area), and center the Remove Workspace action as a borderless destructive button. Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Wes <wesbillman@users.noreply.github.com>
tlongwell-block
pushed a commit
that referenced
this pull request
Jun 9, 2026
* origin/main: (32 commits) docs: add NIP-ER event reminders (#875) feat(acp): pass slash commands through to ACP connectors (#919) fix(sdk): resolve multi-word display names and add NIP-27 nostr:npub mention extraction (#905) fix(desktop): re-enable mcp_command reconciliation and harden spawn site (#909) Fix desktop DM and sidebar UI polish (#908) Animate reaction counts (#904) Mobile custom emoji + settings redesign (#906) Renew TTL when unarchiving ephemeral channels (#902) chore(release): release version 0.3.13 (#903) Collapse channel header actions (#901) sprout-agent: make Databricks defaults env-only (#868) Restyle settings sections (#894) Add emoji reaction particles (#890) Move settings into the app shell (#893) Tune chat text sizing (#891) Style channel header navigation (#889) fix: rename missed known_acp_provider_exact → known_acp_runtime_exact (#900) chore(deps): update radix-ui-primitives monorepo (#898) chore(deps): update actions/checkout digest to df4cb1c (#897) refactor: rename ACP "provider" to "runtime" across the codebase (#783) ... # Conflicts: # desktop/src/features/agents/ui/CreateAgentDialog.tsx
tlongwell-block
pushed a commit
that referenced
this pull request
Jun 9, 2026
* origin/main: (32 commits) docs: add NIP-ER event reminders (#875) feat(acp): pass slash commands through to ACP connectors (#919) fix(sdk): resolve multi-word display names and add NIP-27 nostr:npub mention extraction (#905) fix(desktop): re-enable mcp_command reconciliation and harden spawn site (#909) Fix desktop DM and sidebar UI polish (#908) Animate reaction counts (#904) Mobile custom emoji + settings redesign (#906) Renew TTL when unarchiving ephemeral channels (#902) chore(release): release version 0.3.13 (#903) Collapse channel header actions (#901) sprout-agent: make Databricks defaults env-only (#868) Restyle settings sections (#894) Add emoji reaction particles (#890) Move settings into the app shell (#893) Tune chat text sizing (#891) Style channel header navigation (#889) fix: rename missed known_acp_provider_exact → known_acp_runtime_exact (#900) chore(deps): update radix-ui-primitives monorepo (#898) chore(deps): update actions/checkout digest to df4cb1c (#897) refactor: rename ACP "provider" to "runtime" across the codebase (#783) ... Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co> # Conflicts: # desktop/src/features/agents/ui/CreateAgentDialog.tsx
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.
Summary
Adds custom emoji support to the Sprout mobile app and gives the mobile Settings screen a Slack-inspired redesign built on new reusable list components.
Custom emoji (mobile)
Settings redesign (Slack-inspired)
lib/shared/widgets/app_list.dart:AppListRow— flush, borderless row (icon column + title/subtitle/trailing, consistent padding, tap ripple).AppListRowRaw— same shape with a custom leading widget (emoji/avatar).AppListSection— groups rows separated by hairline dividers with a quiet muted label, instead of heavy section titles.Testing
flutter analyzeclean across all of mobile.Follow-ups (not in this PR)
AppListRow/AppListSection.