import { posteShort, posteTokens, type PosteCode } from '@/lib/design/postes'; import { cx } from '@/lib/cx'; /** * États d'un créneau, repris du design system. * * `alert` ajoute un liseré danger de 1,5 px : la couleur du poste occupe déjà * le fond, l'alerte doit donc passer par la forme, pas par une seconde teinte * qui entrerait en concurrence avec la palette catégorielle. */ export type ShiftState = | 'published' | 'validated' | 'draft' | 'unpublished' | 'alert' | 'unassigned'; export interface ShiftChipProps { poste: PosteCode; /** « 09:00–17:00 ». */ time: string; state?: ShiftState; /** Écart affiché en pastille, ex. « +2 h 55 ». */ delta?: string; /** Motif de l'alerte, ex. « Repos < 11 h ». */ alert?: string; /** Durée de pause, en minutes. */ breakMinutes?: number; className?: string; } export function ShiftChip({ poste, time, state = 'published', delta, alert, breakMinutes, className, }: ShiftChipProps) { const tokens = posteTokens(poste); const ghost = state === 'unassigned'; return (