Skip to content

Start here

Article Feed

Renders a stream of article records (title, summary, url, topic, thumbnail) as a lead story, a card grid and topic filters.

Renders a stream of article records (title, summary, url, topic, thumbnail) as a lead story, a card grid and topic filters.

Add it to an app

  1. Open the app builder and find Article Feed in the component palette.
  2. Insert it into the intended region or container.
  3. Set its properties in the inspector. Use a literal for a fixed value or a binding for a value supplied by the app.
  4. Connect its events where the app should respond to a user gesture.
  5. Preview with representative data and save after resolving validation problems.

The type name in the builder’s code view is article_feed.

Settings

SettingAccepted valueRequiredDefaultWhat it controls
Action button label (empty hides it) (actionLabel)stringNo"Refresh"The toolbar button that fires onAction. The listed default is inserted when adding a new component.
Active run id (activeRunId)stringNoNot specifiedSupports expression bindings.
Run edition fact (edition)objectNoNot specifiedSupports expression bindings.
Edition key (server-minted) (editionKey)stringNoNot specifiedSupports expression bindings. A page under another key is refused, never spliced in.
Empty text (emptyText)stringNo"No articles yet."The listed default is inserted when adding a new component.
Text filter (filterText)stringNoNot specifiedSupports expression bindings. Matches title, summary, source and topic.
Topic filter (controlled) (filterTopic)stringNoNot specifiedSupports expression bindings. Bound (even to ''), it controls the topic filter and the chips turn passive.
Lead stories (0–3) (heroCount)integer; minimum 0; maximum 3No1The listed default is inserted when adding a new component.
Articles (items)list of objectNo[]Supports expression bindings. The article records (items mode): title, summary, url, topic, source|site_name, published_at, thumbnail_data_url, image_alt, id. The listed default is inserted when adding a new component.
Loading (run status or boolean) (loading)stringNoNot specifiedSupports expression bindings. A run status or a boolean; drives the skeleton and the busy action button.
Articles shown (max 48) / page size in records mode (6-48) (pageSize)integer; minimum 1; maximum 48No48The listed default is inserted when adding a new component.
Data source id for further pages (pageSource)stringNoNot specified—
Authored progress phases (phases)list of objectNoNot specified{label, steps, countStep, countField, unit?} per phase.
Run steps (progress)list of objectNoNot specifiedSupports expression bindings.
Data source id of the 1-row run marker (progressSource)stringNoNot specified—
Article records (page one) (records)list of objectNoNot specifiedSupports expression bindings. The source's full envelopes, each raw_payload an article record — switches on records mode.
A refresh trigger was refused and retried (runCoalesceConflict)booleanNoNot specifiedSupports expression bindings.
Joined a running refresh (runCoalesced)booleanNoNot specifiedSupports expression bindings.
Refresh patience budget (ms) (runDeadlineMs)integer; minimum 1000; maximum 7200000NoNot specified—
Run error (runError)stringNoNot specifiedSupports expression bindings.
The server asked this app to slow down (runRateLimited)booleanNoNot specifiedSupports expression bindings.
Selected article id (controlled) (selectedId)stringNoNot specifiedSupports expression bindings. Bound, it controls the pressed card; unbound, selection is internal.
Theme (system | light | dark) (theme)"system" / "light" / "dark"No"system"Supports expression bindings. The listed default is inserted when adding a new component.
Publication title (title)stringNo"Articles"Supports expression bindings. The masthead nameplate. The listed default is inserted when adding a new component.

Values available to bindings

ValueTypeInitial valueMeaning
selectedItemobject or nullnullThe selected card's full raw record; null on deselect.
topicslist of string[]Distinct topics across all bound items, first-appearance order.

Refer to these values through components.<component-id>.<value> in a binding. Use the identifier assigned to this instance of Article Feed, not the component type name.

Events

  • onAction — The toolbar action button was clicked (wire a refresh to it).

  • onSelect — A card was selected or deselected, after selectedItem is published.

Connect only the actions the app needs. An event can fetch results, run an enabled data source, set state, update another component, show a notification, or navigate where supported.

Keyboard and accessible labels

Accessible label source: The masthead title.

  • Enter/Space on a card selects it; again deselects.

Updates are announced through the component’s live status region.

Example: Bound articles with a refresh button

SettingExample value
heroCount1
items"{{ dataSources.news.data || [] }}"
loading"{{ dataSources.news.runStatus }}"
pageSize24
theme"{{ app.ui?.theme || 'system' }}"
title"{{ app.name }}"

When onAction occurs, the example performs:

  • triggerDataSource with {"dataSourceId":"news","mode":"run"}

Example: Records mode: a lazy, edition-pinned record stream

SettingExample value
editionKey"{{ dataSources.news.editionKey }}"
loading"{{ dataSources.news.runStatus }}"
pageSize12
pageSource"news"
phases[{"countField":"output","countStep":"topics","label":"Collecting","steps":["topics","collect"],"unit":"topics"}]
progress"{{ dataSources.news.runSteps }}"
progressSource"progress"
records"{{ dataSources.news.records }}"
runDeadlineMs2700000

When onSelect occurs, the example performs:

  • setStateValue with {"key":"article","value":"{{ components.Feed.selectedItem }}"}

If it is empty or unavailable

Check the source binding, the selected item, and the app’s access. A hosted document, table, review, or storage component needs the corresponding app capability; an offline preview cannot supply live private data. A source running with no results is different from an invalid binding. Inspect the app’s workflow and data source before changing the presentation.