Previews

No matching results.

x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<ol class="midwest-timeline is-compact" aria-label="Account activity">
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-blue shape-circle" title="You tabbed on an Avatar for Will Riley">
<div class="letter" title="Will Riley">
WR
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-green">
<span class="value">New account</span>
</span>
<strong style="font-size: 0.875rem;">Account created</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Mar 12 · signed up via Google OAuth</p>
</div>
</li>
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-green shape-circle" title="You tabbed on an Avatar for Amy Kim">
<div class="letter" title="Amy Kim">
AK
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-primary">
<span class="value">Profile</span>
</span>
<strong style="font-size: 0.875rem;">Profile updated</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Mar 14 · changed display name and avatar</p>
</div>
</li>
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-blue shape-circle" title="You tabbed on an Avatar for Will Riley">
<div class="letter" title="Will Riley">
WR
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-green">
<span class="value">Billing</span>
</span>
<strong style="font-size: 0.875rem;">Subscription upgraded</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Mar 20 · Free → Pro plan</p>
</div>
</li>
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-indigo shape-circle" title="You tabbed on an Avatar for Jake Sullivan">
<div class="letter" title="Jake Sullivan">
JS
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-orange">
<span class="value">Security</span>
</span>
<strong style="font-size: 0.875rem;">API key generated</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Apr 2 · key ending in •••• 9f3a</p>
</div>
</li>
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-blue shape-circle" title="You tabbed on an Avatar for Will Riley">
<div class="letter" title="Will Riley">
WR
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-orange">
<span class="value">Security</span>
</span>
<strong style="font-size: 0.875rem;">Password changed</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Apr 8 · via Security settings</p>
</div>
</li>
<li class="midwest-timeline-item">
<div class="midwest-timeline-item-connector" aria-hidden="true">
<span class="midwest-timeline-item-dot">
<span class="midwest-avatar size-sm theme-green shape-circle" title="You tabbed on an Avatar for Amy Kim">
<div class="letter" title="Amy Kim">
AK
</div>
</span>
</span>
<span class="midwest-timeline-item-line"></span>
</div>
<div class="midwest-timeline-item-card">
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<span class="midwest-badge size-default theme-yellow">
<span class="value">Admin</span>
</span>
<strong style="font-size: 0.875rem;">Role elevated</strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);">Apr 10 · granted admin permissions by Jake S.</p>
</div>
</li>
</ol>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%#
Activity feed — compact layout with per-actor avatars and categorised badges.
The avatar lives in the icon slot so it replaces the dot entirely.
midwest_badge labels the action category; midwest_avatar identifies the actor.
%>
<% events = [
{ name: 'Will Riley', color: :blue, badge: ['New account', :success], title: 'Account created', detail: 'Mar 12 · signed up via Google OAuth' },
{ name: 'Amy Kim', color: :green, badge: ['Profile', :default], title: 'Profile updated', detail: 'Mar 14 · changed display name and avatar' },
{ name: 'Will Riley', color: :blue, badge: ['Billing', :success], title: 'Subscription upgraded', detail: 'Mar 20 · Free → Pro plan' },
{ name: 'Jake Sullivan', color: :indigo, badge: ['Security', :warning], title: 'API key generated', detail: 'Apr 2 · key ending in •••• 9f3a' },
{ name: 'Will Riley', color: :blue, badge: ['Security', :warning], title: 'Password changed', detail: 'Apr 8 · via Security settings' },
{ name: 'Amy Kim', color: :green, badge: ['Admin', :alert], title: 'Role elevated', detail: 'Apr 10 · granted admin permissions by Jake S.' }
] %>
<%= midwest_timeline(compact: true, label: 'Account activity') do |t| %>
<% events.each do |evt| %>
<% t.with_item do |item| %>
<% item.with_icon { midwest_avatar(name: evt[:name], size: :sm, shape: :circle, color: evt[:color]) } %>
<div style="display: flex; align-items: baseline; gap: 0.375rem; flex-wrap: wrap;">
<%= midwest_badge(evt[:badge][0], state: evt[:badge][1]) %>
<strong style="font-size: 0.875rem;"><%= evt[:title] %></strong>
</div>
<p style="margin: 0.125rem 0 0; font-size: 0.75rem; color: var(--gray-8);"><%= evt[:detail] %></p>
<% end %>
<% end %>
<% end %>

No assets to display.
Add a .js or .css file alongside the component to see it here.

Accessibility

Figma embed for Timeline/activity_feed

Annotate a preview to embed its Figma design here:

@figma "https://figma.com/..."