import { type ViewStyle, type TextStyle } from "react-native"; import { type ColorTokens } from "../../style/index.js"; export type Density = "compact" | "regular" | "comfortable"; export interface DataTableSkin { /** The outer wrap (clips the rounded corners). */ wrap: ViewStyle; /** The `bordered` rounded outline around the whole table. */ borderedOutline: (t: ColorTokens) => ViewStyle; /** The header band (a flex row on the muted surface). */ headerRow: (t: ColorTokens) => ViewStyle; /** Header vertical padding per density (horizontal padding lives on the cell). */ headerPad: Record; /** * A header column label — TYPE ONLY (size/weight/case/tracking/color). The * shell owns the header cell BOX (the equal-width flex share, the horizontal * padding, the label+sort-icon row), so the label can sit beside a sort * indicator without each skin re-declaring the layout. */ headerCell: (t: ColorTokens) => TextStyle; /** Size (px) of the sort-direction indicator icon beside a sortable header label. */ sortIconSize: number; /** * Muted caption type: the footer's "N selected" count and the built-in * `emptyMessage` text. */ captionText: (t: ColorTokens) => TextStyle; /** The leading checkbox column (narrow, fixed width). */ selectCol: ViewStyle; /** The selection cell in a data row (the narrow column plus row padding). */ selectCell: ViewStyle; /** A data row (flex row, vertically centered, with a hairline beneath it). */ dataRow: (t: ColorTokens) => ViewStyle; /** The striped tint on alternating (odd-index) rows. */ stripeTint: (t: ColorTokens) => ViewStyle; /** The pressed tint for a pressable row (iOS/web tint via this; Android ripples). */ pressTint: (t: ColorTokens) => ViewStyle; /** Cell vertical/horizontal padding per density. */ cellPad: Record; /** A content cell (equal-width column box; padding added per density). */ dataCell: ViewStyle; /** A data cell's text (the platform's body type on the foreground color). */ cellText: (t: ColorTokens) => TextStyle; /** * An inset row separator hairline (iOS lists inset the separator to the content * leading edge). When set, the shell renders it as an absolutely-positioned * bottom hairline inside each row and the `dataRow` carries no borderBottom; * null keeps the full-bleed borderBottom on `dataRow` (web/Android). */ separator: ((t: ColorTokens) => ViewStyle) | null; /** * Fixed width of the trailing row-actions column (`onRowEdit`/`onRowDelete`): * two icon buttons at the platform touch-target size, plus the cell padding. */ actionsColWidth: number; /** * One icon action button (pencil / bin / save / cancel): a square box at the * platform touch-target size (web 28, iOS 44pt, Android 48dp), centered. */ actionButton: ViewStyle; /** Size (px) of the glyphs inside the trailing action buttons. */ actionIconSize: number; /** * The inline cell editor (`inlineEdit` / pencil-opened row editing): the * platform's cell type inside a primary-ringed field on the background fill. */ editInput: (t: ColorTokens) => TextStyle; /** The wash over a row while it is in pencil-opened edit mode. */ editTint: (t: ColorTokens) => ViewStyle; /** * Collapse a multicolumn table to its PRIMARY (first) column below the compact * (`sm`) width, matching SwiftUI Table's compact-width behavior on iPhone. iOS * only; web/Android render every column at every width. */ collapsesToPrimaryColumn?: boolean; /** * Minimum height for a pressable row so the tap target clears the platform * minimum (iOS 44pt / M3 48dp), applied only when `onRowPress` is set. Web omits * it (no touch-target requirement on the pointer web). */ pressableMinHeight?: number; /** Android ripple over a pressable row; null on iOS/web. */ ripple: ((t: ColorTokens) => { color: string; borderless: boolean; }) | null; } export declare const webSkin: DataTableSkin; export declare const iosSkin: DataTableSkin; export declare const androidSkin: DataTableSkin; //# sourceMappingURL=data-table.styles.d.ts.map