import type { CategoryKey, ControlConfig, ControlsConfig, IconName, MenuItemConfig, ResponsiveMode } from "./types"; /** Icon + label for a single category (or the "all controls" fallback) */ type CategoryMeta = Readonly<{ icon: IconName; label: string; }>; /** Metadata for every category, plus the "all controls" collapsed-mode entry */ export type CategoryMetadata = Readonly & { /** Metadata for the single collapsed-mode menu button */ allControls: CategoryMeta; }>; /** * Converts a top-level `ControlConfig` into one or more `MenuItemConfig` items. * * Most control types pass through unchanged (they're already valid menu items). * One special case: * - **Menu** → flattens its items into the parent (menus cannot nest) * * Items keep whatever `section` their author declared. The category label is * applied later, once per block, by {@link applyFallbackSectionAsHeader}. */ export declare const controlToMenuItems: (control: ControlConfig) => ReadonlyArray; /** * Pure config transform that restructures `ControlsConfig` based on how much * space is available. * * - `"full"` -- pass through unchanged * - `"categorized"` -- group controls within each category into a per-category * menu (only when >1 control in that category) * - `"collapsed"` -- merge all controls into a single menu, separator-delimited per * category. Items keep their own `section`; the category name only heads a block whose * leading items declare none (ADR 0027) * * This operates at the config level, before controls enter the middleware * rendering pipeline. Existing renderers handle the resulting menus with no * changes needed. */ export declare const collapseControls: (config: ControlsConfig, mode: ResponsiveMode, metadata: CategoryMetadata) => ControlsConfig; export {};