diff options
| author | Ruben Beltran del Rio <jj@r.bdr.sh> | 2025-12-15 16:30:22 +0100 |
|---|---|---|
| committer | Ruben Beltran del Rio <jj@r.bdr.sh> | 2025-12-16 00:19:32 +0100 |
| commit | 566eb2c9cce799ed8a3becc6d81560f1540eaacf (patch) | |
| tree | 4a711b16ff15c61842856a2bf2b830079f30bbcf /src/utils.js | |
Initial Release
Diffstat (limited to 'src/utils.js')
| -rw-r--r-- | src/utils.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..8f6458e --- /dev/null +++ b/src/utils.js @@ -0,0 +1,50 @@ +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<number>} 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<Object>} 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; + }, {}); +} |