diff --git a/apps/desktop/src/app/shell/model-edit-submenu.tsx b/apps/desktop/src/app/shell/model-edit-submenu.tsx index 53c419937ffc..417edd4d222a 100644 --- a/apps/desktop/src/app/shell/model-edit-submenu.tsx +++ b/apps/desktop/src/app/shell/model-edit-submenu.tsx @@ -96,7 +96,20 @@ interface ModelEditSubmenuProps { requestGateway: (method: string, params?: Record) => Promise } -export function ModelEditSubmenu({ +export function ModelEditSubmenu(props: ModelEditSubmenuProps) { + // The panel mounts one of these per model row; only the hovered row's + // submenu is ever open. Keep this wrapper hook-free and render the body as + // a CHILD of SubContent so Radix's Presence gate leaves it unrendered until + // the sub actually opens — eagerly running the body's hooks/JSX for every + // row made opening the menu itself lag on large catalogs. + return ( + + + + ) +} + +function ModelEditSubmenuBody({ effort, fastControl, isActive, @@ -213,50 +226,46 @@ export function ModelEditSubmenu({ const hasFast = fastControl.kind !== 'none' const fastOn = fastControl.kind === 'none' ? false : fastControl.on - return ( - - {!hasFast && !reasoning ? ( -
{copy.noOptions}
- ) : ( + return !hasFast && !reasoning ? ( +
{copy.noOptions}
+ ) : ( + <> + {copy.options} + {reasoning ? ( + event.preventDefault()}> + {copy.thinking} + void patchReasoning(checked ? effortValue || defaultEffort : 'none')} + size="xs" + /> + + ) : null} + {hasFast ? ( + event.preventDefault()}> + {copy.fast} + + + ) : null} + {reasoning ? ( <> - {copy.options} - {reasoning ? ( - event.preventDefault()}> - {copy.thinking} - void patchReasoning(checked ? effortValue || defaultEffort : 'none')} - size="xs" - /> - - ) : null} - {hasFast ? ( - event.preventDefault()}> - {copy.fast} - - - ) : null} - {reasoning ? ( - <> - - {copy.effort} - void patchReasoning(value)} value={effortValue}> - {REASONING_EFFORTS.map(value => ( - event.preventDefault()} - value={value} - > - {copy[value]} - - ))} - - - ) : null} + + {copy.effort} + void patchReasoning(value)} value={effortValue}> + {REASONING_EFFORTS.map(value => ( + event.preventDefault()} + value={value} + > + {copy[value]} + + ))} + - )} -
+ ) : null} + ) }