improve TOC style somewhat

Still needs considerable work
This commit is contained in:
outfoxxed 2025-06-08 17:40:00 -07:00
parent 415c5f56ef
commit 44656699ef
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
19 changed files with 55 additions and 50 deletions

View file

@ -3,19 +3,22 @@ import TableOfContents from "./toc";
import type { ConfigHeading, TypeTOC } from "./types.d.ts";
export interface Props {
title?: string;
headings?: ConfigHeading[];
types?: TypeTOC;
mobile: boolean;
}
const { headings, types, mobile } = Astro.props;
const { title, headings, types, mobile } = Astro.props;
---
<div id="toc" aria-mobile={mobile} class=`toc-wrapper${mobile ? "-mobile":""}`>
<TableOfContents
config={headings}
type={types}
mobile={mobile}
client:idle
/>
</div>
{(headings?.length ?? 0) + (types?.length ?? 0) != 0 &&
<div id="toc" aria-mobile={mobile} class=`toc-wrapper${mobile ? "-mobile":""}`>
<TableOfContents
title={title}
config={headings}
type={types}
mobile={mobile}
client:idle
/>
</div>
}

View file

@ -11,15 +11,19 @@ import {
import { Heading } from "./Heading";
export const Table: Component<{
title?: string;
typeTOC?: TypeTOC;
configTOC?: ConfigTOC[];
}> = props => {
const { typeTOC, configTOC } = props;
const { title, typeTOC, configTOC } = props;
if (configTOC) {
return (
<div class="toc-content">
<p>Contents</p>
{title && <>
<p>{title}</p>
<hr/>
</>}
<For each={configTOC}>
{heading => (
<Heading

View file

@ -15,7 +15,7 @@ const TableOfContents: Component<TOCProps> = props => {
const [open, setOpen] = createSignal<boolean>(false);
const [clientWidth, setClientWidth] = createSignal<number>(0);
const [screenWidth, setScreenWidth] = createSignal<number>(0);
const { mobile, config, type } = props;
const { mobile, title, config, type } = props;
let tocRef: HTMLDivElement;
function toggle(e: MouseEvent) {
@ -27,9 +27,10 @@ const TableOfContents: Component<TOCProps> = props => {
return type ? (
<Table typeTOC={type} />
) : (
<Table configTOC={buildHierarchy(config!)} />
<Table title={title} configTOC={buildHierarchy(config!)} />
);
}
const handleClickOutside = (event: MouseEvent) => {
const isLink = "href" in (event.target || {});
const isInBody = document.body.contains(event.target as Node);
@ -97,7 +98,7 @@ const TableOfContents: Component<TOCProps> = props => {
{type ? (
<Table typeTOC={type} />
) : (
<Table configTOC={buildHierarchy(config!)} />
<Table title={title} configTOC={buildHierarchy(config!)} />
)}
</div>
</div>

View file

@ -17,6 +17,7 @@ export interface TreeProps {
// Right
export interface TOCProps {
title?: string;
config?: ConfigHeading[];
type?: TypeTableProps;
mobile: boolean;