Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add tab-based navigation to designer left sidebar - #27

Merged
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector
Jan 14, 2026
Merged

Add tab-based navigation to designer left sidebar#27
huangyiirene merged 4 commits into
mainfrom
copilot/add-tabs-for-component-selector

Conversation

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

The designer's component tree and palette consumed excessive horizontal space (~336px) when displayed side-by-side. Users needed a more compact layout.

Changes

  • New LeftSidebar component: Unified left panel with tabs for Components/Tree switching
  • Refactored component headers: Removed duplicate headers from ComponentPalette and ComponentTree (now displayed in tab labels)
  • Simplified state management: Removed showComponentTree toggle and associated context state
  • Space optimization: Reduced left sidebar from ~336px to 288px (single panel width)

Implementation

// New LeftSidebar with tab navigation<divclassName="w-72"><divclassName="flex border-b"><buttononClick={()=>setActiveTab('palette')}>Components</button><buttononClick={()=>setActiveTab('tree')}>Tree</button></div><divclassName="flex-1">{activeTab==='palette' ? <ComponentPalette/> : <ComponentTree/>}</div></div>

Screenshots

Components tab:
Components

Tree tab:
Tree

All existing functionality (drag-drop, tree navigation, keyboard shortcuts) preserved.

Original prompt

设计器的组件树和组件选择器可以用选项卡来区别,否则太占空间了


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

CopilotAIand others added 2 commits January 14, 2026 12:34
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
CopilotAI changed the title [WIP] Add tabs to differentiate component tree and selectorAdd tab-based navigation to designer left sidebarJan 14, 2026
@huangyiirene
huangyiirene requested review from Copilot and removed request for huangyiireneJanuary 14, 2026 12:40

CopilotAI 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.

Pull request overview

This PR refactors the designer's left sidebar to use a tab-based interface, consolidating the component palette and component tree into a single panel to save horizontal space.

Changes:

  • Introduced a new LeftSidebar component with tab navigation between Components and Tree views
  • Removed the component tree toggle button from the Toolbar
  • Cleaned up the DesignerContext by removing showComponentTree state management

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.

Show a summary per file
FileDescription
packages/designer/src/index.tsExports the new LeftSidebar component
packages/designer/src/context/DesignerContext.tsxRemoves showComponentTree state and related context values
packages/designer/src/components/Toolbar.tsxRemoves the component tree toggle button and its associated imports
packages/designer/src/components/LeftSidebar.tsxAdds new tab-based sidebar component with Components/Tree switching
packages/designer/src/components/Designer.tsxIntegrates the new LeftSidebar component, removing conditional tree rendering
packages/designer/src/components/ComponentTree.tsxRemoves the component header section (now shown in tab label)
packages/designer/src/components/ComponentPalette.tsxRemoves the component header section and adjusts border styling

const [activeTab, setActiveTab] = useState<TabType>('palette');

return (
<div className={cn("flex flex-col h-full bg-white border-r w-72", className)}>

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The component applies both w-72 and a border-r to the root div, but line 47 removes the border with border-r-0. This creates conflicting border declarations. Consider removing border-r from line 17 since the parent in Designer.tsx already applies shadow styling and the explicit border-r-0 override suggests the border shouldn't be here.

Suggested change
<divclassName={cn("flex flex-col h-full bg-white border-r w-72",className)}>
<divclassName={cn("flex flex-col h-full bg-white w-72",className)}>

Copilot uses AI. Check for mistakes.
</div>

{/* Tab Content */}
<div className="flex-1 overflow-hidden border-r-0">

CopilotAIJan 14, 2026

Copy link

Choose a reason for hiding this comment

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

The border-r-0 class is unnecessary here since there's no border-right defined on this element or its parent content area. This appears to be a defensive override that adds no value. Remove it for cleaner styling.

Suggested change
<divclassName="flex-1 overflow-hidden border-r-0">
<divclassName="flex-1 overflow-hidden">

Copilot uses AI. Check for mistakes.
@huangyiirene

Copy link
Copy Markdown
Collaborator

@copilot 帮我修改

Co-authored-by: huangyiirene <7665279+huangyiirene@users.noreply.github.com>
@hotlong

Copy link
Copy Markdown
Contributor

@copilot 继续

@github-actions

Copy link
Copy Markdown
Contributor

✅ All checks passed!

  • ✅ Type check passed
  • ✅ Tests passed
  • ✅ Lint check completed

CopilotAI commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot 继续

已完成代码审查反馈的修复。移除了冲突的 border 类声明,使样式更加清晰。所有功能正常工作。

Changes made in commit c0de3e4:

  • Removed border-r from line 17 (LeftSidebar root div)
  • Removed unnecessary border-r-0 from line 47 (tab content container)

Components Tab:
Components Tab

Tree Tab:
Tree Tab

Sign up for freeto 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.

4 participants

@huangyiirene@hotlong