// Загрузчик спрайта иконок ДС KT AI (наложение платформы Vibe AI). // Внешний браузеры блокируют, поэтому спрайт вставляется в документ: // // // Путь к спрайту берётся рядом со скриптом; переопределить: data-sprite="/icons.svg". (function () { var s = document.currentScript; var url = (s && s.getAttribute("data-sprite")) || (s ? s.src.replace(/[^/]*$/, "kt-ai-lucide-sprite.svg") : "design-system/icons/kt-ai-lucide-sprite.svg"); // Модель иногда берёт «обычные» имена Lucide, которых в спрайте ДС нет: подменяем ближайшими, чтобы иконка не была пустой. var ALIAS = { shield: "lock", "shield-check": "check-circle", headset: "help", headphones: "help", phone: "megaphone", "phone-call": "megaphone", star: "trophy", award: "trophy", medal: "trophy", heart: "check-circle", "thumbs-up": "check-circle", globe: "external", wifi: "sync", signal: "chart", server: "database", cloud: "layers", cpu: "tool", zap: "sparkles", bolt: "sparkles", target: "lightbulb", briefcase: "building", "map-pin": "pin", "shopping-cart": "package", "credit-card": "receipt", wallet: "receipt", truck: "package", "bar-chart": "chart", "bar-chart-2": "chart", "pie-chart": "chart", activity: "chart", "trending-up": "arrowUpDown", "line-chart": "chart", "message-circle": "chat", "message-square": "chat", smartphone: "tool", monitor: "dashboard", laptop: "dashboard", "check-square": "checklist", "file-text": "file", "folder": "archive", image: "eye", camera: "eye", "user-check": "user", "user-plus": "users", "users-2": "users", "log-out": "logout", "log-in": "arrowRight", "arrow-up-right": "external", "chevron-up": "chevronDown", key: "lock", "alert-triangle": "warning", "x-circle": "x", "help-circle": "help", "info-circle": "info", "circle-check": "check-circle" }; function fixUses(root) { var uses = (root || document).querySelectorAll('use[href^="#"]'); for (var i = 0; i < uses.length; i++) { var id = uses[i].getAttribute("href").slice(1); if (!id || document.getElementById(id)) continue; var alt = ALIAS[id] || ALIAS[id.toLowerCase()] || "layers"; if (document.getElementById(alt)) { uses[i].setAttribute("href", "#" + alt); console.warn("[kt-ai-icons] иконки «" + id + "» нет в спрайте ДС, показана «" + alt + "» — поправь имя по списку в design.md"); } } } function inject(svgText) { if (document.getElementById("kt-ai-sprite")) { fixUses(); return; } var box = document.createElement("div"); box.id = "kt-ai-sprite"; box.setAttribute("aria-hidden", "true"); box.style.cssText = "position:absolute;width:0;height:0;overflow:hidden"; box.innerHTML = svgText; (document.body || document.documentElement).insertBefore(box, (document.body || document.documentElement).firstChild); fixUses(); if (window.MutationObserver) new MutationObserver(function () { fixUses(); }).observe(document.documentElement, { childList: true, subtree: true }); } var ready = fetch(url, { credentials: "same-origin" }).then(function (r) { if (!r.ok) throw new Error("sprite " + r.status); return r.text(); }) .then(function (t) { if (document.body) inject(t); else document.addEventListener("DOMContentLoaded", function () { inject(t); }); }) .catch(function (e) { console.warn("[kt-ai-icons] спрайт не загрузился:", e && e.message); }); window.KTIcons = { ready: ready, url: url }; })();