Rebar UI

1.0

synthetic

ImagePicker

A grid of selectable image tiles with an optional tag filter. Also the app-icon picker. Tiles blur up through Image.

Cover pickerSingle select; the chosen tile saves for a moment, then settles
Loading
Empty
No images for “Nature”
Error
Four columns

In context

Cover sheet and app iconsA sheet over a discussion; the icon variant on its own screen
Confession to a priest

Why do we confess our sins to a priest and not straight to God?

Because Jesus gave the Apostles that ministry: ΓÇ£Whose sins you shall forgive, they are forgiven themΓÇ¥ (John 20:23). The priest acts in the person of Christ, and you are also free to speak to God directly at any time.

Choose a cover image
App icon

Choose how Athic looks on your home screen.

Props

PropTypeRequiredDefault
itemsImagePickerItem[]Yes—
selectedIdstring | null | undefinedNo—
defaultSelectedIdstring | null | undefinedNonull
onSelect((item: ImagePickerItem) => void) | undefinedNo—
busyIdstring | null | undefinedNonull
columns3 | 4 | "auto" | undefinedNo3
appearance"default" | "classic" | undefinedNo—
tagsstring[] | undefinedNo—
activeTagstring | null | undefinedNo—
defaultActiveTagstring | null | undefinedNonull
onTagChange((tag: string | null) => void) | undefinedNo—
allLabelstring | null | undefinedNoAll
shape"square" | "icon" | undefinedNosquare
loadingboolean | undefinedNo—
multiTagboolean | undefinedNofalse
activeTagsstring[] | undefinedNo—
defaultActiveTagsstring[] | undefinedNo[]
onActiveTagsChange((tags: string[]) => void) | undefinedNo—
tagMatch"all" | "any" | undefinedNoall
disabledboolean | undefinedNofalse
errorReactNodeNo—
onRetry(() => void) | undefinedNo—
emptyReactNodeNo—

Accessibility

Each tile is a real <button> named by the image's alt with aria-pressed for the selection, 44px minimum, with a visible focus ring. Tag chips are pressed-state buttons in a labelled group. The error block is role="alert"; loading sets aria-busy on the grid. A busy tile sets aria-busy, and every other tile is aria-disabled and ignores presses.

data-rebar-* attributes

data-rebar-component="image-picker", data-rebar-shape="square" | "icon", data-rebar-columns. Parts: tags, chip, grid, tile (with data-rebar-state="selected" | "busy"), check, busy, error, empty.

Migrating to Ant Design

No direct equivalent. Use Radio.Group with optionType="button" over Image previews, or Upload in picture-card mode when choosing a file is the point.

Multi-tag filter and disabled

Pass multiTag and the chips toggle independently; the grid shows items carrying every active tag (tagMatch="any" for any of them), "All" clears them (activeTags/onActiveTagsChange to control). disabled on the picker, or disabled: true on an ImagePickerItem, makes tiles ignore presses (aria-disabled). Each tile is named by its item alt.

<ImagePicker items={items} tags={["Scripture", "Saints"]} multiTag onSelect={pick} />

appearance="classic", columns="auto"

appearance="classic" draws 10px-radius square tiles with a 3px border (bright primary when selected or busy), flat chips with a corner tick, and a plain empty message; columns="auto" fits tiles at least --rebar-image-picker-tile-min wide; allLabel={null} drops the All chip. Tokens: --rebar-image-picker-gap / -max-height / -tile-radius / -tile-bg, --rebar-classic-chip-*.