UNPKG

@wordpress/components

Version:
8 lines (7 loc) 7.29 kB
{ "version": 3, "sources": ["../../src/border-box-control/utils.ts"], "sourcesContent": ["/**\n * External dependencies\n */\n\n/**\n * Internal dependencies\n */\nimport { parseCSSUnitValue } from '../utils/unit-values';\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst borderProps = ['color', 'style', 'width'];\nexport const isEmptyBorder = border => {\n if (!border) {\n return true;\n }\n return !borderProps.some(prop => border[prop] !== undefined);\n};\nexport const isDefinedBorder = border => {\n // No border, no worries :)\n if (!border) {\n return false;\n }\n\n // If we have individual borders per side within the border object we\n // need to check whether any of those side borders have been set.\n if (hasSplitBorders(border)) {\n const allSidesEmpty = sides.every(side => isEmptyBorder(border[side]));\n return !allSidesEmpty;\n }\n\n // If we have a top-level border only, check if that is empty. e.g.\n // { color: undefined, style: undefined, width: undefined }\n // Border radius can still be set within the border object as it is\n // handled separately.\n return !isEmptyBorder(border);\n};\nexport const isCompleteBorder = border => {\n if (!border) {\n return false;\n }\n return borderProps.every(prop => border[prop] !== undefined);\n};\nexport const hasSplitBorders = (border = {}) => {\n return Object.keys(border).some(side => sides.indexOf(side) !== -1);\n};\nexport const hasMixedBorders = borders => {\n if (!hasSplitBorders(borders)) {\n return false;\n }\n const shorthandBorders = sides.map(side => getShorthandBorderStyle(borders?.[side]));\n return !shorthandBorders.every(border => border === shorthandBorders[0]);\n};\nexport const getSplitBorders = border => {\n if (!border || isEmptyBorder(border)) {\n return undefined;\n }\n return {\n top: border,\n right: border,\n bottom: border,\n left: border\n };\n};\nexport const getBorderDiff = (original, updated) => {\n const diff = {};\n if (original.color !== updated.color) {\n diff.color = updated.color;\n }\n if (original.style !== updated.style) {\n diff.style = updated.style;\n }\n if (original.width !== updated.width) {\n diff.width = updated.width;\n }\n return diff;\n};\nexport const getCommonBorder = borders => {\n if (!borders) {\n return undefined;\n }\n const colors = [];\n const styles = [];\n const widths = [];\n sides.forEach(side => {\n colors.push(borders[side]?.color);\n styles.push(borders[side]?.style);\n widths.push(borders[side]?.width);\n });\n const allColorsMatch = colors.every(value => value === colors[0]);\n const allStylesMatch = styles.every(value => value === styles[0]);\n const allWidthsMatch = widths.every(value => value === widths[0]);\n return {\n color: allColorsMatch ? colors[0] : undefined,\n style: allStylesMatch ? styles[0] : undefined,\n width: allWidthsMatch ? widths[0] : getMostCommonUnit(widths)\n };\n};\nexport const getShorthandBorderStyle = (border, fallbackBorder) => {\n if (isEmptyBorder(border)) {\n return fallbackBorder;\n }\n const {\n color: fallbackColor,\n style: fallbackStyle,\n width: fallbackWidth\n } = fallbackBorder || {};\n const {\n color = fallbackColor,\n style = fallbackStyle,\n width = fallbackWidth\n } = border;\n const hasVisibleBorder = !!width && width !== '0' || !!color;\n const borderStyle = hasVisibleBorder ? style || 'solid' : style;\n return [width, borderStyle, color].filter(Boolean).join(' ');\n};\nexport const getMostCommonUnit = values => {\n // Collect all the CSS units.\n const units = values.map(value => value === undefined ? undefined : parseCSSUnitValue(`${value}`)[1]);\n\n // Return the most common unit out of only the defined CSS units.\n const filteredUnits = units.filter(value => value !== undefined);\n return mode(filteredUnits);\n};\n\n/**\n * Finds the mode value out of the array passed favouring the first value\n * as a tiebreaker.\n *\n * @param values Values to determine the mode from.\n *\n * @return The mode value.\n */\nfunction mode(values) {\n if (values.length === 0) {\n return undefined;\n }\n const map = {};\n let maxCount = 0;\n let currentMode;\n values.forEach(value => {\n map[value] = map[value] === undefined ? 1 : map[value] + 1;\n if (map[value] > maxCount) {\n currentMode = value;\n maxCount = map[value];\n }\n });\n return currentMode;\n}"], "mappings": "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", "names": [] }