import "../module-globals.js"; import React from "react"; const header = defineComponent({ name: "header", schema: z.object({ basics: z.object({ name: z.string(), subtitle: z.string().nullish() }), fromAddress: z.string().array().nullish(), letterDate: z.string().nullish(), }), component: ({ spec, styles, getComponent }) => { const Markdown = getComponent({ name: "markdown" }); return ( <> {spec.basics.name} {spec.basics.subtitle} {spec.fromAddress?.join("\n")} {spec.letterDate} ); }, defaultStyles: { container: { marginTop: "8pt", }, innerContainer: { display: "flex", flexDirection: "row", borderBottom: "1pt solid #666666", paddingBottom: "8pt", marginBottom: "8pt", }, title: { fontSize: "34pt", textTransform: "uppercase", letterSpacing: "4pt", marginBottom: "4pt", }, subtitle: { fontSize: "16pt", flexGrow: 1, }, address: { textAlign: "right", fontStyle: "italic", lineHeight: ".85", }, date: { textAlign: "right", }, } as const, }); const toAddress = defineComponent({ name: "toAddress", schema: z.object({ toAddress: z.string().array().nullish(), }), component: ({ spec, styles, getComponent }) => { const Markdown = getComponent({ name: "markdown" }); return ( <> {spec.toAddress?.join("\n")} ); }, defaultStyles: { container: {}, address: { lineHeight: ".85", }, } as const, }); const body = defineComponent({ name: "body", schema: z.object({ basics: z.object({ subject: z.string().nullish(), }), body: z.string(), config: z.object({ paragraphSpacing: z.string().nullish() }).nullish(), }), component: ({ spec, styles, getComponent }) => { const Markdown = getComponent(defaultComponents.markdown); return ( <> {spec.basics.subject} {spec.body} ); }, defaultStyles: { container: { marginTop: "20pt" }, subject: { fontSize: "16pt", marginBottom: "14pt" }, body: {}, } as const, }); export default { config: { components: { header, toAddress, body, }, }, order: ["header", "toAddress", "body"], };