import { type ViewStyle, type TextStyle } from "react-native"; import { type ColorTokens, type TouchTargetSkin } from "../../style/index.js"; import { type IconName } from "../../atoms/icon/icon.js"; export interface RowMenuItem { label: string; /** Optional leading Canvas glyph, named from the kit icon set (e.g. `"pencil"`, * `"copy"`, `"trash"`). Rendered through the `Icon` atom, tinted to match the * row (destructive rows go red). */ icon?: IconName; /** Red-tinted row for destructive actions (e.g. Delete). */ destructive?: boolean; /** Draw a hairline separator above this row to start a new group. */ separatorBefore?: boolean; /** A keyboard shortcut hint at the row's end, in the mono face (e.g. "⌘E"). */ shortcut?: string; /** The row opens a submenu: a trailing chevron. */ submenu?: boolean; /** A short soft-accent tag at the row's end (e.g. "3 new"). */ badge?: string; /** Quiet trailing metadata in the mono face (e.g. a count). */ meta?: string; /** Make the row inert: it does not fire `onSelect`, does not close the menu, is announced as * disabled, and shows the platform's disabled look (the web's muted ink, a dim on iOS and * Android), for an action that is unavailable in the current context, e.g. "Clear column" * on an already-empty column. */ disabled?: boolean; } export interface RowMenuSkin extends TouchTargetSkin { /** The relative anchor that positions the card (the shell adds the hug sizing). It * starts its children, so the trigger keeps its own size even where a parent that is * not a kit layout container stretches the anchor (a table cell, a plain View). */ anchor: ViewStyle; /** The ⋯ icon-button surface (square, centered, platform radius). */ trigger: ViewStyle; /** The ⋯ (moreHorizontal) Canvas trigger glyph size (px), per platform. */ triggerIconSize: number; /** The ⋯ glyph's ink. */ triggerIconColor: (t: ColorTokens) => string; /** The instant look of the trigger under the pointer (the web's wash); null where there is none. */ triggerHover: ((t: ColorTokens) => ViewStyle) | null; /** The fill applied to the trigger on press (web/iOS tint via this; Android ripples). */ triggerPressed: (t: ColorTokens) => ViewStyle; /** The trigger's resting edge colour, for a trigger with a border; none when left out. */ triggerEdge?: (t: ColorTokens) => ViewStyle; /** The trigger's look while its menu is open; null where it keeps its resting look. */ triggerOpen?: ((t: ColorTokens) => ViewStyle) | null; /** A resting row's leading glyph ink; the row's own ink (foreground) when left out. */ iconColor?: (t: ColorTokens) => string; /** The floating menu card surface (shape, fill, border, shadow, radius). The * shell adds the measured minWidth and positions the card via AnchoredOverlay. */ menuCard: (t: ColorTokens) => ViewStyle; /** The menu's min-width floor; the card never renders narrower than this. */ menuMinWidth: number; /** Standoff between the trigger and the menu card, in px. */ menuGap: number; /** The muted section heading above the rows. */ menuLabel: (t: ColorTokens) => TextStyle; /** A single action/link row layout. */ itemRow: ViewStyle; /** The fill applied to a row on press (web/iOS tint via this; Android ripples). */ itemPressed: (t: ColorTokens) => ViewStyle; /** The instant look of a resting row under the pointer (the web's wash); null where there is none. */ itemHover: ((t: ColorTokens) => ViewStyle) | null; /** The space between rows. */ rowGap: number; /** A disabled row: the dim it takes, and whether its label and icon go to the muted ink instead. */ disabledRow: { opacity: number; muted: boolean; }; /** The hairline separator above a row that sets `separatorBefore`. Always rendered * when an item requests it, on every platform (both HIG and M3 menus use group dividers). */ separator: (t: ColorTokens) => ViewStyle; /** The row label text size. */ rowTextSize: TextStyle; /** The leading Canvas icon size (px), sized to sit with the label per platform. */ iconSize: number; /** The per-row text color (destructive red, link foreground, action popover fg). */ rowTextColor: (item: RowMenuItem, links: boolean, t: ColorTokens, dark: boolean) => TextStyle; /** A row's trailing `shortcut` hint (a destructive row's takes its ink, dimmed). */ shortcut: (t: ColorTokens, destructive: boolean) => TextStyle; /** A row's trailing `meta`. */ meta: (t: ColorTokens) => TextStyle; /** The trailing chevron (a `submenu` row's, every `inline links` row's): its size in a menu row and in a link row, and its ink. */ submenuSize: number; linkChevronSize: number; chevronColor: (t: ColorTokens) => string; /** The `inline links` grouped list: its frame, a row, the rule above every row after the first, the glyph, the label. */ linkList: (t: ColorTokens) => ViewStyle; linkRow: ViewStyle; linkDivider: (t: ColorTokens) => ViewStyle; linkIconSize: number; linkIconColor: (t: ColorTokens) => string; linkLabel: (t: ColorTokens) => TextStyle; /** iOS/web dim the trigger on press; Android ripples instead (null). */ triggerPressedOpacity: number | null; /** Android ripple over the trigger and rows; null on iOS/web. */ ripple: ((t: ColorTokens) => { color: string; borderless: boolean; }) | null; } export declare const anchorLifted: ViewStyle; export declare const webSkin: RowMenuSkin; export declare const iosSkin: RowMenuSkin; export declare const androidSkin: RowMenuSkin; //# sourceMappingURL=row-menu.styles.d.ts.map