1
0
Fork 0
freesewing/packages/react/components/Pattern/text.mjs
Joost De Cock 51dc1d9732
[breaking]: FreeSewing v4 (#7297)
Refer to the CHANGELOG for all info.

---------

Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com>
Co-authored-by: Josh Munic <jpmunic@gmail.com>
Co-authored-by: Jonathan Haas <haasjona@gmail.com>
2025-04-01 16:15:20 +02:00

55 lines
1.7 KiB
JavaScript

// eslint-disable-next-line no-unused-vars
import React from 'react'
import { translateStrings } from './utils.mjs'
export const TextSpans = ({ point, strings }) => {
const translated = translateStrings(point.attributes.list['data-text'], strings)
const text = []
if (translated.indexOf('\n') !== -1) {
// Handle muti-line text
let key = 0
let lines = translated.split('\n')
text.push(<tspan key={'tspan-' + key}>{lines.shift()}</tspan>)
for (let line of lines) {
key++
text.push(
<tspan
key={'tspan-' + key}
x={point.x}
dy={point.attributes.list['data-text-lineheight']?.[0] || 12}
>
{line.toString().replace(/&quot;/g, '"')}
</tspan>
)
}
} else text.push(<tspan key="tspan">{translated}</tspan>)
return text
}
export const Text = ({ point, strings }) => (
<text x={point.x} y={point.y} {...point.attributes.textProps}>
<TextSpans point={point} strings={strings} />
</text>
)
export const TextOnPath = ({ path, pathId, strings }) => {
const textPathProps = {
xlinkHref: '#' + pathId,
startOffset: '0%',
}
const translated = translateStrings(path.attributes.text, strings)
const align = path.attributes.list['data-text-class']
? path.attributes.list['data-text-class'].join(' ')
: false
if (align && align.indexOf('center') > -1) textPathProps.startOffset = '50%'
else if (align && align.indexOf('right') > -1) textPathProps.startOffset = '100%'
return (
<text>
<textPath {...textPathProps}>
<tspan {...path.attributes.textProps} dangerouslySetInnerHTML={{ __html: translated }} />
</textPath>
</text>
)
}