ttcMD: adds additional formatting to card to make an unstyled block
ttcMD components: tweaked the look of accordions to stack together properly
This commit is contained in:
parent
192479020d
commit
606a90b050
@ -60,6 +60,19 @@
|
|||||||
.skeleton {
|
.skeleton {
|
||||||
@apply animate-pulse bg-black/20 rounded-md text-white/0;
|
@apply animate-pulse bg-black/20 rounded-md text-white/0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* .accordion {
|
||||||
|
@apply first-of-type:rounded-t-md last-of-type:rounded-b-md;
|
||||||
|
} */
|
||||||
|
.accordion:not(.accordion + .accordion) {
|
||||||
|
@apply rounded-t-md;
|
||||||
|
}
|
||||||
|
.accordion:has(+ .accordion) {
|
||||||
|
@apply border-b border-black/20;
|
||||||
|
}
|
||||||
|
.accordion:not(:has(+ .accordion)) {
|
||||||
|
@apply rounded-b-md;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes identifier {
|
@keyframes identifier {
|
||||||
|
@ -45,15 +45,13 @@ export const TTCMD: FC<
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Suspense fallback={<MDSkeletonLoader />}>
|
<Suspense fallback={<MDSkeletonLoader />}>
|
||||||
{
|
<button
|
||||||
/* <button
|
|
||||||
className="btn-primary"
|
className="btn-primary"
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
navigator.clipboard.writeText(JSON.stringify(elements, null, 2))}
|
navigator.clipboard.writeText(JSON.stringify(elements, null, 2))}
|
||||||
>
|
>
|
||||||
copy ast
|
copy ast
|
||||||
</button> */
|
</button>
|
||||||
}
|
|
||||||
{hasEscapedTOC !== undefined &&
|
{hasEscapedTOC !== undefined &&
|
||||||
(
|
(
|
||||||
<TTCMDRenderer
|
<TTCMDRenderer
|
||||||
@ -137,7 +135,10 @@ function render(token: Token, usedIds: string[]) {
|
|||||||
);
|
);
|
||||||
case "card":
|
case "card":
|
||||||
return (
|
return (
|
||||||
<div className="card mb-6">
|
<div
|
||||||
|
data-block={!!token.metadata.isBlock}
|
||||||
|
className="data-[block=false]:card mb-6"
|
||||||
|
>
|
||||||
{token.children?.map((e) => (
|
{token.children?.map((e) => (
|
||||||
<Fragment key={e.uuid}>
|
<Fragment key={e.uuid}>
|
||||||
{render(e, usedIds)}
|
{render(e, usedIds)}
|
||||||
@ -210,7 +211,7 @@ function render(token: Token, usedIds: string[]) {
|
|||||||
);
|
);
|
||||||
case "accordion":
|
case "accordion":
|
||||||
return (
|
return (
|
||||||
<div className="bg-black/20 p-1 rounded-md">
|
<div className="bg-black/20 p-1 accordion">
|
||||||
<Accordion
|
<Accordion
|
||||||
title={token.metadata.title || "Expand"}
|
title={token.metadata.title || "Expand"}
|
||||||
>
|
>
|
||||||
@ -269,6 +270,8 @@ function render(token: Token, usedIds: string[]) {
|
|||||||
);
|
);
|
||||||
case "hr":
|
case "hr":
|
||||||
return <div className="w-full border-b border-mixed-500 my-3"></div>;
|
return <div className="w-full border-b border-mixed-500 my-3"></div>;
|
||||||
|
case "comment":
|
||||||
|
return <></>;
|
||||||
default:
|
default:
|
||||||
return (
|
return (
|
||||||
<div className="p bg-red-600 text-white">
|
<div className="p bg-red-600 text-white">
|
||||||
|
@ -24,7 +24,9 @@ export const Accordion: FC<PropsWithChildren<IProps>> = (
|
|||||||
className="flex justify-between cursor-pointer"
|
className="flex justify-between cursor-pointer"
|
||||||
onClick={() => !expandOnHover && setOpen(!open)}
|
onClick={() => !expandOnHover && setOpen(!open)}
|
||||||
>
|
>
|
||||||
|
<div className="accordion-title">
|
||||||
{title}
|
{title}
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
className={`
|
className={`
|
||||||
group-hover/hover:-rotate-180
|
group-hover/hover:-rotate-180
|
||||||
|
@ -56,20 +56,22 @@ TokenIdentifiers.set("grid", {
|
|||||||
});
|
});
|
||||||
|
|
||||||
TokenIdentifiers.set("card", {
|
TokenIdentifiers.set("card", {
|
||||||
rx: /\[{2}\n+([\s\S]*?)\n+\]{2}/g,
|
rx: /\[{2}([\s\S]*?)\n+\]{2}/g,
|
||||||
search(s, start, end) {
|
search(s, start, end) {
|
||||||
const rx = /\[\[/g;
|
const rx = /\[\[/g;
|
||||||
const crx = /\]\]/g;
|
const crx = /\]\]/g;
|
||||||
return search(s, start, end, rx, crx);
|
return search(s, start, end, rx, crx);
|
||||||
},
|
},
|
||||||
parse(s) {
|
parse(s) {
|
||||||
const rx = /\[{2}\n+([\s\S]*)\n+\]{2}/;
|
const rx = /\[{2}(!?)\n+([\s\S]*)\n+\]{2}/;
|
||||||
const [_, content] = s.match(rx) || ["", "Unable to parse card"];
|
const [_, isBlock, content] = s.match(rx) || ["", "Unable to parse card"];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
content: content.trim(),
|
content: content.trim(),
|
||||||
raw: s,
|
raw: s,
|
||||||
metadata: {},
|
metadata: {
|
||||||
|
isBlock,
|
||||||
|
},
|
||||||
type: "card",
|
type: "card",
|
||||||
uuid: crypto.randomUUID(),
|
uuid: crypto.randomUUID(),
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user