@wordpress/block-editor
Version:
148 lines (147 loc) • 4.4 kB
JavaScript
// packages/block-editor/src/components/border-radius-control/utils.js
import { __experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue } from "@wordpress/components";
function mode(inputArray) {
const arr = [...inputArray];
return arr.sort(
(a, b) => inputArray.filter((v) => v === b).length - inputArray.filter((v) => v === a).length
).shift();
}
function getAllUnit(selectedUnits = {}) {
const { flat, ...cornerUnits } = selectedUnits;
return flat || mode(Object.values(cornerUnits).filter(Boolean)) || "px";
}
function getAllValue(values = {}) {
if (typeof values === "string") {
return values;
}
const parsedQuantitiesAndUnits = Object.values(values).map((value2) => {
const newValue = parseQuantityAndUnitFromRawValue(value2);
if (typeof value2 === "string" && newValue[0] === void 0) {
return [value2, ""];
}
return newValue;
});
const allValues = parsedQuantitiesAndUnits.map(
(value2) => value2[0] ?? ""
);
const allUnits = parsedQuantitiesAndUnits.map((value2) => value2[1]);
const value = allValues.every((v) => v === allValues[0]) ? allValues[0] : "";
const unit = mode(allUnits);
const allValue = value === 0 || value ? `${value}${unit || ""}` : void 0;
return allValue;
}
function hasMixedValues(values = {}) {
if (typeof values === "string") {
return false;
}
if (!values || typeof values !== "object") {
return false;
}
const cornerValues = Object.values(values);
if (cornerValues.length === 0) {
return false;
}
const firstValue = cornerValues[0];
const allSame = cornerValues.every((value) => value === firstValue);
return !allSame;
}
function hasDefinedValues(values) {
if (!values) {
return false;
}
if (typeof values === "string") {
return true;
}
const filteredValues = Object.values(values).filter((value) => {
return !!value || value === 0;
});
return !!filteredValues.length;
}
function isValuePreset(value) {
if (!value?.includes) {
return false;
}
return value === "0" || value.includes("var:preset|border-radius|");
}
function getPresetSlug(value) {
if (!value) {
return;
}
if (value === "0" || value === "default") {
return value;
}
const slug = value.match(/var:preset\|border-radius\|(.+)/);
return slug ? slug[1] : void 0;
}
function getSliderValueFromPreset(presetValue, presets) {
if (presetValue === void 0) {
return 0;
}
const slug = parseFloat(presetValue, 10) === 0 ? "0" : getPresetSlug(presetValue);
const sliderValue = presets.findIndex((size) => {
return String(size.slug) === slug;
});
return sliderValue !== -1 ? sliderValue : NaN;
}
function getCustomValueFromPreset(value, presets) {
if (!isValuePreset(value)) {
return value;
}
const slug = parseFloat(value, 10) === 0 ? "0" : getPresetSlug(value);
const radiusSize = presets.find((size) => String(size.slug) === slug);
return radiusSize?.size;
}
function getPresetValueFromControlValue(controlValue, controlType, presets) {
const size = parseInt(controlValue, 10);
if (controlType === "selectList") {
if (size === 0) {
return void 0;
}
} else if (size === 0) {
return "0";
}
return `var:preset|border-radius|${presets[controlValue]?.slug}`;
}
function getPresetValueFromCustomValue(value, presets) {
if (!value || isValuePreset(value) || value === "0") {
return value;
}
const spacingMatch = presets.find(
(size) => String(size.size) === String(value)
);
if (spacingMatch?.slug) {
return `var:preset|border-radius|${spacingMatch.slug}`;
}
return value;
}
function convertPresetsToCustomValues(values, presets) {
if (!values || typeof values !== "object") {
return values;
}
const converted = {};
Object.keys(values).forEach((key) => {
const value = values[key];
if (isValuePreset(value)) {
const customValue = getCustomValueFromPreset(value, presets);
converted[key] = customValue !== void 0 ? customValue : value;
} else {
converted[key] = value;
}
});
return converted;
}
export {
convertPresetsToCustomValues,
getAllUnit,
getAllValue,
getCustomValueFromPreset,
getPresetSlug,
getPresetValueFromControlValue,
getPresetValueFromCustomValue,
getSliderValueFromPreset,
hasDefinedValues,
hasMixedValues,
isValuePreset,
mode
};
//# sourceMappingURL=utils.js.map