Skip to content

Unified UI#311

Open
ziarno wants to merge 21 commits into
callstackincubator:mainfrom
ziarno:unified-ui-next
Open

Unified UI#311
ziarno wants to merge 21 commits into
callstackincubator:mainfrom
ziarno:unified-ui-next

Conversation

@ziarno

@ziarno ziarno commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Description

Introduces @rozenite/ui — a new shared UI package — and migrates all plugins to use it. This eliminates ~3,500 lines of duplicated component code and per-plugin Tailwind/CSS configs, replacing them with a single HeroUI-based component library.

New @rozenite/ui package exports:

  • PluginTheme — unified dark theme wrapper (system theme by default)
  • PluginHeader — consistent plugin header layout
  • DataTable, EditableTable — shared table primitives
  • ConfirmDialog, EntryDetailDialog — shared dialog components
  • JsonInspector — JSON viewer component
  • useCopyToClipboard hook and utility helpers (cn, json)

Migrated plugins: controls-plugin, expo-atlas-plugin, file-system-plugin, mmkv-plugin, network-activity-plugin, overlay-plugin, performance-monitor-plugin, react-navigation-plugin, require-profiler-plugin, rhf-plugin, sqlite-plugin, storage-plugin

Each plugin's per-plugin tailwind.config.ts, custom CSS, and one-off component duplicates have been removed in favor of @rozenite/ui imports.

Related Issue

Notion: Unified UI for Rozenite plugins

Context

Previously each plugin maintained its own Tailwind config, CSS globals, and local copies of common components (editable tables, dialogs, entry detail panels). This led to visual inconsistencies between plugins and made UI-wide changes require touching every plugin separately.

The @rozenite/ui package is built on HeroUI + Tailwind v4 (consistent with the existing ui package approach). Plugin-level CSS is now reduced to a minimal globals.css that imports the shared stylesheet. The PluginTheme component applies the system color scheme by default, so all plugins inherit dark/light mode automatically.

Testing

  • Run pnpm build:all to verify the full build passes
  • Start the playground in focused plugin mode, e.g. pnpm start:playground, and verify each migrated plugin renders correctly
  • Test dark/light theme switching via PluginTheme system default behavior
  • Run pnpm checks:all for typecheck + lint + format

Screenshot 2026-06-25 at 14 09 03 Screenshot 2026-06-25 at 14 09 18 Screenshot 2026-06-25 at 14 09 29 Screenshot 2026-06-25 at 14 09 42 Screenshot 2026-06-25 at 14 09 49 Screenshot 2026-06-25 at 14 10 06 Screenshot 2026-06-25 at 14 10 18 Screenshot 2026-06-25 at 14 10 25 Screenshot 2026-06-25 at 14 10 55 Screenshot 2026-06-25 at 14 11 11 Screenshot 2026-06-25 at 14 11 36 Screenshot 2026-06-25 at 14 11 44 Screenshot 2026-06-25 at 14 11 56 Screenshot 2026-06-25 at 14 12 04 Screenshot 2026-06-25 at 14 12 10 Screenshot 2026-06-25 at 14 12 18 Screenshot 2026-06-25 at 14 12 29 Screenshot 2026-06-25 at 14 12 38 Screenshot 2026-06-25 at 14 12 51 Screenshot 2026-06-25 at 14 13 01

@V3RON V3RON self-requested a review July 7, 2026 13:03

@V3RON V3RON left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Storage:

  • contents in 'entry details' dialog are not correctly aligned (padding is greater for the contents than for the header)
  • the JSON preview is misaligned (copy button pushes the JSON tree down)
  • when you click 'edit' in 'entry details', then you click 'X', the dialog ends up in a broken state

Performance:

  • sidebar is misaligned (paddings)

Require:

  • contents in 'Options' dialog are not correctly aligned (probably shared component)
  • when you click 'X', the dialog ends up in broken state.

SQLite:

  • click on any row, then try to close the sidebar by clicking on the backdrop - the UI freezes.

General:

  • All plugins have now this shared header. I think we can remove both title and description and leave it present only if there are some controls to be presented (see Performance Monitor).

@ziarno

ziarno commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

@V3RON

Storage:

  • broken state dialog: did you check the last commit? I've already fixed it I think. In the require plugin also.

SQLite:

  • do you have any more details, is there an error in the console maybe? I cannot reproduce this locally. Could be because of the blur backdrop, I can remove it.

Header:

  • ok, but should we keep the header even when we remove title/description? because there are theme controls on the right side

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants