// icons.jsx — єдина система лінійних іконок (stroke-based, 24-grid, currentColor)
// Використання:
// — за іменем
// — за емодзі (мапиться через EMOJI_MAP)
// Розмір за замовчуванням 1.1em (успадковує font-size контейнера).
(function () {
const I = {
dot: '',
building: '',
home: '',
factory: '',
landmark: '',
hardhat: '',
construction:'',
ruler: '',
mountain: '',
search: '',
tag: '',
clipboard: '',
settings: '',
map: '',
book: '',
mail: '',
pencil: '',
trees: '',
shapes: '',
brick: '',
calculator: '',
file: '',
files: '',
wrench: '',
wind: '',
utensils: '',
droplet: '',
zap: '',
radio: '',
flame: '',
plug: '',
coins: '',
banknote: '',
card: '',
chart: '',
trending: '',
package: '',
upload: '',
download: '',
checkCircle:'',
check: '',
lock: '',
shield: '',
receipt: '',
car: '',
notebook: '',
camera: '',
flask: '',
graduation: '',
medal: '',
user: '',
users: '',
briefcase: '',
key: '',
mic: '',
scroll: '',
alert: '',
cake: '',
target: '',
calendar: '',
sun: '',
sprout: '',
refresh: '',
plus: '',
minus: '',
swap: '',
mapPin: '',
folder: '',
externalLink:'',
image: '',
megaphone: '',
lightbulb: '',
laptop: '',
monitor: '',
paperclip: '',
message: '',
bot: '',
star: '',
clock: '',
disc: '',
fuel: '',
plusCircle: '',
circle: '',
play: '',
arrowRight: '',
};
// Емодзі → ім'я іконки
const E = {
'👔':'briefcase','🏷':'tag','📐':'ruler','🪨':'mountain','🔍':'search','📋':'clipboard',
'⚙️':'settings','⚙':'settings','🏺':'book','🏛':'landmark','🗺':'map','📗':'book','📨':'mail',
'✏️':'pencil','✏':'pencil','✎':'pencil','✍️':'pencil','✍':'pencil','📝':'pencil',
'🌳':'trees','🛝':'shapes','🧱':'brick','🧮':'calculator','🏗':'construction','📄':'file',
'🔧':'wrench','🛠':'wrench','🛠️':'wrench','🧰':'wrench','🌬':'wind','🌬️':'wind','🍽':'utensils','🍽️':'utensils',
'💧':'droplet','⚡':'zap','⚡️':'zap','📡':'radio','🔥':'flame','🔌':'plug','💰':'coins','💵':'banknote',
'📊':'chart','📈':'trending','📑':'files','📦':'package','📤':'upload','📥':'download',
'✅':'checkCircle','✓':'check','🔐':'lock','💳':'card','🧾':'receipt','🚗':'car','📓':'notebook',
'📷':'camera','✉':'mail','✉️':'mail','🏭':'factory','🏘':'building','🏘️':'building','🔬':'flask','🛡':'shield','🛡️':'shield',
'👷':'hardhat','🏢':'building','💡':'lightbulb','💻':'laptop','📎':'paperclip','🖥':'monitor','🖥️':'monitor',
'📢':'megaphone','🏦':'landmark','🤝':'users','🎓':'graduation','🎖':'medal','🎖️':'medal',
'👤':'user','🏫':'building','🏡':'home','🔑':'key','👥':'users','📚':'book','🎤':'mic','📜':'scroll',
'⚠':'alert','⚠️':'alert','🎂':'cake','🎯':'target','📅':'calendar','🏖':'sun','🏖️':'sun',
'🌱':'sprout','🔄':'refresh','➕':'plus','➖':'minus','⇄':'swap','📍':'mapPin','📁':'folder',
'↗':'externalLink','↗️':'externalLink','🖼':'image','🖼️':'image','📕':'book','📘':'book',
'💬':'message','🤖':'bot','★':'star','⭐':'star','⏱':'clock','⏱️':'clock','💿':'disc','⛽':'fuel',
'+':'plus','−':'minus','➗':'dot','→':'arrowRight','↑':'upload','🅿️':'car','🅿':'car','•':'dot',
};
function Icon(props) {
const { name, e, size, stroke, className, style } = props || {};
const key = name || E[e] || (e ? 'dot' : 'dot');
const inner = I[key] || I.dot;
const s = size != null ? size : '1.1em';
return React.createElement('svg', {
className: 'ic' + (className ? ' ' + className : ''),
width: s, height: s, viewBox: '0 0 24 24',
fill: 'none', stroke: 'currentColor',
strokeWidth: stroke != null ? stroke : 1.8,
strokeLinecap: 'round', strokeLinejoin: 'round',
'aria-hidden': true,
style: { flexShrink: 0, ...(style || {}) },
dangerouslySetInnerHTML: { __html: inner },
});
}
// ВАЖЛИВО: не чіпаємо існуючий window.Icon (об'єкт із Plus/Check/X…).
// Лінійна система живе під window.Ico.
window.Ico = Icon;
window.ICON_PATHS = I;
window.EMOJI_ICONS = E;
window.emojiIcon = function (emoji) { return E[emoji] || 'dot'; };
})();