| import joinGridValue from '../lib/joinGridValue.js'; | |
| /** | |
| * @param {import('postcss-value-parser').ParsedValue} gridAutoFlow | |
| * @return {import('postcss-value-parser').ParsedValue | string} | |
| */ | |
| const normalizeGridAutoFlow = (gridAutoFlow) => { | |
| const newValue = { front: '', back: '' }; | |
| let shouldNormalize = false; | |
| gridAutoFlow.walk((node) => { | |
| if (node.value === 'dense') { | |
| shouldNormalize = true; | |
| newValue.back = node.value; | |
| } else if (['row', 'column'].includes(node.value.trim().toLowerCase())) { | |
| shouldNormalize = true; | |
| newValue.front = node.value; | |
| } else { | |
| shouldNormalize = false; | |
| } | |
| }); | |
| if (shouldNormalize) { | |
| return `${newValue.front.trim()} ${newValue.back.trim()}`; | |
| } | |
| return gridAutoFlow; | |
| }; | |
| /** | |
| * @param {import('postcss-value-parser').ParsedValue} gridGap | |
| * @return {import('postcss-value-parser').ParsedValue | string} | |
| */ | |
| const normalizeGridColumnRowGap = (gridGap) => { | |
| const newValue = { front: '', back: '' }; | |
| let shouldNormalize = false; | |
| gridGap.walk((node) => { | |
| // console.log(node); | |
| if (node.value === 'normal') { | |
| shouldNormalize = true; | |
| newValue.front = node.value; | |
| } else { | |
| newValue.back = `${newValue.back} ${node.value}`; | |
| } | |
| }); | |
| if (shouldNormalize) { | |
| return `${newValue.front.trim()} ${newValue.back.trim()}`; | |
| } | |
| return gridGap; | |
| }; | |
| /** | |
| * @param {import('postcss-value-parser').ParsedValue} grid | |
| * @return {string | string[]} | |
| */ | |
| const normalizeGridColumnRow = (grid) => { | |
| // cant do normalization here using node, so copy it as a string | |
| const gridValue = grid.toString().split('/'); // node -> string value, split -> " 2 / 3 span " -> [' 2','3 span '] | |
| if (gridValue.length > 1) { | |
| return joinGridValue( | |
| gridValue.map((gridLine) => { | |
| const normalizeValue = { | |
| front: '', | |
| back: '', | |
| }; | |
| const trimmedGridLine = gridLine.trim(); // '3 span ' -> '3 span' | |
| for (const node of trimmedGridLine.split(' ')) { | |
| // ['3','span'] | |
| if (node === 'span') { | |
| normalizeValue.front = node; // span _ | |
| } else { | |
| normalizeValue.back = `${normalizeValue.back} ${node}`; // _ 3 | |
| } | |
| } | |
| return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`; // span 3 | |
| }) | |
| // returns "2 / span 3" | |
| ); | |
| } | |
| // doing this separating if `/` is not present as while joining('/') , it will add `/` at the end | |
| return gridValue.map((gridLine) => { | |
| const normalizeValue = { | |
| front: '', | |
| back: '', | |
| }; | |
| const trimmedGridLine = gridLine.trim(); | |
| for (const node of trimmedGridLine.split(' ')) { | |
| if (node === 'span') { | |
| normalizeValue.front = node; | |
| } else { | |
| normalizeValue.back = `${normalizeValue.back} ${node}`; | |
| } | |
| } | |
| return `${normalizeValue.front.trim()} ${normalizeValue.back.trim()}`; | |
| }); | |
| }; | |
| export { | |
| normalizeGridAutoFlow, | |
| normalizeGridColumnRowGap, | |
| normalizeGridColumnRow, | |
| }; |