diff --git a/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/Components/StatusPill.razor b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/Components/StatusPill.razor
new file mode 100644
index 0000000..6a6503e
--- /dev/null
+++ b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/Components/StatusPill.razor
@@ -0,0 +1,16 @@
+@* Components/StatusPill.razor *@
+@ChildContent
+
+@code {
+ [Parameter, EditorRequired] public StatusState State { get; set; }
+ [Parameter] public RenderFragment? ChildContent { get; set; }
+
+ private string ChipClass => State switch
+ {
+ StatusState.Ok => "chip-ok",
+ StatusState.Warn => "chip-warn",
+ StatusState.Bad => "chip-bad",
+ StatusState.Info => "chip-info",
+ _ => "chip-idle",
+ };
+}
diff --git a/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/StatusState.cs b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/StatusState.cs
new file mode 100644
index 0000000..c39b646
--- /dev/null
+++ b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/StatusState.cs
@@ -0,0 +1,3 @@
+namespace ZB.MOM.WW.Theme;
+
+public enum StatusState { Ok, Warn, Bad, Idle, Info }
diff --git a/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/_Imports.razor b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/_Imports.razor
index c41ccac..f74d448 100644
--- a/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/_Imports.razor
+++ b/ZB.MOM.WW.Theme/src/ZB.MOM.WW.Theme/_Imports.razor
@@ -2,3 +2,4 @@
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using ZB.MOM.WW.Theme
+@using ZB.MOM.WW.Theme.Components
diff --git a/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/StatusPillTests.cs b/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/StatusPillTests.cs
new file mode 100644
index 0000000..de42144
--- /dev/null
+++ b/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/StatusPillTests.cs
@@ -0,0 +1,21 @@
+namespace ZB.MOM.WW.Theme.Tests;
+
+public class StatusPillTests : TestContext
+{
+ [Theory]
+ [InlineData(StatusState.Ok, "chip-ok")]
+ [InlineData(StatusState.Warn, "chip-warn")]
+ [InlineData(StatusState.Bad, "chip-bad")]
+ [InlineData(StatusState.Idle, "chip-idle")]
+ [InlineData(StatusState.Info, "chip-info")]
+ public void Maps_state_to_chip_class(StatusState state, string expected)
+ {
+ var cut = RenderComponent(p => p
+ .Add(x => x.State, state)
+ .AddChildContent("Connected"));
+ var span = cut.Find("span");
+ Assert.Contains("chip", span.ClassList);
+ Assert.Contains(expected, span.ClassList);
+ Assert.Equal("Connected", span.TextContent.Trim());
+ }
+}
diff --git a/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/_Imports.cs b/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/_Imports.cs
index 393ba04..0dedb18 100644
--- a/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/_Imports.cs
+++ b/ZB.MOM.WW.Theme/tests/ZB.MOM.WW.Theme.Tests/_Imports.cs
@@ -1,3 +1,4 @@
global using Bunit;
global using Xunit;
global using ZB.MOM.WW.Theme;
+global using ZB.MOM.WW.Theme.Components;