@pdfme/schemas
Version:
TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!
58 lines • 2.16 kB
JavaScript
import { rotatePoint, convertForPdfLayoutProps, hex2PrintingColor, createSvgStr, } from '../utils.js';
import { HEX_COLOR_PATTERN } from '../constants.js';
import { Minus } from 'lucide';
const DEFAULT_LINE_COLOR = '#000000';
const lineSchema = {
pdf: (arg) => {
const { page, schema, options } = arg;
if (schema.width === 0 || schema.height === 0 || !schema.color)
return;
const { colorType } = options;
const pageHeight = page.getHeight();
const { width, height, rotate, position: { x, y }, opacity, } = convertForPdfLayoutProps({ schema, pageHeight, applyRotateTranslate: false });
const pivot = { x: x + width / 2, y: y + height / 2 };
page.drawLine({
start: rotatePoint({ x, y: y + height / 2 }, pivot, rotate.angle),
end: rotatePoint({ x: x + width, y: y + height / 2 }, pivot, rotate.angle),
thickness: height,
color: hex2PrintingColor(schema.color ?? DEFAULT_LINE_COLOR, colorType),
opacity: opacity,
});
},
ui: (arg) => {
const { schema, rootElement } = arg;
const div = document.createElement('div');
div.style.backgroundColor = schema.color ?? 'transparent';
div.style.width = '100%';
div.style.height = '100%';
rootElement.appendChild(div);
},
propPanel: {
schema: ({ i18n }) => ({
color: {
title: i18n('schemas.color'),
type: 'string',
widget: 'color',
props: {
disabledAlpha: true,
},
required: true,
rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }],
},
}),
defaultSchema: {
name: '',
type: 'line',
position: { x: 0, y: 0 },
width: 50,
height: 0.5,
rotate: 0,
opacity: 1,
readOnly: true,
color: DEFAULT_LINE_COLOR,
},
},
icon: createSvgStr(Minus),
};
export default lineSchema;
//# sourceMappingURL=line.js.map