Update admin navigation icon vocabulary#2151
Conversation
# Conflicts: # packages/admin/src/components/AdminCommandPalette.tsx
🦋 Changeset detectedLatest commit: a354530 The changes in this PR will be included in the next version bump. This PR includes changesets to release 16 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Scope checkThis PR changes 610 lines across 16 files. Large PRs are harder to review and more likely to be closed without review. If this scope is intentional, no action needed. A maintainer will review it. If not, please consider splitting this into smaller PRs. See CONTRIBUTING.md for contribution guidelines. |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-cache | a354530 | Jul 20 2026, 05:34 PM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-demo-do | a354530 | Jul 20 2026, 05:34 PM |
@emdash-cms/admin
@emdash-cms/auth
@emdash-cms/auth-atproto
@emdash-cms/blocks
@emdash-cms/cloudflare
@emdash-cms/contentful-to-portable-text
emdash
create-emdash
@emdash-cms/gutenberg-to-portable-text
@emdash-cms/plugin-cli
@emdash-cms/plugin-types
@emdash-cms/registry-client
@emdash-cms/registry-lexicons
@emdash-cms/registry-verification
@emdash-cms/sandbox-workerd
@emdash-cms/x402
@emdash-cms/plugin-ai-moderation
@emdash-cms/plugin-atproto
@emdash-cms/plugin-audit-log
@emdash-cms/plugin-color
@emdash-cms/plugin-embeds
@emdash-cms/plugin-field-kit
@emdash-cms/plugin-forms
@emdash-cms/plugin-webhook-notifier
commit: |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
emdash-playground | a354530 | Jul 20 2026, 05:36 PM |
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
docs | 94ef6d8 | Jul 20 2026, 05:21 PM |
There was a problem hiding this comment.
This PR is a focused, maintainer-directed visual-consistency fix: it extracts a first-party admin icon vocabulary into admin-navigation-icons.ts and shares it across the sidebar, command palette, content-search results, and related empty states. The approach is sound for the stated problem: it removes the duplicated FileText/ PuzzlePiece defaults, gives pages/posts/taxonomies/bylines/etc. distinct glyphs, and keeps plugin-page icons resolving consistently with a Plug fallback. It also preserves the existing lazy-icon behavior for uncommon Phosphor names.
What I checked:
- Read the full diff and the new
admin-navigation-icons.ts. - Read the touched components (
Sidebar,AdminCommandPalette,Dashboard,Redirects,MenuList,PluginManager,SectionPickerModal,CommentInbox, etc.) to confirm the new icon helpers are wired correctly. - Traced call sites for
resolveNavIcon,toPhosphorIconName,PuzzlePiece, andADMIN_NAV_ICONSto verify no stale imports or mismatched fallbacks remain. - Reviewed the new and updated tests; they cover collection overrides, taxonomy tags vs. categories, plugin-page icon resolution, and the Plug fallback.
- Checked the changeset against the AGENTS.md guidance (present-tense, user-facing description, patch bump for
@emdash-cms/admin).
I did not find any logic bugs, regressions, AGENTS.md convention violations, or security/data issues. The lazy-icon cache stays module-scoped, which matches the pre-existing pattern and is acceptable for the browser SPA; moving it to globalThis would be a nice future refactor but is not required here. No user-facing strings changed, so no Lingui updates are needed.
Headline: LGTM — the centralized vocabulary is the right structural fix and the implementation looks clean.
There was a problem hiding this comment.
This re-review confirms the PR is still a focused, maintainer-directed visual-consistency fix. Centralizing the first-party admin icon vocabulary in admin-navigation-icons.ts is the right structural response to the duplicated/ambiguous icon problem: it guarantees the same glyph is used in the sidebar, command palette, content-search results, and the related empty states, with a consistent Plug fallback for plugin pages.
What I checked:
- Re-read the full diff and the new
admin-navigation-icons.tsmodule. - Verified each touched component (
Sidebar,AdminCommandPalette,Dashboard,CommentInbox,Redirects,MenuList,SectionPickerModal,PluginManager,MarketplaceBrowse,RegistryBrowse,bylines) correctly imports from the shared vocabulary. - Confirmed
resolveNavIconis used in both the sidebar and the palette, and that the lazy icon cache still provides a stable component identity for uncommon Phosphor names. - Checked that no stale
PuzzlePieceimports or fallbacks remain outside the new vocabulary module, and that the updated/added tests cover collection overrides, taxonomy tags vs. categories, plugin-page resolution, and thePlugfallback. - Reviewed the changeset against AGENTS.md guidance (present-tense, user-facing, patch bump for
@emdash-cms/admin).
No regressions, logic bugs, AGENTS.md convention violations, or security/data issues were introduced. This is a re-review with no outstanding findings from the previous approved review; everything remains in good shape.
What does this PR do?
Fixes duplicated and ambiguous admin navigation icons by centralizing the first-party Phosphor icon vocabulary and reusing it across the sidebar, command palette, content search results, and related empty states.
Pages and posts receive distinct Browser and Newspaper overrides, while custom collections retain Files. The update also distinguishes comments, menus, redirects, widgets, sections, taxonomies, bylines, Byline Schema, plugins, and imports. Plugin-declared page icons now resolve consistently in both navigation surfaces with a safe Plug fallback.
Related issue/discussion: N/A — maintainer-directed visual consistency correction.
Type of change
Checklist
AI-generated code disclosure
Screenshots / test output
Try this PR
Open a fresh playground →
A full working EmDash site, deployed from this branch. Each visit gets its own session-scoped sandbox: no login needed and no shared state. Try the admin, edit content, hit the public site.
Tracks
admin-navigation-icons. Updated automatically when the playground redeploys.