Files
baya-monorepo/client/src/components/common/AppIcon/config.ts
T
2026-07-27 22:27:04 +03:30

282 lines
7.7 KiB
TypeScript

// SVG assets — the Balinyaar brand mark
import LogoMark from './icons/LogoMark';
/*
* MUI Icons are gone. The registry now maps every name onto **Lucide**
* (`lucide-react`) — a single contemporary outline family drawn on a 24px grid
* with round caps/joins, which reads far lighter than the old filled/Rounded
* glyphs at the small sizes a phone-width app actually uses.
*
* Two rules keep the set coherent:
* 1. ONE family. Never import an icon from anywhere but `lucide-react` here,
* and never import a raw icon component anywhere else in the app.
* 2. The mapping is SEMANTIC, not incidental — a name describes the domain
* concept ("verification", "earnings", "coverage") and the glyph is chosen
* to depict that concept, so a rename of the underlying glyph never leaks
* into call sites. Related concepts deliberately share a visual root
* (every trust/verification name is a shield, every money name is a coin or
* card, every clinical name is a pulse/cross).
*
* Adding an icon = one import here + one lowercase key in ICONS below.
*/
import {
Activity,
Archive,
ArrowLeft,
ArrowLeftRight,
ArrowRight,
ArrowUpDown,
Award,
Baby,
Bandage,
Bell,
BellRing,
Building2,
Calendar,
CalendarCheck,
CalendarClock,
CalendarDays,
Camera,
ChevronDown,
ChevronLeft,
ChevronRight,
CircleCheckBig,
CircleHelp,
CircleUserRound,
CircleX,
ClipboardList,
Clock,
CloudUpload,
Coins,
Copy,
CreditCard,
Download,
Ellipsis,
ExternalLink,
FileSearch,
FileText,
Gavel,
HandHeart,
Headset,
Heart,
HeartHandshake,
HeartPulse,
History,
Hourglass,
House,
IdCard,
Info,
Landmark,
Languages,
LayoutDashboard,
LayoutGrid,
ListChecks,
LocateFixed,
Lock,
LogIn,
LogOut,
Map,
MapPin,
Menu,
MonitorSmartphone,
Moon,
Navigation,
NotebookPen,
OctagonAlert,
Paperclip,
Pencil,
PersonStanding,
Phone,
PhoneCall,
Pill,
Plus,
RefreshCw,
Repeat,
Rocket,
Search,
Send,
Settings,
Settings2,
Share2,
Shield,
ShieldCheck,
ShieldPlus,
SlidersHorizontal,
Star,
StarHalf,
Stethoscope,
Sun,
SunMoon,
Tag,
Trash2,
TrendingUp,
TriangleAlert,
Undo2,
UserCog,
UserPlus,
Users,
UsersRound,
Wallet,
X,
} from 'lucide-react';
/**
* List of all available Icon names
*/
export type IconName = keyof typeof ICONS;
/**
* How to use:
* 1. Import the Lucide icon into this file.
* 2. Add it with a "unique lowercase name" to the ICONS object. Lowercase is a must!
* 3. Use it everywhere in the app by name: <AppIcon icon="xxx" />
* Important: properties of ICONS object MUST be lowercase!
* Note: You can use camelCase or UPPERCASE in the <AppIcon icon="someIconByName" /> component
*/
export const ICONS = {
// ── Chrome & navigation ───────────────────────────────────────────────
default: Ellipsis,
logo: LogoMark,
close: X,
menu: Menu,
more: Ellipsis,
search: Search,
info: Info,
help: CircleHelp,
home: House,
account: CircleUserRound,
logout: LogOut,
notifications: Bell,
error: OctagonAlert,
settings: Settings,
// ── Actor destinations ────────────────────────────────────────────────
bookings: CalendarDays,
patients: HeartHandshake, // «حلقهٔ مراقبت» — a care circle, not a patient list
users: UsersRound,
wallet: Wallet,
profile: CircleUserRound,
dashboard: LayoutDashboard,
today: CalendarCheck,
practice: Stethoscope, // the nurse's «حرفهٔ من» group root
visits: Stethoscope,
admin: Shield,
// ── Trust & verification (all shields — one visual root) ──────────────
verification: ShieldCheck,
verified: CircleCheckBig,
pending: Hourglass,
rejected: CircleX,
identity: IdCard,
license: Award,
// ── Common actions ────────────────────────────────────────────────────
add: Plus,
edit: Pencil,
archive: Archive,
delete: Trash2,
refresh: RefreshCw,
upload: CloudUpload,
download: Download,
document: FileText,
publish: Rocket,
camera: Camera,
warning: TriangleAlert,
// ── Geography & coverage ──────────────────────────────────────────────
location: MapPin,
coverage: Map,
gps: LocateFixed,
navigate: Navigation,
// ── Catalog — the customer Home category grid (f4/b5) ─────────────────
services: Tag,
category: LayoutGrid,
elderly: PersonStanding,
post_surgery: Bandage,
infant: Baby,
chronic: HeartPulse,
companionship: HandHeart,
// ── Search & discovery ────────────────────────────────────────────────
star: Star,
star_half: StarHalf,
tune: SlidersHorizontal,
sort: ArrowUpDown,
// ── Booking requests, sessions & EVV ──────────────────────────────────
requests: ClipboardList,
check_in: LogIn,
check_out: LogOut,
schedule: Clock,
clinical: ShieldPlus,
medication: Pill,
emergency: PhoneCall,
phone: Phone,
lock: Lock,
// ── Money (coins/cards — one visual root) ─────────────────────────────
payment: CreditCard,
installments: CalendarClock,
earnings: Coins,
bank: Landmark,
refunds: Undo2,
trending: TrendingUp,
// ── Reviews & patient care records ────────────────────────────────────
notes: NotebookPen,
routine: Repeat,
tasks: ListChecks,
history: History,
family: Users,
activity: Activity,
// ── Messaging & support ───────────────────────────────────────────────
support: Headset,
send: Send,
// ── Admin backoffice & partner consoles ───────────────────────────────
config: Settings2,
calendar: Calendar,
audit: FileSearch,
alerts: BellRing,
moderation: Gavel,
partners: Building2,
roles: UserCog,
assign: UserPlus,
// ── Cross-cutting affordances ─────────────────────────────────────────
back: ArrowLeft,
forward: ArrowRight,
chevron_start: ChevronLeft,
chevron_end: ChevronRight,
expand: ChevronDown,
external: ExternalLink,
share: Share2,
copy: Copy,
attachment: Paperclip,
switch: ArrowLeftRight,
// ── Settings surface ──────────────────────────────────────────────────
language: Languages,
appearance: SunMoon,
light_mode: Sun,
dark_mode: Moon,
/** "Follow the operating system" — the third theme choice, not a device list. */
system_mode: MonitorSmartphone,
favorite: Heart,
};
/**
* Icons authored for LTR that must mirror horizontally under RTL (back arrows,
* chevrons pointing "start"/"end", the send paper-plane). AppIcon applies the flip via a
* `data-icon-directional` attribute + the single CSS rule in globals.css — add a
* name here, nothing else.
*/
export const DIRECTIONAL_ICONS = new Set<IconName>([
'back',
'chevron_start',
'chevron_end',
'forward',
'send',
]);