Upload a .xdc file, extract manifest metadata (name, icon),
add a description, and publish a NIP-94 kind 1063 file metadata
event with url, m, x, alt, and webxdc tags. The FAB on the
/webxdc page opens this dialog instead of the kind-1 composer.
The compose dialog already handles .xdc file uploads with full
webxdc metadata extraction (name, icon, UUID), so the FAB uses
fabKind: 1 to open the standard compose flow.
Query NIP-94 kind 1063 events filtered by #m tag for
application/x-webxdc MIME type. Includes infinite scroll,
pull-to-refresh, embedded webxdc launcher, and onboarding
content selection.
- Rename 'Colors' card heading to 'Custom'
- Add 'Publish Theme' button that opens a dialog to publish kind 36767 events
- Query and display user's published themes in the grid after presets
- Clicking a user theme enters editor mode, showing 'Update Theme' alongside
'Publish Theme' to update the existing event in place
- Exit editor mode when selecting a builtin theme or preset
When changing a color via the inline color picker in ThemeSelector,
the handler was passing bare CoreThemeColors to applyCustomTheme(),
which replaced the entire customTheme config and dropped the font
and background fields. Now spreads the existing customTheme before
applying the new colors, matching the pattern used by FontPicker
and BackgroundPicker.
When visiting a profile that has theme colors but no font tag,
the effective font was undefined, which removed the font override
entirely — letting the visitor's custom font bleed through. Now
profiles without an f tag explicitly default to Inter.
When viewing your own profile and your custom theme differs from the
published one, the palette button now opens a dropdown with 'Update
Profile Theme' and 'Delete Profile Theme' options instead of directly
opening the update dialog. The initial share scenario (no published
theme yet) keeps the single-click tooltip behavior.
The profile page useEffect cleanup was restoring the user's theme from
stale closure values captured before Copy Theme was clicked. Use a ref
to always read the latest ownTheme/ownCustomTheme/configuredThemes at
cleanup time so the newly copied theme is correctly restored.
Instead of a standalone link that redirected to /settings/theme?import=,
the Copy Theme action is now a menu item inside the palette icon dropdown
on other users' profiles. It immediately applies the profile's theme as
the user's custom app theme (including font and background), and if
autoShareTheme is enabled, auto-publishes a kind 16767 event too.