Add table with markdown

This commit is contained in:
Kuba Orlik 2025-12-29 22:50:00 +01:00
parent 6f3d42e1bb
commit c9170b963d
2 changed files with 85 additions and 0 deletions

View File

@ -0,0 +1,24 @@
.table-with-markdown {
width: 100%;
display: flex;
flex-flow: column;
align-items: center;
background: var(--color-brand-text-bg);
padding: 16px;
table,
td,
th {
border: 1px solid black;
}
td,
th {
padding: 8px 16px;
}
th {
font-weight: bold;
font-size: 16px;
}
}

View File

@ -0,0 +1,61 @@
import { TempstreamJSX } from "tempstream";
import type { ComponentToHTMLArgs } from "@sealcode/jdd";
import { Component, ComponentArguments, isTableHeader } from "@sealcode/jdd";
const component_arguments = {
table: new ComponentArguments.Table(
new ComponentArguments.ShortText(),
new ComponentArguments.Structured({
type: new ComponentArguments.Enum(["td", "th"]).setExampleValues(["td"]),
content: new ComponentArguments.ShortText().setExampleValues([""]),
})
),
} as const;
export class TableWithMarkdown extends Component<typeof component_arguments> {
getArguments() {
return component_arguments;
}
toHTML({
args: { table },
classes,
index,
jdd_context: { render_markdown, language },
}: ComponentToHTMLArgs<typeof component_arguments>) {
return (
<div
class={["table-with-markdown", ...classes]}
style={`--jdd-index: ${index}`}
>
<table>
<tbody>
{table.rows.map((row) =>
isTableHeader(row) ? (
<tr>
<th
colspan={this.getArguments()
.table.getColumnsCount(table)
.toString()}
>
{row.header_content}
</th>
</tr>
) : (
<tr>
{row.cells.map(({ type, content }) =>
type == "td" ? (
<td>{render_markdown(language, content)}</td>
) : (
<th>{render_markdown(language, content)}</th>
)
)}
</tr>
)
)}
</tbody>
</table>
</div>
);
}
}