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"],
};