diff --git a/packages/ui/package.json b/packages/ui/package.json
index abd2394..2968544 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -2,7 +2,7 @@
"name": "@eqtylab/equality",
"description": "EQTYLab's component and token-based design system",
"homepage": "https://equality.eqtylab.io/",
- "version": "2.1.0",
+ "version": "2.1.1",
"license": "Apache-2.0",
"keywords": [
"component library",
@@ -59,7 +59,7 @@
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
- "lucide-react": "^0.545.0",
+ "lucide-react": "^1.17.0",
"motion": "^12.23.24",
"react-hook-form": "^7.63.0",
"react-syntax-highlighter": "^16.1.0",
diff --git a/packages/ui/src/components/control-status-badge/control-status-badge.module.css b/packages/ui/src/components/control-status-badge/control-status-badge.module.css
index affbefe..6969a2f 100644
--- a/packages/ui/src/components/control-status-badge/control-status-badge.module.css
+++ b/packages/ui/src/components/control-status-badge/control-status-badge.module.css
@@ -54,3 +54,34 @@
--badge-bg-color: var(--color-badge-background-compliant);
--badge-fg-color: var(--color-badge-text-compliant);
}
+
+/* "In Review" segmented pill: a filled status segment joined to a
+ border-only sub-status segment. The status color tokens are inherited
+ from the .badge--* class applied alongside .split-badge. */
+.split-badge {
+ @apply inline-flex w-max items-center;
+ @apply text-xs font-medium tabular-nums;
+}
+
+.split-badge__status {
+ @apply inline-flex items-center gap-1;
+ @apply min-h-5 px-2 py-0.5;
+ @apply rounded-l-full;
+ border: 1px solid transparent;
+ background-color: var(--badge-bg-color);
+ color: var(--badge-fg-color);
+}
+
+.split-badge__sub-status {
+ @apply inline-flex items-center;
+ @apply min-h-5 px-2 py-0.5;
+ @apply rounded-r-full;
+ /* Overlap the status segment so the divider reads as a single 1px line. */
+ margin-left: -1px;
+ border: 1px solid var(--badge-bg-color);
+ color: var(--badge-fg-color);
+}
+
+.split-badge .icon {
+ @apply text-inherit;
+}
diff --git a/packages/ui/src/components/control-status-badge/control-status-badge.tsx b/packages/ui/src/components/control-status-badge/control-status-badge.tsx
index aa4a70c..7b53d3c 100644
--- a/packages/ui/src/components/control-status-badge/control-status-badge.tsx
+++ b/packages/ui/src/components/control-status-badge/control-status-badge.tsx
@@ -1,5 +1,9 @@
+import type { ReactElement } from 'react';
+
import { Badge, type BadgeDisplayMode } from '@/components/badge/badge';
import styles from '@/components/control-status-badge/control-status-badge.module.css';
+import { Icon } from '@/components/icon/icon';
+import { cn } from '@/lib/utils';
export type ControlStatusBadgeDisplayMode = BadgeDisplayMode;
@@ -8,9 +12,42 @@ interface ControlStatusBadgeProps {
display?: ControlStatusBadgeDisplayMode;
}
+interface StatusConfig {
+ icon: string | ReactElement;
+ className: string;
+ label: string;
+ // When present, the badge renders as a segmented pill: a filled status
+ // segment ("In Review") followed by a border-only sub-status segment.
+ subLabel?: string;
+}
+
const ControlStatusBadge = ({ status, display = 'both' }: ControlStatusBadgeProps) => {
const config = getStatusConfig(status);
+ // "In Review" statuses split into a filled status + a border-only sub-status.
+ if (config.subLabel) {
+ // Icon-only collapses to just the filled "In Review" indicator.
+ if (display === 'icon-only') {
+ return (
+