ttcMD: add col-span logic to blocks and cards

This commit is contained in:
Emmaline Autumn 2024-03-16 04:07:26 -06:00
parent a72741e4d1
commit f6474f934c
3 changed files with 21 additions and 8 deletions

View File

@ -1,6 +1,6 @@
import { sanitize } from "isomorphic-dompurify"; import { sanitize } from "isomorphic-dompurify";
import Link from "next/link"; import Link from "next/link";
import { Fragment } from "react"; import React, { Fragment } from "react";
import { Poppable } from "../poppables/components/poppable"; import { Poppable } from "../poppables/components/poppable";
import { Accordion, AccordionContent } from "../accordion"; import { Accordion, AccordionContent } from "../accordion";
@ -110,7 +110,10 @@ export const buildOnlyDefaultElements = () => {
} as React.CSSProperties} } as React.CSSProperties}
className="grid grid-cols-dynamic gap-x-8 gap-y-6 mb-6" className="grid grid-cols-dynamic gap-x-8 gap-y-6 mb-6"
> >
{children?.map((c) => <div key={c.uuid}>{c.render(c)}</div>)} {children?.map((c) => {
const Comp = c.metadata.span ? Fragment : "div";
return <Comp key={c.uuid}>{c.render(c)}</Comp>;
})}
</div> </div>
); );
}, },
@ -121,17 +124,21 @@ export const buildOnlyDefaultElements = () => {
// card // card
registerIdentifier( registerIdentifier(
"card", "card",
/\[{2}([\s\S]*?)\n+\]{2}/g, /\[{2}[\s\S]*?\n+\]{2}/g,
(s) => { (s) => {
const rx = /\[{2}(!?)\s*?\n+([\s\S]*)\n+\]{2}/; const rx = /\[{2}((?:!?)(?:[0-9]?))\s*?\n+([\s\S]*)\n+\]{2}/;
const match = s.match(rx); const match = s.match(rx);
const [_, isBlock, content] = match || ["", "", s]; const [_, isBlockOrSpan, content] = match || ["", "", s];
const isBlock = isBlockOrSpan.includes("!");
const span = Number(isBlockOrSpan.replace("!", ""));
return { return {
content: content.trim(), content: content.trim(),
raw: s, raw: s,
metadata: { metadata: {
isBlock, isBlock,
span,
}, },
uuid: crypto.randomUUID(), uuid: crypto.randomUUID(),
rendersChildrenOnly, rendersChildrenOnly,
@ -142,7 +149,10 @@ export const buildOnlyDefaultElements = () => {
return ( return (
<div <div
data-block={!!metadata.isBlock} data-block={!!metadata.isBlock}
className="data-[block=false]:card mb-6" style={{
"--v-span": metadata.span || 1,
} as React.CSSProperties}
className="data-[block=false]:card data-[block=false]:mb-6 col-span-2"
> >
{children?.map((e) => <Fragment key={e.uuid}>{e.render(e)} {children?.map((e) => <Fragment key={e.uuid}>{e.render(e)}
</Fragment>)} </Fragment>)}
@ -265,7 +275,7 @@ export const buildOnlyDefaultElements = () => {
(token) => { (token) => {
return ( return (
<div <div
// id={generateId(token.raw, usedIds)} id={token.metadata.id}
data-strength={token.metadata.strength} data-strength={token.metadata.strength}
className={` className={`
font-bold font-bold

View File

@ -11,7 +11,7 @@ export const createElements = (body: string): Token[] => {
const tokenize = (body: string) => { const tokenize = (body: string) => {
const tokenizedBody: TokenMarker[] = []; const tokenizedBody: TokenMarker[] = [];
body = body.replaceAll(/[ \t]+\n/g, "\n"); body = body.replaceAll(/[ \t]+\n/g, "\n").replaceAll(/\n{3,}/g, "\n\n");
const addToken = (thing: TokenMarker) => { const addToken = (thing: TokenMarker) => {
tokenizedBody.push(thing); tokenizedBody.push(thing);

View File

@ -46,6 +46,9 @@ const config: Config = {
height: { height: {
variable: "var(--v-height)", variable: "var(--v-height)",
}, },
gridColumn: {
variable: "span var(--v-span) / span var(--v-span)",
},
}, },
}, },
plugins: [], plugins: [],