import { type ReactNode } from "react"; import { type ViewStyle } from "react-native"; import { type IconName } from "../../atoms/icon/icon.js"; import type { Badge as WebBadge } from "../../atoms/badge/badge.js"; import { type HoverMotion } from "../../style/hover.js"; /** One nav row: a label, an optional leading icon glyph, an optional count. */ export interface SidebarItem { /** * Stable identity for this row, used as its React key so inserting or * reordering rows reconciles by item rather than by position. Falls back to * the row label when omitted, so supply an `id` when two rows can share a * label. Also matched by a string `active` (id first, then label). */ id?: string | number; /** Row label (e.g. "Dashboard"). */ label: string; /** Reference harness only: hold the row hover wash. */ testOnly_hovered?: boolean; /** Leading Canvas glyph rendered before the label, named from the kit icon set * (e.g. `"home"`, `"users"`, `"settings"`). Rendered through the `Icon` atom, * tinted per active state. */ icon?: IconName; /** Trailing count rendered as a (e.g. "12"). */ badge?: string; /** Render `badge` in the Badge atom's error status tone (a red status pill with a * leading dot) instead of the default secondary metadata pill, for a count that * reports a problem rather than a volume (e.g. account lockouts). Ignored when the * row carries no `badge`. */ badgeError?: boolean; /** Render `badge` as the accent's solid tag (the 18 px pill under a 10 px label, the * accent fill and its ink) for a row that announces something new rather than a * count. `badgeError` wins when both are set. Ignored when the row carries no `badge`. */ badgeAccent?: boolean; /** Trailing quiet metadata in the mono face, after any `badge`: an ordinal ("04"), a * shortcut or a short status, set as text rather than a pill. */ meta?: string; /** Under the Sidebar's `markers`, a resting row that belongs to the reader's current * place draws the field-hairline marker dot (the active row draws the accent's). */ marked?: boolean; /** Inert navigation target carried as data (e.g. "/settings"). The Sidebar never * routes; a consumer reads it in `onSelect` (e.g. `router.push(item.href)`). */ href?: string; } /** A titled group of nav rows. */ export interface SidebarSection { /** * Stable identity for this section, used as its React key so inserting or * reordering sections reconciles by section rather than by position. Falls * back to the section title when omitted. Also the section's accordion key. */ id?: string | number; /** Optional muted heading shown above the group. */ title?: string; /** A count shown at the end of the heading line (e.g. how many rows the group holds). */ count?: string | number; /** The reader's current place (the page this group indexes): its heading takes the * accent's text ink, its resting rows the stronger foreground ink where the skin has * one (the web), and under `markers` every row draws the hairline marker. */ current?: boolean; /** Rows in this group. */ items: SidebarItem[]; /** Leading Canvas glyph for the section, shown as its single button in the * collapsed mini-rail. */ icon?: IconName; /** Render this section as a collapsible accordion group (a pressable header with a * rotating chevron over its rows). Omit for a pinned, always-open section (the * default, and the pre-collapse behavior). */ collapsible?: boolean; /** Initial open state for an uncontrolled `collapsible` section (ignored when * pinned or when `openSections` is controlled; the section owning the active row * auto-opens regardless). */ defaultOpen?: boolean; } /** A row's trailing count and metadata. Three Badge looks: the default secondary * metadata pill, `badgeError`'s error status pill (`status` is Badge's family switch, * `error` its tone within that family) for a count that reports a problem, and * `badgeAccent`'s solid accent tag; then `meta`, quiet mono text in the third ink * rather than a pill. Lives here once * so the rail row and the narrow drill-down leaf cannot drift apart. `Badge` is the * platform's build, a Sidebar part. */ export declare function SidebarItemBadge({ item, Badge, small }: { item: SidebarItem; Badge: typeof WebBadge; small?: boolean; }): import("react").JSX.Element | null; /** A skin's hover wash, resolved for the current surface: its timing, the colour it paints, Reduce Motion. */ export interface SidebarRowWash { motion: HoverMotion; color: string; reduced: boolean; } /** * The wrapper every nav row sits in, in the rail and the drill-down alike. It is the * RippleClip that rounds a bounded Android ripple to the row's corners (a passthrough * elsewhere), and it stretches to the column like the row inside it. On a skin with a * hover wash it is also the row's hover target and paints the wash in the row's shape * beneath the row, so the row's own pressed and active fills still switch at once. */ export declare function SidebarRowFrame({ shape, wash, children, testOnly_hovered }: { shape: ViewStyle; wash: SidebarRowWash | null; children: ReactNode; testOnly_hovered?: boolean; }): import("react").JSX.Element; //# sourceMappingURL=sidebar.item.d.ts.map