Repository navigation
feat(studio): Restore package original moves onto the override mark, in a popover that names what it overrides and its version - #29842
Merged
Conversation
The title keeps its first twelve characters readable; on a narrower row the identity chips and the item tools fold into the item's more menu (the pillar's own, or one the header draws), so the menu trigger stays inside the column. The pillar rails draw the customization mark as its glyph alone. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
… actions icon-only Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
…ools' sheets Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
…r in the item's folded menu At the live job's 1280 px window with the Interfaces inspector open, the item header folds its identity chips into the item's more menu so the item's name stays readable, so the published pair's override chip is looked for in the row first, then in the menu's chips entry, and the menu is closed again before the next step. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUYXmZ6DQBWc6piyyF
…s, its version and Restore package original Restore leaves the item's more menu (Interfaces, flow, bundle editor) for the mark that names the customization; it still asks through the existing confirmation dialog. Folded into the header's menu, the mark is pressed by the keys through the folded entry. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1
…abel and one-door pins Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1
…-rvb9lz # Conflicts: # ui/packages/app-shell/src/views/studio-design/StudioItemHeader.titleRowFold-12897.test.tsx # ui/packages/app-shell/src/views/studio-design/StudioItemHeader.tsx
…estore closes the folded menu Folded into the header's more menu, the popover is a child of a menu item in React's tree: a pointer moving over it focused the item and closed it, and after Restore the menu stayed open behind the confirmation. Events inside the popover now stop at it, and Restore closes the folded menu before it asks. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1
…loses the menu Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1
Contributor
Author
|
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y 席位核对 · ACCEPT · 2026-11-03T07:22ZHead-sha:
Generated by Claude Code |
github-merge-queue
Bot
removed this pull request from the merge queue due to a conflict with the base branch
Nov 3, 2026
…-rvb9lz # Conflicts: # ui/packages/app-shell/src/views/studio-design/StudioItemHeader.titleRowFold-12897.test.tsx
…s note line Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1
Contributor
Author
|
domain:ui#4 · zhuangjianguo · session_01QsR2jR7ZFkpqmm4U8S1f9y 席位核对 · ACCEPT (re-armed after a merge of main) · 2026-11-03T09:00ZThis replaces ACCEPT 6597850058 at Head-sha:
Generated by Claude Code |
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.
Requested by Steedos · project thread
Fixes #29692
Clause-②: no
Metadata-protocol: none
维护者速读
package=配对包),无元数据、接口和 i18n 键变化。回滚即 revert 本 PR。StudioCustomizeControls.tsx(StudioOverrideChip气泡)、StudioItemHeader.tsx(折进 ⋯ 菜单后,恢复时关掉菜单)、StudioDesignSurface.tsx/StudioBundleItemEditor.tsx(去掉菜单项、接上onRestore)。What changes
StudioOverrideChip("Overrides HotCRM") is now a popover trigger. The popover (studio-override-popover) names the package it overrides and the version it was taken from (the existingoverridesTitlesentence, which was the chip's tooltip), and holds Restore package original (studio-override-restore). Restore goes through the existing confirmation dialog, and confirming sends the same two deletes at the pair as before: its draft, then its row. WithoutonRestore(a declaration served while the item is not in the pair) the popover shows the facts only.StudioBundleItemEditor). Customize keeps the header's primary slot; Restore is never a header button of its own.studio-restore-original) come out of the Interfaces item menu,FlowItemMoreMenu(itsrestoreprop is gone) and the bundle editor's menu. Each host'sinPairisdeclaration !== null, so everywhere Restore was reachable the mark is drawn and carries it.studio-item-header-folded-chipsentry. Its popover is a child of that menu item in React's tree, so pointer, click and key events inside it stop at the popover. Otherwise a pointer moving over the popover focused the menu item and closed the popover. Restore there closes the ⋯ menu before the confirmation opens (useStudioFoldedMenuClose), so no hidden menu is left behind the dialog to take the next Enter.content/docs/build-without-code.mdx: the sentence that sent the reader to the ⋯ menu now points at the mark.Tests
StudioCustomizeControls.customize-28562.test.tsx: the chip's facts are on the popover; Restore asks once and closes; a disabled Restore asks nothing; withoutonRestorethe popover is facts only.StudioItemHeader.titleRowFold-12897.test.tsx, new describe for the folded mark: one press opens one popover and the menu stays, a second press closes it; Enter on the folded entry opens it; Restore asks once and closes both the popover and the menu; a pointer moving and pressing inside the popover neither focuses the entry nor closes the popover.InterfacesPillar.customize-28562.test.tsx,AutomationsPillar.customizeFlow-28570.test.tsx,StudioBundleItemEditor.customize-28569.test.tsx: Restore is driven from the mark and the existingresetsassertions (same two requests at the pair) still hold; the ⋯ menus carry nostudio-restore-original; the dialog's item label equals the rail row's label (Interfaces "Pipeline", flow "Notify owner").ui/e2e/live/studio-customize-journey.spec.ts: the Restore step presses the mark in the row, or in the folded ⋯ entry when the row has folded, then the popover's Restore.Readings
itemTools-28239andoneSurface-28572, 7 files, 112 tests passed.type-check(src and tests) exit 0;type-check:e2eexit 0; eslint on the touched files 0 errors.pnpm --dir ui exec vitest run scripts/: 170 files passed, 2 skipped.check:type-check-debtexit 0.check-i18n-en-drift: no en value changed.dispatch-gates --commands): 67 derived, 67 run, all exit 0;--ranreconciles 0 NOT-MEASURED.check-sdui-manifestexit 0.mainright before opening (14 incoming commits, none touching these files; no parallel fix found).Acceptance notes
--timeout=180000(41.6 s); under the default 30 s test timeout it runs out in the later "Add region__c" step on a Vite dev Console, after Restore has passed.Verification
Live on the showcase app (
objectstack dev --seed-admin --fresh) with the Console on Vite, Chromium, right panel open, overrides drafted in the pair for a view, a dashboard, a flow and an object's list view. For each, by mouse and by keyboard, at 1024 px (folded) and 1440 px:Screenshots (en and zh) are with the seat.
🤖 Generated with Claude Code
https://claude.ai/code/session_01QsR2jUNJci3hxdpiN6RFQ1