Package-level declarations

Functions

Link copied to clipboard
fun TileSchemaBuilderScope.AdaptiveVisibility(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, widthVisibility: AdaptiveVisibilityTileSchema.WidthVisibility = widthVisibleUntilExtraLarge(), heightVisibility: AdaptiveVisibilityTileSchema.HeightVisibility = heightVisibleUntilExpanded(), tiles: TileSchemaBuilderScope.() -> Unit)

Conditionally renders tiles based on the current window size class. Children are composed only when both widthVisibility and heightVisibility are satisfied — otherwise nothing is emitted (the children are not composed, not merely hidden). VisibleFrom(breakpoint) shows from the rank above the given breakpoint upwards (exclusive); VisibleUntil(breakpoint) shows at or below it (inclusive). Width and height are evaluated independently, so one may be satisfied while the other is not — in that case the children still stay hidden. When both conditions hold, the children are hosted in a Box carrying style and visibility. Dispatches onDisplay once when composed regardless of the breakpoints, and dispatches the width/height satisfied/not-satisfied triggers on first composition and on every condition change.

Link copied to clipboard
fun TileSchemaBuilderScope.Box(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, alignment: AlignmentSchema.TwoDimensional = alignToTopStart(), tiles: TileSchemaBuilderScope.() -> Unit = {})

Renders a Compose Box that stacks tiles on top of each other in declaration order (later children paint above earlier ones), all positioned by alignment. Never scrollable, and publishes no scope CompositionLocal, so children cannot use column/row scope modifiers such as weight. Dispatches onDisplay once when composed; onClick/onLongPress are wired only when the matching event is declared on this tile — with neither declared, the box is not made interactive.

