mirror of
https://github.com/zoriya/react-native-svg.git
synced 2025-12-20 22:05:14 +00:00
57 lines
1.1 KiB
JavaScript
57 lines
1.1 KiB
JavaScript
const meetOrSliceTypes = {
|
|
meet: 0,
|
|
slice: 1,
|
|
none: 2
|
|
};
|
|
|
|
const alignEnum = [
|
|
"xMinYMin",
|
|
"xMidYMin",
|
|
"xMaxYMin",
|
|
"xMinYMid",
|
|
"xMidYMid",
|
|
"xMaxYMid",
|
|
"xMinYMax",
|
|
"xMidYMax",
|
|
"xMaxYMax",
|
|
"none"
|
|
].reduce((prev, name) => {
|
|
prev[name] = name;
|
|
return prev;
|
|
}, {});
|
|
|
|
const spacesRegExp = /\s+/;
|
|
|
|
export default function(props) {
|
|
const { viewBox, preserveAspectRatio } = props;
|
|
|
|
if (!viewBox) {
|
|
return null;
|
|
}
|
|
|
|
let params = viewBox.trim().split(spacesRegExp);
|
|
|
|
if (params.length === 4 && params.every(param => !isNaN(+params))) {
|
|
console.warn("Invalid `viewBox` prop:" + viewBox);
|
|
return null;
|
|
}
|
|
|
|
let modes = preserveAspectRatio
|
|
? preserveAspectRatio.trim().split(spacesRegExp)
|
|
: [];
|
|
|
|
let meetOrSlice = meetOrSliceTypes[modes[1]] || 0;
|
|
let align = alignEnum[modes[0]] || "xMidYMid";
|
|
|
|
return {
|
|
minX: +params[0],
|
|
minY: +params[1],
|
|
vbWidth: +params[2],
|
|
vbHeight: +params[3],
|
|
align,
|
|
meetOrSlice
|
|
};
|
|
}
|
|
|
|
export { meetOrSliceTypes, alignEnum };
|