const internals = { kDefaultStages: [25, 50, 75], }; /** * Convert percentage to pixel size * @param {number} percentage - Percentage value (can be negative) * @param {number} dimension - Dimension in pixels * @returns {number} Pixel value */ export function percentToPixel(percentage, dimension) { return (percentage * dimension) / 100; } /** * Get stage values from parsed map or use defaults * @param {Array} stageOverrides - Stage overrides from parsed map * @returns {Array} Array of 3 stage values */ export function getStageValues(stageOverrides) { const stages = [...internals.kDefaultStages]; if (stageOverrides && stageOverrides.length > 0) { stageOverrides.forEach((override) => { const index = { i: 0, ii: 1, iii: 2 }[override.stage]; if (index !== undefined) { stages[index] = override.value; } }); } return stages; } /** * Creates a render-friendly component map. * @param {Array} The list of components * @param {number} mapWidth - Map width in pixels * @param {number} mapHeight - Map height in pixels * @returns {Map} Pixel value */ export function createComponentMap(components, width, height) { return components.reduce((map, current) => { map[current.label.toLowerCase()] = [ percentToPixel(current.coordinates[0], width), percentToPixel(current.coordinates[1], height), ]; return map; }, {}); }