diff --git a/src/features/admin/components/UserCreateModal.client.js b/src/features/admin/components/UserCreateModal.client.js
index 4324b85..f53711a 100644
--- a/src/features/admin/components/UserCreateModal.client.js
+++ b/src/features/admin/components/UserCreateModal.client.js
@@ -1,7 +1,7 @@
'use client';
import { useState, useEffect } from 'react';
-import { Input, TagInput, Modal, RoleBadge } from '@zen/core/shared/components';
+import { Input, TagInput, Modal, Badge } from '@zen/core/shared/components';
import { useToast } from '@zen/core/toast';
const UserCreateModal = ({ isOpen, onClose, onSaved }) => {
@@ -133,7 +133,7 @@ const UserCreateModal = ({ isOpen, onClose, onSaved }) => {
onChange={setSelectedRoleIds}
placeholder="Rechercher un rôle..."
renderTag={(opt, onRemove) => (
-
+ {opt.label}
)}
/>
diff --git a/src/features/admin/components/UserEditModal.client.js b/src/features/admin/components/UserEditModal.client.js
index dc982bd..1107aed 100644
--- a/src/features/admin/components/UserEditModal.client.js
+++ b/src/features/admin/components/UserEditModal.client.js
@@ -1,7 +1,7 @@
'use client';
import { useState, useEffect } from 'react';
-import { Input, TagInput, Modal, RoleBadge } from '@zen/core/shared/components';
+import { Input, TagInput, Modal, Badge } from '@zen/core/shared/components';
import { useToast } from '@zen/core/toast';
const UserEditModal = ({ userId, currentUserId, isOpen, onClose, onSaved }) => {
@@ -269,7 +269,7 @@ const UserEditModal = ({ userId, currentUserId, isOpen, onClose, onSaved }) => {
onChange={setSelectedRoleIds}
placeholder="Rechercher un rôle..."
renderTag={(opt, onRemove) => (
-
+ {opt.label}
)}
/>
diff --git a/src/features/admin/pages/UsersPage.client.js b/src/features/admin/pages/UsersPage.client.js
index 7a10777..db04b0b 100644
--- a/src/features/admin/pages/UsersPage.client.js
+++ b/src/features/admin/pages/UsersPage.client.js
@@ -2,7 +2,7 @@
import { registerPage } from '../registry.js';
import { useState, useEffect } from 'react';
-import { Card, Table, Badge, StatusBadge, Button, UserAvatar, RelativeDate, RoleBadge } from '@zen/core/shared/components';
+import { Card, Table, Badge, StatusBadge, Button, UserAvatar, RelativeDate } from '@zen/core/shared/components';
import { PencilEdit01Icon } from '@zen/core/shared/icons';
import { useToast } from '@zen/core/toast';
import AdminHeader from '../components/AdminHeader.js';
@@ -55,7 +55,7 @@ const UsersPageClient = ({ currentUserId, refreshKey, canEdit }) => {
return (
{visible.map(role => (
-
+
{role.name}
))}
{overflow > 0 &&
+{overflow}}
{roles.length === 0 &&
—}
diff --git a/src/shared/components/Badge.js b/src/shared/components/Badge.js
index a7333e3..d95f624 100644
--- a/src/shared/components/Badge.js
+++ b/src/shared/components/Badge.js
@@ -7,10 +7,12 @@ const Badge = ({
variant = 'default',
size = 'sm',
color = null,
+ dot = false,
+ onRemove,
className = '',
...props
}) => {
- const baseClassName = 'inline-flex items-center font-medium border font-ibm-plex-mono';
+ const baseClassName = 'inline-flex items-center gap-1 font-medium border font-ibm-plex-mono';
const variants = {
default: 'bg-neutral-700/10 text-neutral-700 border-neutral-800/30 dark:bg-neutral-600/10 dark:text-neutral-400 dark:border-neutral-800',
@@ -43,7 +45,20 @@ const Badge = ({
style={colorStyle}
{...props}
>
+ {dot && color && (
+
+ )}
{children}
+ {onRemove && (
+
+ )}
);
};
diff --git a/src/shared/components/RoleBadge.js b/src/shared/components/RoleBadge.js
deleted file mode 100644
index 4fb70a7..0000000
--- a/src/shared/components/RoleBadge.js
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client';
-
-const hexToRgb = (hex) => {
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
- return result
- ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) }
- : null;
-};
-
-const RoleBadge = ({ name, color, onRemove }) => {
- const rgb = color ? hexToRgb(color) : null;
- const style = rgb
- ? { backgroundColor: `rgba(${rgb.r},${rgb.g},${rgb.b},0.15)`, borderColor: `rgba(${rgb.r},${rgb.g},${rgb.b},0.4)`, color }
- : {};
- const fallback = !rgb
- ? 'bg-neutral-100 dark:bg-neutral-700 border-neutral-200 dark:border-neutral-600 text-neutral-700 dark:text-neutral-300'
- : '';
-
- return (
-
- {rgb && (
-
- )}
- {name}
- {onRemove && (
-
- )}
-
- );
-};
-
-export default RoleBadge;
diff --git a/src/shared/components/TagInput.js b/src/shared/components/TagInput.js
index 196e5d5..98a292e 100644
--- a/src/shared/components/TagInput.js
+++ b/src/shared/components/TagInput.js
@@ -86,20 +86,20 @@ const TagInput = ({
};
return (
-
+
{label && (
-