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 && ( -