@alauda/doom
Version:
Doctor Doom making docs.
20 lines (19 loc) • 1.06 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import BananaSlug from '@rspress/shared/github-slugger';
import { Children, useMemo } from 'react';
import { X } from './_X.js';
// TODO: use context to simplify the usage of `slugger`
export const HeadingTitle = ({ slug, slugger, level, children, }) => {
const HeadingComponents = useMemo(() => {
return [null, X.h1, X.h2, X.h3, X.h4, X.h5, X.h6];
}, []);
const HeadingComponent = HeadingComponents[level];
const slugFromChildren = useMemo(() =>
// eslint-disable-next-line @eslint-react/no-children-to-array
Children.toArray(children)
.filter((it) => typeof it === 'string' && !!it.trim())
.join(''), [children]);
const id = useMemo(() => [slug || slugger?.slug(slugFromChildren)].filter(Boolean).join('-') ||
undefined, [slug, slugger, slugFromChildren]);
return (_jsxs(HeadingComponent, { id: id, children: [_jsx(X.a, { className: "rp-header-anchor", href: `#${id}`, "aria-hidden": true, children: "#" }), children] }));
};