فهرست منبع

Neo: conductor columns fill the page height; Tasks sidebar starts at the top (#5899)

* Neo: conductor columns fill the page height on short tabs

The conductor wrapper has a viewport min-height, but the tab content and the
panel group inside it didn't grow, so on a short or empty tab (persons-online)
the columns, and the column line between them, stopped at the content's
height (212px of 836px). Both are flex-auto now, as on wiki pages, so they
fill the wrapper. Long tabs keep their content height; /tasks-home keeps its
viewport-locked flex-1 path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Neo: Tasks side columns start at the top of the page

On viewport-locked /tasks-home the panel group (overflow: hidden) is the
scroll container of the sticky side columns, so their header-clearing
top: 64px offset was measured from the group and pushed the sidebar 64px
down. There the columns now stick at top 0 and fill the panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Andrey Yasko 4 روز پیش
والد
کامیت
34f0ae8efd

+ 8 - 3
neo/packages/app/ui/molecules/sections/conductor/index.web.js

@@ -43,6 +43,9 @@ const VIEWPORT_LOCK_CLASS = 'ns-viewport-lock'
 
 /** Stable fallback so `useLeftColumn` memos survive tabs without a left column. */
 const EMPTY_CONTENT = []
+// Side columns of a viewport-locked page (/tasks-home): the panel group is their scroll
+// container there, so they stick at its top and fill it instead of clearing the header.
+const LOCKED_COLUMN_STYLE = { top: 0, maxHeight: '100%' }
 
 /**
  * Conductor — web shell (native lives in `index.js`).
@@ -395,7 +398,7 @@ export function Conductor({
             setIndex={setIndex}
             menu={menu}
             routes={routes}
-            stickyColumnStyle={stickyColumnStyle}
+            stickyColumnStyle={isTasksHome ? LOCKED_COLUMN_STYLE : stickyColumnStyle}
         >
             {/* Menu blocks' links line up with the panel's own (LeftColumnContainer pulls those
                 out with -mx-1, so their icons align with the section title's). */}
@@ -406,7 +409,7 @@ export function Conductor({
     const rightColumn = hasRightColumn ? (
         <RightColumnContainer
             route={tabRoute}
-            stickyColumnStyle={stickyColumnStyle}
+            stickyColumnStyle={isTasksHome ? LOCKED_COLUMN_STYLE : stickyColumnStyle}
         />
     ) : null
 
@@ -427,7 +430,9 @@ export function Conductor({
                 : <PageHeaderOptions sub={headerComponent} mobileOnly />}
             {(isUseCurrentHeader || isDesktop) && headerComponent}
             <View
-                className={`ns--conductor-tab-content-- ${contentWidth} mx-auto ${tmplLayout == 'mixed' ? 'mt-12' : ''}${isTasksHome ? ' min-h-0 flex-1 h-full overflow-hidden' : ''}`}
+                // Grows to the wrapper's viewport min-height (flex-auto), so the columns and the
+                // column line reach the page bottom on a short or empty tab, as on wiki pages.
+                className={`ns--conductor-tab-content-- ${contentWidth} mx-auto ${tmplLayout == 'mixed' ? 'mt-12' : ''}${isTasksHome ? ' min-h-0 flex-1 h-full overflow-hidden' : ' flex-auto'}`}
             >
                 <TabSceneHeader
                     route={activeRoute}

+ 1 - 1
neo/packages/app/ui/molecules/sections/conductor/web-ui.js

@@ -448,7 +448,7 @@ export const TabSceneColumns = ({
                 }`}
 
             direction="horizontal"
-            className={fillViewport ? 'h-full min-h-0' : 'h-full'}
+            className={fillViewport ? 'h-full min-h-0' : 'h-full flex-auto'}
             // Default panel-group overflow:hidden creates a scrollport and breaks
             // window-scroll sticky. clip still contains resize overflow without that.
             // Viewport-locked pages need a real hidden overflow so the list, not