282 lines
7.7 KiB
TypeScript
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',
|
|
]);
|