// Deterministic pseudo-random helpers for stable D3 renders. (function (root) { const chartUtils = root.chartUtils; const random = chartUtils.random; random.hashString = value => { let hash = 2166136261; const text = String(value == null ? "" : value); for (let i = 0; i < text.length; i++) { hash ^= text.charCodeAt(i); hash = Math.imul(hash, 16777619); } return hash >>> 0; }; random.seed = (jsonData, salt = "") => { const data = jsonData && jsonData.data ? jsonData.data : {}; const columns = Array.isArray(data.columns) ? data.columns : []; const rows = Array.isArray(data.data) ? data.data : []; return random.hashString([ salt, jsonData && jsonData.name, jsonData && jsonData.chart_name, rows.length, JSON.stringify(columns.map(column => [ column && column.name, column && column.role, column && column.data_type, ])), ].join("|")); }; random.generator = (jsonDataOrSeed, salt = "") => { let state = typeof jsonDataOrSeed === "number" ? jsonDataOrSeed >>> 0 : random.seed(jsonDataOrSeed, salt); return () => { state = (state + 0x6D2B79F5) >>> 0; let t = state; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; }; }; random.value = (jsonData, salt = "") => random.generator(jsonData, salt)(); random.id = (jsonData, salt = "") => random.seed(jsonData, salt).toString(36); })(globalThis);