- Refactor color palette in `ui-design-spec.md` to utilize CSS variables exclusively, eliminating fixed hex values and Tailwind utility classes. - Complete dark mode implementation in `uiStore.ts`, ensuring proper theme application via `applyTheme()` and `applyBrand()`. - Create `admin-theme-dark-light-audit.md` to document the transition process, outlining issues with inline styles and fixed colors. - Introduce `theme-tokens.test.ts` to enforce rules against fixed hex colors and ensure compliance with the design system. - Update various components and styles to replace inline styles and fixed colors with CSS variables, ensuring consistent theming across light and dark modes. - Ensure all changes maintain visual integrity in both light and dark modes, with a focus on accessibility and contrast standards.
47 lines
2.3 KiB
TypeScript
47 lines
2.3 KiB
TypeScript
/**
|
|
* پیکربندی وضعیت نوبتها — رنگها عیناً از طرح tauri (`clinic-pro-tauri`
|
|
* `src/components/turns/Timeline.jsx` → `statusConfig`) برداشته شده و به وضعیتهای
|
|
* واقعی بکاند (Appointment::STATUS_*) نگاشت شدهاند. لیبلها فارسی مطابق همان طرح.
|
|
*/
|
|
export interface TurnStatusConfig {
|
|
label: string;
|
|
bgColor: string;
|
|
borderColor: string;
|
|
dotColor: string;
|
|
textColor: string;
|
|
}
|
|
|
|
/** یک وضعیت = یک توکن؛ خود توکن با تم عوض میشود، پس جفت light/dark لازم نیست. */
|
|
const of = (fg: string, bg: string): Omit<TurnStatusConfig, 'label'> => ({
|
|
bgColor: `var(--${bg})`, borderColor: `var(--${fg})`,
|
|
dotColor: `var(--${fg})`, textColor: `var(--${fg})`,
|
|
});
|
|
|
|
// وضعیتهای بکاند → توکنهای تم (هیوی طرح tauri حفظ شده است).
|
|
const STATUS: Record<string, TurnStatusConfig> = {
|
|
pending: { label: 'ثبت شده', ...of('info', 'info-bg') },
|
|
confirmed: { label: 'قطعی شده', ...of('primary', 'primary-soft') },
|
|
following_up: { label: 'در حال پیگیری', ...of('accent', 'accent-bg') },
|
|
salon: { label: 'سالن', ...of('violet', 'violet-bg') },
|
|
completed: { label: 'ویزیت شده', ...of('success', 'success-bg') },
|
|
cancelled_by_doctor: { label: 'لغو شده', ...of('danger', 'danger-bg') },
|
|
cancelled_by_user: { label: 'لغو توسط بیمار', ...of('danger', 'danger-bg') },
|
|
no_show: { label: 'غیبت', ...of('text-3', 'surface-2') },
|
|
expired: { label: 'منقضی', ...of('text-3', 'surface-2') },
|
|
};
|
|
|
|
// اسلات خالی (نوبت جدید) — tauri: empty.
|
|
export const EMPTY_SLOT_CONFIG: TurnStatusConfig = {
|
|
label: 'نوبت جدید', ...of('primary', 'primary-soft'),
|
|
};
|
|
|
|
export function turnStatusConfig(status: string): TurnStatusConfig {
|
|
return STATUS[status] ?? EMPTY_SLOT_CONFIG;
|
|
}
|
|
|
|
/** وضعیتهایی که نوبت را «لغوشده» میکنند (برای منطق تایملاین/آمار). */
|
|
export const CANCELLED_STATUSES = new Set([
|
|
'cancelled_by_doctor', 'cancelled_by_user', 'cancelled_by_admin',
|
|
'auto_cancel_unpaid', 'no_show', 'expired',
|
|
]);
|