Link copied to clipboard
fun TileSchemaBuilderScope.Card(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, kind: CardTileSchema.Kind = defaultCard(), tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Material 3 card hosting tiles stacked vertically in a column scope. kind picks the visual style — default, elevated or outlined. Children can use column scope modifiers such as weight. Dispatches onDisplay once when composed and onClick when the card is tapped.

Link copied to clipboard
fun TileSchemaBuilderScope.Carousel(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, type: CarouselTileSchema.CarouselTypeSchema, itemSpacing: Int = 0, contentPadding: Int = 0, userScrollEnabled: Boolean = true, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Material 3 horizontal carousel over tiles, one child per item. type picks the layout — multiBrowse sizes items around a preferred width with shrunken edge items, or uncontained uses a fixed item width. itemSpacing and contentPadding (applied horizontally only) are in dp, and userScrollEnabled toggles manual swiping. Listens for scroll-to-begin/end and next/previous-item broadcasts addressed to its id — it shares the pager's broadcast, so the same commands work on both tile types. Requesting the next item past the last one (or the previous one before the first) is a no-op. Children are rendered by index with no scope CompositionLocal. Dispatches onDisplay once when composed, and onPageChanged whenever the current item changes (skipping the initial item) — once per matching direction (any / start / end / that exact index).

Link copied to clipboard
fun TileSchemaBuilderScope.Column(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, arrangement: ArrangementSchema.Vertical = arrangeVerticallyToTop(), alignment: AlignmentSchema.Horizontal = alignHorizontallyToStart(), scrollable: Boolean = false, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose Column stacking tiles vertically, spaced by arrangement and aligned horizontally by alignment. When scrollable is true the column becomes vertically scrollable — every child is composed eagerly, so prefer LazyColumn for long lists. Publishes its column scope to children so they can use scope modifiers such as weight. When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. Listens for scroll-to-top/bottom/offset broadcasts addressed to its id. Dispatches onDisplay once when composed, onClick/onLongPress only when declared, and onScrolled on scroll direction changes while scrollable is true.

Link copied to clipboard

Default card variant — flat, no shadow or border.

Link copied to clipboard

Elevated card variant — shadowed surface-colored background.

Link copied to clipboard

Packs wrapped lines at the center of the cross axis. Only takes effect when wrapping is enabled.

Link copied to clipboard

Packs wrapped lines at the end of the cross axis. Only takes effect when wrapping is enabled.

Link copied to clipboard

Distributes wrapped lines with equal space around each of them. Only takes effect when wrapping is enabled.

Link copied to clipboard

Distributes wrapped lines with equal space between them. Only takes effect when wrapping is enabled.

Link copied to clipboard

Packs wrapped lines at the start of the cross axis. Only takes effect when wrapping is enabled.

Link copied to clipboard

Stretches wrapped lines to fill the cross axis. Only takes effect when wrapping is enabled.

Link copied to clipboard

Aligns children by their text baseline.

Link copied to clipboard

Aligns children to the center of the cross axis.

Link copied to clipboard

Aligns children to the end of the cross axis.

Link copied to clipboard

Aligns children to the start of the cross axis.

Link copied to clipboard

Stretches children to fill the cross axis.

Link copied to clipboard
fun TileSchemaBuilderScope.FlexBox(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, direction: FlexBoxTileSchema.FlexDirectionSchema = flexDirectionRow(), justifyContent: FlexBoxTileSchema.FlexJustifyContentSchema = flexJustifyStart(), alignItems: FlexBoxTileSchema.FlexAlignItemsSchema = flexAlignItemsStart(), alignContent: FlexBoxTileSchema.FlexAlignContentSchema = flexAlignContentStart(), wrap: FlexBoxTileSchema.FlexWrapSchema = flexNoWrap(), columnGap: Int = 0, rowGap: Int = 0, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose CSS-flexbox layout hosting tiles. direction sets the main axis (and its reversal), justifyContent distributes children along the main axis, alignItems aligns children on the cross axis of a single line, alignContent distributes the lines themselves (only takes effect when wrap allows multiple lines), and wrap controls whether items wrap. columnGap / rowGap are in dp. Publishes its flex scope to children so they can use flex modifiers (grow, shrink, basis, align-self). When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. Never scrollable — every child is composed eagerly. Dispatches onDisplay once when composed, onClick only when declared.

Link copied to clipboard
Link copied to clipboard

Main axis runs bottom-to-top, reversing item order.

Link copied to clipboard

Main axis runs left-to-right (or top-to-bottom is not applicable — this is the row direction).

Link copied to clipboard

Main axis runs right-to-left, reversing item order.

Link copied to clipboard

Packs children at the center of the main axis.

Link copied to clipboard

Packs children at the end of the main axis.

Link copied to clipboard

Distributes children with equal space around each of them.

Link copied to clipboard

Distributes children with equal space between them, none at the edges.

Link copied to clipboard

Distributes children with equal space between them and at both edges.

Link copied to clipboard

Packs children at the start of the main axis.

Link copied to clipboard

Children are forced onto a single line, overflowing if needed.

Link copied to clipboard

Children wrap onto multiple lines when they overflow the main axis.

Link copied to clipboard

Children wrap onto multiple lines in reverse order when they overflow the main axis.

Link copied to clipboard

Auto-places children column by column, filling each column before moving to the next.

Link copied to clipboard

Auto-places children row by row, filling each row before moving to the next.

Link copied to clipboard
fun TileSchemaBuilderScope.FlowRow(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, horizontalArrangement: ArrangementSchema.Horizontal = arrangeHorizontallyToStart(), verticalArrangement: ArrangementSchema.Vertical = arrangeVerticallyToTop(), maxItemsInEachRow: Int = Int.MAX_VALUE, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose FlowRow laying tiles out horizontally and wrapping onto new lines when they no longer fit. horizontalArrangement spaces items within a line, verticalArrangement spaces the lines themselves, and maxItemsInEachRow caps how many children a single line may hold (unlimited by default). Publishes its flow-row scope to children so they can use modifiers such as weight and fillMaxRowHeight. When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. Never scrollable — every child is composed eagerly. Dispatches onDisplay once when composed, onClick only when declared.

Link copied to clipboard
fun TileSchemaBuilderScope.Grid(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, flow: GridTileSchema.GridFlowSchema = flowGridThroughRows(), columns: List<GridTileSchema.GridTrackSchema>, rows: List<GridTileSchema.GridTrackSchema>, columnGap: Int = 0, rowGap: Int = 0, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose CSS-grid-like layout hosting tiles. columns and rows declare the track template (each track fixed in dp, a fraction of available space, an fr-flexible unit, auto, max-content or min-content); when rows is left empty, row tracks are derived implicitly. flow decides whether children are placed row-first or column-first, and columnGap / rowGap (in dp) set the spacing between tracks. Publishes its grid scope to children so they can use grid modifiers (row/column span and placement). When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. Never scrollable — every child is composed eagerly. Dispatches onDisplay once when composed, onClick/onLongPress only when declared on this tile.

Link copied to clipboard

Column track sized automatically to fit its content.

Link copied to clipboard

Column track with a fixed size in dp.

Link copied to clipboard

Column track sized with an fr-flexible unit, sharing remaining space proportionally with other flexible tracks.

Link copied to clipboard

Column track sized as a fraction of the available space (0f–1f).

Link copied to clipboard

Column track sized to the maximum content size among its cells.

Link copied to clipboard

Column track sized to the minimum content size among its cells.

Link copied to clipboard

Row track sized automatically to fit its content.

Link copied to clipboard

Row track with a fixed size in dp.

Link copied to clipboard

Row track sized with an fr-flexible unit, sharing remaining space proportionally with other flexible tracks.

Link copied to clipboard

Row track sized as a fraction of the available space (0f–1f).

Link copied to clipboard

Row track sized to the maximum content size among its cells.

Link copied to clipboard

Row track sized to the minimum content size among its cells.

Link copied to clipboard

Visible from the Compact height breakpoint upwards (i.e. always, since Compact is the lowest rank).

Link copied to clipboard

Visible from above the Expanded height breakpoint (never satisfied — Expanded is the highest rank).

Link copied to clipboard

Visible from above the Medium height breakpoint (Expanded only).

Link copied to clipboard

Visible up to and including the Compact height breakpoint.

Link copied to clipboard

Visible up to and including the Expanded height breakpoint (i.e. always, since Expanded is the highest rank).

Link copied to clipboard

Visible up to and including the Medium height breakpoint.

Link copied to clipboard
fun TileSchemaBuilderScope.LazyColumn(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, arrangement: ArrangementSchema.Vertical = arrangeVerticallyToTop(), alignment: AlignmentSchema.Horizontal = alignHorizontallyToStart(), scrollThreshold: Int? = null, considerLoadingItemAtEndOnThresholdReached: Boolean = true, displayScrollbar: Boolean = false, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose LazyColumn over tiles — one lazy item per child, keyed by the child's id — spaced by arrangement and aligned horizontally by alignment. Only visible children are composed, so prefer this over Column for long or paginated lists. Publishes each item's lazy scope to its child, so children can use modifiers such as animateItem (but not ColumnScope.weight). When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. When scrollThreshold is set, the list fires its threshold trigger once fewer than or exactly that many items remain past the last visible one; it does not fire again until the list grows, and considerLoadingItemAtEndOnThresholdReached additionally requires it to grow by more than one item (accounting for a trailing loading placeholder). Listens for scroll-to-top/bottom/item broadcasts addressed to its id. When displayScrollbar is true, draws a vertical scrollbar on the trailing edge (useful on desktop/web). Dispatches onDisplay once when composed, onClick only when declared, onScrolled on scroll direction changes, and the scroll-threshold trigger as described above.

Link copied to clipboard
fun TileSchemaBuilderScope.LazyRow(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, arrangement: ArrangementSchema.Horizontal = arrangeHorizontallyToStart(), alignment: AlignmentSchema.Vertical = alignVerticallyToTop(), scrollThreshold: Int? = null, considerLoadingItemAtEndOnThresholdReached: Boolean = true, displayScrollbar: Boolean = false, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose LazyRow over tiles — one lazy item per child, keyed by the child's id — spaced by arrangement and aligned vertically by alignment. Only visible children are composed, so prefer this over Row for long or paginated horizontal lists. Publishes each item's lazy scope to its child, so children can use modifiers such as animateItem (but not RowScope.weight). When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. When scrollThreshold is set, the list fires its threshold trigger once fewer than or exactly that many items remain past the last visible one; it does not fire again until the list grows, and considerLoadingItemAtEndOnThresholdReached additionally requires it to grow by more than one item (accounting for a trailing loading placeholder). Listens for scroll-to-start/end/item broadcasts addressed to its id. When displayScrollbar is true, draws a horizontal scrollbar along the bottom edge (useful on desktop/web). Dispatches onDisplay once when composed, onClick only when declared, onScrolled on scroll direction changes, and the scroll-threshold trigger as described above.

Link copied to clipboard
fun TileSchemaBuilderScope.LazyTiles(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, url: String, method: HttpMethod = HttpMethod.GET, body: AnySerializable? = null, headers: Map<String, String>? = null, failureTiles: TileSchemaBuilderScope.() -> Unit = {}, placeholderTiles: TileSchemaBuilderScope.() -> Unit = {})

Renders a plain Column whose content is fetched from the network at display time: the tile calls url with method, body and headers, expects a JSON array of tile schemas back, and renders them in place of placeholderTiles. placeholderTiles are shown while the request is in flight (fired once, on the IO dispatcher), and failureTiles replace them if the request or the response decoding fails. A local reload event clears the loaded state and retries. The request is issued directly by the renderer, not through the event pipeline, so it is not affected by event chaining. Children are laid out with no scope CompositionLocal and no scrolling.

Link copied to clipboard
fun multiBrowse(preferredItemWidth: Int, minSmallItemWidth: Int? = null, maxSmallItemWidth: Int? = null): CarouselTileSchema.CarouselTypeSchema.MultiBrowse

Multi-browse carousel layout — items are sized around preferredItemWidth, with edge items allowed to shrink between minSmallItemWidth and maxSmallItemWidth (falling back to Material defaults when left null).

Link copied to clipboard

Outlined card variant — flat with an outline border.

Link copied to clipboard

Pages fill the full available width.

Link copied to clipboard

Pages take a fixed width, in dp.

Link copied to clipboard
fun TileSchemaBuilderScope.Pager(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, pageSize: PagerTileSchema.PageSizeSchema = pageFill(), pageSpacing: Int = 0, contentPadding: Int = 0, beyondViewportPageCount: Int = 0, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a horizontal-only Compose HorizontalPager over tiles, one page per child. pageSize chooses between full-width pages (pageFill) and fixed-width pages (pageFixed, in dp); pageSpacing and contentPadding (horizontal only) are dp values, and beyondViewportPageCount controls how many off-screen pages stay composed. Listens for scroll-to-begin/end and next/previous-page broadcasts addressed to its id — requesting the next page past the last one (or the previous one before the first) is a no-op. Children are rendered by index with no scope CompositionLocal. Dispatches onDisplay once when composed, and onPageChanged whenever the settled current page changes (skipping the initial page) — once per matching direction (any / start / end / that exact index); wiring several directions runs several chains for the same page change.

Link copied to clipboard
fun TileSchemaBuilderScope.PullToRefresh(id: String = randomId(), tiles: TileSchemaBuilderScope.() -> Unit, events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, isRefreshing: Boolean = false)

Renders a Material 3 pull-to-refresh container wrapping tiles, showing the refresh indicator while isRefreshing is true. Pulling flips isRefreshing to true locally on the client (no round trip needed for the spinner to appear) and dispatches onPull — hook the refresh work to that trigger. Stopping the indicator is the server's job: chain a StopRefreshingEventSchema pointing at this tile's id onto the end of the refresh flow, on both the success and failure branch, otherwise it keeps spinning. Children are laid out with Box semantics and no scope CompositionLocal; put a scrollable tile inside for the gesture to feel natural. Dispatches onDisplay once when composed.

Link copied to clipboard
fun TileSchemaBuilderScope.Row(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, filterChildrenByTerm: String? = null, arrangement: ArrangementSchema.Horizontal = arrangeHorizontallyToStart(), alignment: AlignmentSchema.Vertical = alignVerticallyToTop(), scrollable: Boolean = false, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Compose Row laying tiles out horizontally, spaced by arrangement and aligned vertically by alignment. When scrollable is true the row becomes horizontally scrollable — every child is composed eagerly, so prefer LazyRow for long lists. Publishes its row scope to children so they can use scope modifiers such as weight. When filterChildrenByTerm is set, only children whose searchableTerms contain that term (case-insensitive substring match) are rendered — children without searchableTerms are filtered out. Listens for scroll-to-start/end/offset broadcasts addressed to its id. Dispatches onDisplay once when composed, onClick/onLongPress only when declared, and onScrolled on scroll direction changes while scrollable is true.

Link copied to clipboard
fun TileSchemaBuilderScope.SelectionContainer(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, tiles: TileSchemaBuilderScope.() -> Unit = {})

Wraps tiles in a Compose SelectionContainer, making the text rendered by its descendants selectable and copyable with the platform's selection handles and context menu. Dispatches no triggers at all — not even onDisplay — so any events declared on this tile are never fired; wire events on the children instead. Children are rendered without a scope CompositionLocal (behaves like a Box for layout) — put a Column or Row inside when a specific arrangement is needed.

Link copied to clipboard
fun TileSchemaBuilderScope.Shimmer(id: String = randomId(), events: EventSchemaBuilderScope.() -> Unit = {}, style: StyleSchemaBuilderScope.() -> Unit = {}, visibility: TileSchema.Visibility = visible(), searchableTerms: List<String>? = null, tiles: TileSchemaBuilderScope.() -> Unit)

Renders a Box hosting tiles with a continuously animated shimmer applied over the whole subtree — the usual way to build a skeleton/loading placeholder out of plain tiles. The shimmer is purely visual: children stay interactive, so build the placeholder out of non-clickable tiles. The tile itself is never clickable, and children are laid out with Box semantics (stacked, no scope CompositionLocal). Dispatches onDisplay once when composed.

Link copied to clipboard

Uncontained carousel layout — every item has the same fixed itemWidth.

Link copied to clipboard

Visible from the Compact width breakpoint upwards (i.e. always, since Compact is the lowest rank).

Link copied to clipboard

Visible from above the Expanded width breakpoint (Large and up).

Link copied to clipboard

Visible from above the ExtraLarge width breakpoint (never satisfied — ExtraLarge is the highest rank).

Link copied to clipboard

Visible from above the Large width breakpoint (ExtraLarge only).

Link copied to clipboard

Visible from above the Medium width breakpoint (Expanded and up).

Link copied to clipboard

Visible up to and including the Compact width breakpoint.

Link copied to clipboard

Visible up to and including the Expanded width breakpoint.

Link copied to clipboard

Visible up to and including the ExtraLarge width breakpoint (i.e. always, since ExtraLarge is the highest rank).

Link copied to clipboard

Visible up to and including the Large width breakpoint.

Link copied to clipboard

Visible up to and including the Medium width breakpoint.