Repository navigation
feat(app-shell): the product mark stays in the app bar as the home button; the app menu gains Back to home, All apps and Settings (objectui#12605) - #12651
Conversation
…tton; the app menu gains Back to home, All apps and Settings (objectui#12605) Inside an app the product mark holds the sidebar trigger's slot in the top bar and links home; Cmd/Ctrl+Shift+H goes home from any app page and is listed in the shortcuts dialog; the app menu gains Back to home, All apps and Settings; below 640 px the app pill shows the glyph only. Four i18n keys are added in all ten locales. This is the net tree of PR #12650 rebuilt as one commit on current main, replacing that branch's history whose commits carried model-named trailers. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
…(objectui#12605) Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
…p-bar-home-mark-v2 Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Review: ACCEPT — objectui PR #12651 ·
|
Fixes #12605
Clause-②: no
Supersedes PR #12650: the same tree for every file it changed, rebuilt on current
mainas one clean commit (ba5461f18), because that branch's commits carried model-named co-author trailers that the squash merge would carry ontomain. Re-run on this head: the 22 AppHeader/AppSwitcher suites (191 tests) and the two i18n key-parity suites (48 tests),--maxWorkers=1, exit 0.Inside an app the product mark stays top-left as the home button, and the app pill's menu gains Back to home, All apps and Settings, per the maintainer-approved artboard (
AppBar.html).What changed
AppHeader.tsx): sidebar trigger, the product mark, a drawn/rule, the app pill, the PREVIEW chip. The mark is one component (ProductHomeMark) used on every surface, the home page, the organizations and Studio front doors and inside every app: a 32 px link holding a 24 px tile on--primarywith the stack glyph (or the deployment logo). Its accessible name islayout.appSwitcher.productHome({{product}} home/ 「{{product}} 首页」) fromgetProductName(); it links tohomePath(/homeunless the deployment declares a landing, the objectui#7256 rule the old logo already followed).h-7 w-7 shrink-0 mr-1,aria-hidden) before the mark; the mark does not jump when the viewer goes home.⌘⇧H/Ctrl+Shift+Hgoes home from any app page with a push (Back returns). It skips text inputs, textareas, selects, content-editable regions and ARIA textboxes, and events alreadydefaultPreventedor composing. The chord lives in the shortcut registry (chrome/advertisedShortcuts.ts,GO_HOME_SHORTCUT) and is advertised to the keyboard-shortcuts dialog under the same gate as the listener.AppSwitcher.tsx): Switch Application lists the installed apps with the current one checked and without Setup; a divider; Back to home (keycaps drawn from the same chord), All apps, Settings (the Setup app, shown only when the viewer's app list carries it; checked inside Setup); then Edit APP in Studio after a second divider, its gate untouched.titlenames the app (tooltip and accessible name). The pill was previously hidden belowsm.layout.appSwitcher.backToHome,layout.appSwitcher.settings,layout.appSwitcher.productHome,console.shortcuts.goHomein all ten locales; zh uses the card's words (返回首页, 系统设置, 首页).data-testidstays; new ones:app-bar-product-home,app-bar-home-separator,app-bar-trigger-slot,app-switcher-home,app-switcher-settings.Tests (head 0590733)
AppHeader.homeMark-12605.test.tsx(left-group order, name +/homelink, click lands home, pill drawn at every width, chord advertised as ⌘⇧H, ⌘ and Ctrl push/homeand Back returns, chord left to a text field, ⌘H alone does nothing, home page: same mark, no rule, no advertisement, trigger slot held),AppSwitcher.homeMenu-12605.test.tsx(menu order, Setup absent from the switch group, keycaps, Settings target and check, no Settings without Setup, sub-smclasses and title).--maxWorkers=1, repo root): all 80packages/app-shell/src/layoutsuites +src/chrome(36 + 58 files, 290 + 382 tests, exit 0),src/__tests__+console/home(43 files, 567 tests, exit 0),packages/i18n(83 files, 1321 tests, exit 0). After mergingmain: AppHeader/AppSwitcher suites + every app-shell test file the merge brought in (31 files, 264 tests, exit 0).switchApps = activeApps(Setup filter removed), landed viaablation-replace.mjs(anchor 1 to 0, blob 3f315e70 to 656696e8) and turned 3 of 7 menu tests red; restored withgit checkout HEAD --,git diff HEADempty, blob hash matches HEAD.@object-ui/i18nand@object-ui/app-shell: exit 0 (after rebuilding the four depsmainchanged: auth, components, fields, i18n).check:*listed in the dispatch),check-hand-rolled-comment-mask,check-changeset-fixed: all exit 0; i18n, control-bytes, unreferenced-sources, self-import, phantom-deps and changeset-fixed re-run on the merged head, exit 0.--no-inline-config --format json): 16 files, 0 errors, 20 warnings (allno-explicit-anyon pre-existing lines). The config enables no type-aware linting, so this diff cannot move any untouched file's verdict.packages/app-shellpackage (1442 test files; at--maxWorkers=1it exceeds the foreground cap), andapps/consolesuites.Acceptance notes
AppHeader.appIdentity-12201.test.tsxchanged: its item-4 cell pinned "no platform mark in app context", the ruling this card reverses. It now pins the mark before the pill; the "no crumb separator precedes the pill" cell is unchanged in substance.AppSwitcherreadsSETUP_APP_PACKAGE_ID/SETUP_APP_NAMEfromconsole/ConsoleShell(render-time use only), resolving Setup in the same order asresolveSetupAppPath.size-8) and fits.Changeset
.changeset/12605-app-bar-home-mark.md:@object-ui/app-shellpatch,@object-ui/i18npatch. No package export is added (GO_HOME_SHORTCUTis internal tochrome/advertisedShortcuts, not re-exported from the package index).Generated by Claude Code