Activity feed
Home's activity, grouped by day.
<mm-activity-feed pending="3" has-more>
<mm-activity-item interactive actor="support-triage-agent" actor-kind="agent" verb="queried"
target="orders_daily" target-href="/assets/orders_daily" time="2026-10-27T09:42:00Z" status="denied"
detail="SELECT c.email, c.phone, o.total_gbp FROM orders_daily o JOIN customers_dim c USING (customer_id)"></mm-activity-item>
<mm-activity-item interactive actor="Jane Doe" verb="certified" target="customers_dim"
target-href="/assets/customers_dim" time="2026-10-27T09:05:00Z"></mm-activity-item>
</mm-activity-feed>
Guidance
The activity feed is Home's record of what happened in the catalog: who queried what, which
schemas changed, what was certified and which plugin runs updated assets. Items are grouped by
day under sentence-case label headings ("Today", "Yesterday", "Monday 26 October"), never
uppercase text, and separated by hairlines, never boxed as cards. Put it in an mm-panel.
When pending is above zero a "3 new events" button appears at the top inside a polite live
region, so screen readers hear about new activity without losing their place; it fires
mm-show-new. has-more adds a "Load more" button that fires mm-load-more; set loading
while more are on their way. With no items it shows loading placeholders, an error with a
retry, or the empty state.
Keyboard: interactive items form one tab stop. Up and Down move between them, Home and End jump to
the first and last, and Enter or Space opens the item (mm-activate on the item, usually to open
a blade). Links inside an item stay in the tab order. This follows the list navigation of
mm-list (https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/).
Properties
| Property | Attribute | Type | Default | Description |
|---|---|---|---|---|
pending | pending | number | 0 | Count of new events not yet shown. Above zero, a "new events" button appears at the top. |
hasMore | has-more | boolean | false | Shows a "Load more" button at the end. |
loading | loading | boolean | false | Placeholders when empty; a busy "Load more" button otherwise. |
error | error | string | '' | An error message, shown with a retry button when there are no items. |
now | now | number | undefined | The time relative times are measured from, as a timestamp. Defaults to now. | |
headingLevel | heading-level | number | 3 | Heading level of the day headings. Defaults to 3, under a panel title. |
emptyHeading | empty-heading | string | '' | Empty-state title. |
emptyDescription | empty-description | string | '' | Empty-state sentence. |
Events
| Event | Detail | Description |
|---|---|---|
mm-show-new | CustomEvent<{ count: number }> | The "new events" button was activated. |
mm-load-more | CustomEvent<Record<string, never>> | The "Load more" button was activated. |
mm-retry | CustomEvent<Record<string, never>> | The retry button on the error was activated. |
Slots
| Slot | Description |
|---|---|
| Default | mm-activity-item elements, newest first. |
CSS parts
| Part | Description |
|---|---|
day | Each day heading. |
new | The "new events" button. |
more | The "Load more" button. |
Examples
Every state of mm-activity-feed in Storybook, with keyboard and screen reader tests.