Repository URL to install this package:
Version:
0.9.5 ▾
|
import { isNumber, isString, isArray, toNumber } from 'exotic'
import { SVGSpecsProps, StripedMeasurementType } from './typings'
import ImagePlaceholder from './ImagePlaceholder'
import TextPlaceholder from './TextPlaceholder'
import ParagraphPlaceholder from './ParagraphPlaceholder'
import CirclePlaceholder from './CirclePlaceholder'
import RectanglePlaceholder from './RectanglePlaceholder'
import SquarePlaceholder from './SquarePlaceholder'
export function getSVGSpecs(
stringyWidthNumber: string | number,
stringyHeightNumber: string | number,
xPos: string | number = 0,
ypos: string | number = 0
): SVGSpecsProps {
const width = stripMeasurement(stringyWidthNumber)
const height = stripMeasurement(stringyHeightNumber)
const x = stripMeasurement(xPos)
const y = stripMeasurement(ypos)
const viewBox = `${x} ${y} ${width} ${height}`
return {
x,
y,
width,
height,
viewBox,
}
}
export function stripMeasurement(
stringyNumber: string | number
): StripedMeasurementType {
if (isNumber(stringyNumber)) {
return stringyNumber
} else if (isString(stringyNumber)) {
// @todo split
const isPercentage = stringyNumber.indexOf('%') !== -1
const match = stringyNumber.match(/(\d)+/gim)
if (isArray(match)) {
const found = match.pop()
if (isPercentage) {
return found + '%'
} else {
return toNumber(found)
}
}
} else {
console.warn(
'[stripMeasurement] invalid arg: must be number or string, you provided: ',
typeof stringyNumber
)
return 0
}
return 0
}
export function fromBreedToComponent(breedType: string) {
switch (breedType) {
case 'text':
return TextPlaceholder
case 'paragraph':
return ParagraphPlaceholder
case 'media':
case 'image':
return ImagePlaceholder
case 'circle':
case 'round':
return CirclePlaceholder
case 'rectangle':
return RectanglePlaceholder
case 'square':
default:
return SquarePlaceholder
}
}