// ============================================================ // Festival Icon Library // Bright, flat, vibrant SVGs. One per festival "vibe". // Each icon is a 64x64 viewBox component for crisp rendering. // ============================================================ /* global React */ const I = { saffron: '#FF9F1C', marigold: '#FFB627', vermilion:'#E63946', rose: '#FF4D6D', magenta: '#D81E5B', gold: '#FFD60A', green: '#06A77D', forest: '#0F7B5A', teal: '#0FA3B1', peacock: '#0077B6', indigo: '#3D2C8D', violet: '#7B2CBF', cream: '#FFF6E5', white: '#FFFFFF', brown: '#7C3F00', charcoal: '#1A1410', ink: '#0E0A07', }; const Icons = {}; Icons.Diya = () => ( ); Icons.Holi = () => ( ); Icons.SunHarvest = () => ( {Array.from({length:12}).map((_,i) => { const a = (i/12) * Math.PI*2; const x1 = 32 + Math.cos(a)*16, y1 = 28 + Math.sin(a)*16; const x2 = 32 + Math.cos(a)*24, y2 = 28 + Math.sin(a)*24; return ; })} ); Icons.Crescent = () => ( ); Icons.StarChristmas = () => ( ); Icons.Pookalam = () => ( {[0,1,2,3,4,5,6,7].map(i => { const a = (i/8) * Math.PI*2; const x = 32 + Math.cos(a)*28, y = 32 + Math.sin(a)*28; return ; })} ); Icons.Trident = () => ( ); Icons.Om = () => ( ); Icons.Rakhi = () => ( {[0,1,2,3,4,5,6,7].map(i => { const a = (i/8)*Math.PI*2; const x = 32 + Math.cos(a)*14, y = 32 + Math.sin(a)*14; return ; })} ); Icons.Flute = () => ( {[20,28,36,42].map((x,i) => ( ))} ); Icons.Flag = () => ( {Array.from({length:12}).map((_,i) => { const a = (i/12) * Math.PI*2; const x1 = 32 + Math.cos(a)*1.5, y1 = 32 + Math.sin(a)*1.5; const x2 = 32 + Math.cos(a)*4.5, y2 = 32 + Math.sin(a)*4.5; return ; })} ); Icons.GudiPot = () => ( ); Icons.Drum = () => ( {[18,24,30,36,42].map((x,i) => ( ))} ); Icons.Feather = () => ( {[18,24,30,36,42].map((y,i) => ( ))} ); Icons.Moon = () => ( {[20,24,28,32,36,40,44].map(x => )} {[20,24,28,32,36,40,44].map(y => )} ); Icons.River = () => ( ); Icons.Chariot = () => ( {[0,1,2,3,4,5].map(i => { const a = (i/6) * Math.PI*2; return ; })} {[0,1,2,3,4,5].map(i => { const a = (i/6) * Math.PI*2; return ; })} ); Icons.Trishul = () => ( ); Icons.Bodhi = () => ( {[16,22,28,34,40,46].map(y => ( ))} {[16,22,28,34,40,46].map(y => ( ))} ); Icons.Khanda = () => ( ); Icons.Star = () => ( ); const FESTIVAL_RULES = [ { kw: /republic day|independence day|gandhi jayanti/i, icon: 'Flag', tint: '#FF9933' }, { kw: /diwali|deepavali|tihar|deepotsav|kartik purnima|dev deepavali/i, icon: 'Diya', tint: '#FFB627' }, { kw: /holi|rangapanchami|dol jatra|dol purnima/i, icon: 'Holi', tint: '#FF4D6D' }, { kw: /pongal|sankranti|lohri|magh bihu|bhogali|makar/i, icon: 'SunHarvest', tint: '#FF9F1C' }, { kw: /eid|ramadan|ramazan|muharram|milad|shab|barat|jumu/i, icon: 'Crescent', tint: '#FFD60A' }, { kw: /christmas|easter|epiphany/i, icon: 'StarChristmas', tint: '#FFD60A' }, { kw: /navroz|nowruz|parsi new year|jamshedi/i, icon: 'SunHarvest', tint: '#0FA3B1' }, { kw: /onam|vishu|thiruvonam|atham/i, icon: 'Pookalam', tint: '#E63946' }, { kw: /navratri|durga puja|dussehra|vijayadashami|kullu|mysuru/i, icon: 'Trident', tint: '#E63946' }, { kw: /ganesh chaturthi|vinayaka|ganesh visarjan/i, icon: 'Om', tint: '#FF9F1C' }, { kw: /raksha bandhan|rakhi|narali/i, icon: 'Rakhi', tint: '#FFD60A' }, { kw: /janmashtami|gokulashtami|krishna|dahi handi/i, icon: 'Flute', tint: '#0077B6' }, { kw: /ugadi|gudi padwa|puthandu|baisakhi|vaisakhi|chaitra/i, icon: 'GudiPot', tint: '#FF9F1C' }, { kw: /bihu|rongali|kongali/i, icon: 'Drum', tint: '#06A77D' }, { kw: /hornbill|wangala|sekrenyi|nongkrem|ali|aoling|losar|kharchi|behdienkhlam|chapchar|moatsu|tulsi vivah/i, icon: 'Feather', tint: '#E63946' }, { kw: /karva chauth|sharad purnima|kojagari|teej|purnima/i, icon: 'Moon', tint: '#3D2C8D' }, { kw: /kumbh|magh mela|chhath|kartik snan|ganga|godavari/i, icon: 'River', tint: '#0077B6' }, { kw: /rath yatra|jagannath|puri/i, icon: 'Chariot', tint: '#FF9F1C' }, { kw: /shivratri|mahashivratri|shivaratri|lingaraj/i, icon: 'Trishul', tint: '#3D2C8D' }, { kw: /buddha|wesak|vesak|bodhi|tihar|losar/i, icon: 'Bodhi', tint: '#FFB627' }, { kw: /guru|gurpurab|guru nanak|baisakhi|hola mohalla|khalsa/i, icon: 'Khanda', tint: '#FFD60A' }, { kw: /harvest|crop|agricultur/i, icon: 'SunHarvest', tint: '#FF9F1C' }, ]; function pickIcon(festival) { const name = festival.name || ''; for (const rule of FESTIVAL_RULES) { if (rule.kw.test(name)) return rule; } const t = (festival.type || '').toLowerCase(); if (t.includes('harvest') || t.includes('agricultur')) return { icon: 'SunHarvest', tint: '#FF9F1C' }; if (t.includes('tribal')) return { icon: 'Feather', tint: '#E63946' }; if (t.includes('religious')) return { icon: 'Om', tint: '#FF9F1C' }; if (t.includes('cultural')) return { icon: 'Star', tint: '#D81E5B' }; return { icon: 'Star', tint: '#D81E5B' }; } function FestivalIcon({ festival, size = 28, style }) { const rule = pickIcon(festival); const Component = Icons[rule.icon] || Icons.Star; return ( ); } window.LOF_Icons = { Icons, FestivalIcon, pickIcon, FESTIVAL_RULES };