import * as react_jsx_runtime from 'react/jsx-runtime'; import * as React from 'react'; import { RadioGroupProps } from './radio-group.js'; import 'class-variance-authority/types'; import 'class-variance-authority'; import 'radix-ui'; import './label.js'; interface SelectionTileOption { value: T; label: string; /** Font Awesome icon class without prefix (e.g. `fa-table`); rendered with `fa-light`. Ignored when `leading` is set. */ icon?: string; /** Custom graphic (SVG, swatch, etc.) instead of `icon`. */ leading?: React.ReactNode; } /** Shared surface classes for icon+label tiles (Properties view type, Export format, etc.). * * `aspect-square` + horizontal padding keeps every tile a uniform square regardless of how * many tiles are in the row — without it, the last row of a `grid-cols-N` grid (e.g. 3 tiles * in a 4-col grid for the Properties view selector) renders the same width per cell but the * eye reads them as inconsistent when the row's empty trailing cell shifts visual rhythm. * Two-line labels (e.g. "List & details", "Tree & details") still fit because the icon * column is only ~18px and the square grows with the cell. */ declare function selectionTileClassNames(selected: boolean): string; /** Icon well size for compact + label-below (Properties view type, Export format). */ declare const SELECTION_TILE_COMPACT_ICON_SIZE = "2.5rem"; /** Fixed preview for caption-below + default density (Settings theme/contrast/text size). */ declare const SELECTION_TILE_BELOW_DEFAULT_PREVIEW_SIZE = "6rem"; /** Preview box only — label rendered below the graphic (Settings, Properties). */ declare function selectionTilePreviewClassNames(selected: boolean, density?: "default" | "compact", labelPlacement?: "inside" | "below"): string; interface SelectionTileGridProps { /** Section caption above the grid (e.g. “View type”). */ sectionLabel?: string; options: readonly SelectionTileOption[]; columns?: 2 | 3 | 4 | 5 | 6 | 7; value: T; onValueChange: (value: T) => void; /** `radio` — Form / RadioGroup; `button` — toggle buttons with aria-pressed. */ interaction: "radio" | "button"; /** Prefix for radio ids (`${idPrefix}-${value}`). */ idPrefix?: string; /** Forwarded to `RadioGroup` when `interaction="radio"` (sr-only inputs; affects focus ring / state tokens). */ itemVariant?: RadioGroupProps["itemVariant"]; itemSize?: RadioGroupProps["itemSize"]; itemMotion?: RadioGroupProps["itemMotion"]; className?: string; /** * `inside` — label in the bordered tile (default). `below` — label under the preview * (matches system settings: preview box + caption outside). */ labelPlacement?: "inside" | "below"; /** * `compact` — smaller preview wells (Properties sheet). `default` + `labelPlacement="below"` * uses fixed `size-24` previews (Settings appearance), not full-width squares. */ density?: "default" | "compact"; /** * Cap inline tiles (e.g. 4 primary view types); additional options move to a **More** menu * in the next grid slot. Ignored when `options.length` ≤ this count. */ inlineVisibleCount?: number; /** Caption under the overflow **More** trigger (default **More**). */ moreMenuLabel?: string; /** Optional class on overflow menu content (e.g. Properties sheet portal z-index). */ overflowMenuClassName?: string; /** * `grid` — responsive column grid (default). * `horizontalScroll` — single left-aligned row with horizontal scroll (e.g. question format). */ layout?: "grid" | "horizontalScroll"; } declare function SelectionTileGrid({ sectionLabel, options, columns, value, onValueChange, interaction, idPrefix, className, labelPlacement, density, itemVariant, itemSize, itemMotion, inlineVisibleCount, moreMenuLabel, overflowMenuClassName, layout, }: SelectionTileGridProps): react_jsx_runtime.JSX.Element; export { SELECTION_TILE_BELOW_DEFAULT_PREVIEW_SIZE, SELECTION_TILE_COMPACT_ICON_SIZE, SelectionTileGrid, type SelectionTileGridProps, type SelectionTileOption, selectionTileClassNames, selectionTilePreviewClassNames };