Files
AtreidesAssetsFree/client/ui/charting.js
T
2026-10-29 11:57:29 +01:00

49 lines
2.0 KiB
JavaScript

// Generated, do not edit. sha256:ee03300e55aca9bafacba37ec01daf41bd49c8f2f20ec64a315107a3b816d0b3
let chartingPromise = null;
export function loadCharting(libs, { failed = (src) => `Cannot load ${src}.` } = {}) {
if (chartingPromise) return chartingPromise;
const c = libs;
const addScript = src => new Promise((resolve, reject) => {
const s = document.createElement('script');
s.src = src; s.async = false;
s.onload = resolve; s.onerror = () => reject(new Error(failed(src)));
document.head.appendChild(s);
});
chartingPromise = (async () => {
if (!window.Chart) await addScript(c.CHARTJS);
if (!window.Hammer) await addScript(c.HAMMER);
await addScript(c.ZOOM);
return window.Chart;
})();
chartingPromise.catch(() => { chartingPromise = null; });
return chartingPromise;
}
export function hexToRgb(hex) {
const s = String(hex || '').trim().replace(/^#/, '');
const full = s.length === 3 ? s.split('').map(c => c + c).join('') : s;
if (!/^[0-9a-fA-F]{6}$/.test(full)) return null;
return { r: parseInt(full.slice(0, 2), 16), g: parseInt(full.slice(2, 4), 16), b: parseInt(full.slice(4, 6), 16) };
}
export function tintSeries(hex, count, { min = 0.28, max = 1 } = {}) {
const n = Math.max(0, Math.floor(count) || 0);
if (n === 0) return [];
const rgb = hexToRgb(hex) || { r: 128, g: 128, b: 128 };
const step = n === 1 ? 0 : (max - min) / (n - 1);
return Array.from({ length: n }, (_, i) => `rgba(${rgb.r},${rgb.g},${rgb.b},${Math.round((max - i * step) * 1000) / 1000})`);
}
export function readPalette() {
const cs = getComputedStyle(document.documentElement);
const v = n => cs.getPropertyValue(n).trim();
const accent = v('--accent');
return {
text: v('--text-primary'), textSec: v('--text-sec'), textTer: v('--text-ter'), grid: v('--border'),
accent, accentSoft: v('--accent-soft'), pos: v('--pos'), neg: v('--neg'), surface: v('--bg-elevated'),
tooltipBg: v('--bg-overlay'), borderMid: v('--border-mid'),
series: (n) => tintSeries(accent, n, { min: 0.45 }),
};
}