_includes/layouts/ReferenceLayout.11y.tsx (74 lines of code) (raw):
import { BaseLayout } from "./BaseLayout.11ty";
import { LayoutProps } from "../../src/models";
import Pagination from "../pagination/Pagination.11ty";
import { ResourceFrontmatter } from "../../src/ResourceModels";
import { Fragment } from "jsx-async-runtime/jsx-dev-runtime";
export type ReferenceLayoutProps = {
content: string;
listing: JSX.Element;
logo?: string;
thumbnail?: string;
icon?: string;
accent?: string;
} & LayoutProps &
ResourceFrontmatter;
export function ReferenceLayout(data: ReferenceLayoutProps): JSX.Element {
const { content, listing, pagination } = data;
const safeListing = <div class="columns is-multiline">{listing}</div>;
const pages = (
<section class="section" aria-label="Pagination">
<div class="container">
{pagination && <Pagination pagination={pagination} />}
{safeListing}
{pagination && <Pagination pagination={pagination} />}
</div>
</section>
);
let figure: JSX.Element;
if (data.thumbnail) {
const isGuest = (data as any).guest;
figure = (
<Fragment>
{isGuest && <span class={"guest-author-badge"}>Community</span>}
<img src={data.thumbnail} alt={data.title} />
</Fragment>
);
} else if (data.icon) {
figure = <i class={`${data.icon} has-text-${data.accent} fa-5x`} />;
} else if (data.logo) {
figure = <img src={data.logo} alt={data.title} />;
} else {
figure = undefined;
}
return (
<BaseLayout {...data}>
<section class="section">
<div class="container">
<div class="is-flex">
{figure && (
<span class="mr-4">
<figure class="image is-128x128 has-text-centered">
{figure}
</figure>
</span>
)}
<div>
<h1 class="mt-2 mb-4 title is-size-2 is-size-3-mobile has-text-weight-bold">
{data.title}
</h1>
{data.subtitle && (
<p class="subtitle is-size-4 has-text-grey mb-5">
{data.subtitle}
</p>
)}
</div>
</div>
{content && content != data.subtitle && (
<div class="content pt-2">{content}</div>
)}
</div>
</section>
{pages}
</BaseLayout>
);
}