@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!
84 lines (78 loc) • 2.22 kB
text/typescript
// No imports needed from @pdfme/common
import {
TextAlignCenterIcon,
TextAlignLeftIcon,
TextAlignRightIcon,
TextAlignJustifyIcon,
TextStrikethroughIcon,
TextUnderlineIcon,
TextVerticalAlignBottomIcon,
TextVerticalAlignMiddleIcon,
TextVerticalAlignTopIcon,
} from './icons/index.js';
import {
ALIGN_CENTER,
ALIGN_RIGHT,
DEFAULT_ALIGNMENT,
DEFAULT_VERTICAL_ALIGNMENT,
VERTICAL_ALIGN_BOTTOM,
VERTICAL_ALIGN_MIDDLE,
ALIGN_JUSTIFY,
} from './constants.js';
export enum Formatter {
STRIKETHROUGH = 'strikethrough',
UNDERLINE = 'underline',
ALIGNMENT = 'alignment',
VERTICAL_ALIGNMENT = 'verticalAlignment',
}
interface GroupButtonBoolean {
key: Formatter;
icon: string;
type: 'boolean';
}
interface GroupButtonString {
key: Formatter;
icon: string;
type: 'select';
value: string;
}
type GroupButton = GroupButtonBoolean | GroupButtonString;
export function getExtraFormatterSchema(i18n: (key: string) => string): {
title: string;
widget: string;
buttons: GroupButton[];
span: number;
} {
const buttons: GroupButton[] = [
{ key: Formatter.STRIKETHROUGH, icon: TextStrikethroughIcon, type: 'boolean' },
{ key: Formatter.UNDERLINE, icon: TextUnderlineIcon, type: 'boolean' },
{ key: Formatter.ALIGNMENT, icon: TextAlignLeftIcon, type: 'select', value: DEFAULT_ALIGNMENT },
{ key: Formatter.ALIGNMENT, icon: TextAlignCenterIcon, type: 'select', value: ALIGN_CENTER },
{ key: Formatter.ALIGNMENT, icon: TextAlignRightIcon, type: 'select', value: ALIGN_RIGHT },
{ key: Formatter.ALIGNMENT, icon: TextAlignJustifyIcon, type: 'select', value: ALIGN_JUSTIFY },
{
key: Formatter.VERTICAL_ALIGNMENT,
icon: TextVerticalAlignTopIcon,
type: 'select',
value: DEFAULT_VERTICAL_ALIGNMENT,
},
{
key: Formatter.VERTICAL_ALIGNMENT,
icon: TextVerticalAlignMiddleIcon,
type: 'select',
value: VERTICAL_ALIGN_MIDDLE,
},
{
key: Formatter.VERTICAL_ALIGNMENT,
icon: TextVerticalAlignBottomIcon,
type: 'select',
value: VERTICAL_ALIGN_BOTTOM,
},
];
return {
title: i18n('schemas.text.format'),
widget: 'ButtonGroup',
buttons,
span: 24,
};
}