feat(sidebar): inline label create, live sync, and kebab submenu parity (#706)

Portal-wrap DropdownMenuSubContent so the kebab Labels submenu renders outside
the clipped dropdown container, matching ContextMenuSubContent and fixing the
empty/broken kebab submenu.

Thread onLabelsChanged from LabelsSection through SettingsModal to
EditorLayout so label creates and deletes in Settings propagate to the
sidebar menus without a page refresh.

Add an inline "New label" form in both the kebab and context menu label
submenus that creates and assigns a label in one interaction, removing the
Settings round-trip from the label assignment flow.
This commit is contained in:
Anso
2026-04-20 09:57:20 -04:00
committed by GitHub
parent 5f2d67848c
commit 75370d8fce
9 changed files with 223 additions and 58 deletions
+3 -2
View File
@@ -63,9 +63,10 @@ interface SettingsModalProps {
isOpen: boolean;
onClose: () => void;
initialSection?: SectionId;
onLabelsChanged?: () => void;
}
export function SettingsModal({ isOpen, onClose, initialSection }: SettingsModalProps) {
export function SettingsModal({ isOpen, onClose, initialSection, onLabelsChanged }: SettingsModalProps) {
const { activeNode } = useNodes();
const { isAdmin } = useAuth();
const { license, isPaid } = useLicense();
@@ -302,7 +303,7 @@ export function SettingsModal({ isOpen, onClose, initialSection }: SettingsModal
case 'sso': return <SSOSection />;
case 'api-tokens': return <ApiTokensSection />;
case 'registries': return <RegistriesSection />;
case 'labels': return <LabelsSection />;
case 'labels': return <LabelsSection onLabelsChanged={onLabelsChanged} />;
case 'system':
return (
<SystemSection