UNPKG

@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!

105 lines (103 loc) 3.33 kB
import type { PropPanel } from '@pdfme/common'; import type { TableSchema } from './types.js'; import { getFallbackFontName, DEFAULT_FONT_NAME } from '@pdfme/common'; import { getDefaultCellStyles, getCellPropPanelSchema, getColumnStylesPropPanelSchema, } from './helper.js'; import { HEX_COLOR_PATTERN } from '../constants.js'; export const propPanel: PropPanel<TableSchema> = { schema: ({ activeSchema, options, i18n }) => { // @ts-expect-error Type casting is necessary here as the activeSchema type is generic const tableSchema = activeSchema as TableSchema; const head = tableSchema.head || []; const showHead = tableSchema.showHead || false; const font = options.font || { [DEFAULT_FONT_NAME]: { data: '', fallback: true } }; const fontNames = Object.keys(font); const fallbackFontName = getFallbackFontName(font); return { showHead: { title: i18n('schemas.table.showHead'), type: 'boolean', widget: 'checkbox', span: 24, }, '-------': { type: 'void', widget: 'Divider' }, tableStyles: { title: i18n('schemas.table.tableStyle'), type: 'object', widget: 'Card', span: 24, properties: { borderWidth: { title: i18n('schemas.borderWidth'), type: 'number', widget: 'inputNumber', props: { min: 0, step: 0.1 }, step: 1, }, borderColor: { title: i18n('schemas.borderColor'), type: 'string', widget: 'color', props: { disabledAlpha: true, }, rules: [{ pattern: HEX_COLOR_PATTERN, message: i18n('validation.hexColor') }], }, }, }, headStyles: { hidden: !showHead, title: i18n('schemas.table.headStyle'), type: 'object', widget: 'Card', span: 24, properties: getCellPropPanelSchema({ i18n, fallbackFontName, fontNames }), }, bodyStyles: { title: i18n('schemas.table.bodyStyle'), type: 'object', widget: 'Card', span: 24, properties: getCellPropPanelSchema({ i18n, fallbackFontName, fontNames, isBody: true }), }, columnStyles: { title: i18n('schemas.table.columnStyle'), type: 'object', widget: 'Card', span: 24, properties: getColumnStylesPropPanelSchema({ head, i18n }), }, }; }, defaultSchema: { name: '', type: 'table', position: { x: 0, y: 0 }, width: 150, height: 20, content: JSON.stringify([ ['Alice', 'New York', 'Alice is a freelance web designer and developer'], ['Bob', 'Paris', 'Bob is a freelance illustrator and graphic designer'], ]), showHead: true, head: ['Name', 'City', 'Description'], headWidthPercentages: [30, 30, 40], tableStyles: { borderColor: '#000000', borderWidth: 0.3, }, headStyles: Object.assign(getDefaultCellStyles(), { fontColor: '#ffffff', backgroundColor: '#2980ba', borderColor: '', borderWidth: { top: 0, right: 0, bottom: 0, left: 0 }, }), bodyStyles: Object.assign(getDefaultCellStyles(), { alternateBackgroundColor: '#f5f5f5', }), columnStyles: {}, }, };