返回 presentation-ai
steps-element-static.tsx
根目录 / src / components / notebook / presentation / editor / custom-elements / static / steps-element-static.tsx
1 import { SlateElement, type SlateElementProps } from "platejs/static";
2
3 import { cn } from "@/lib/utils";
4 import { type TStepsGroupElement } from "../../plugins/steps-plugin";
5 import { getDefaultColumnSize } from "../../utils";
6
7 const columnSizeToColumns: Record<string, number> = {
8 sm: 4,
9 md: 3,
10 lg: 2,
11 xl: 1,
12 };
13
14 export default function StepsElementStatic(props: SlateElementProps) {
15 const element = props.element as TStepsGroupElement;
16 const columnSize =
17 element.columnSize ?? getDefaultColumnSize(element.children.length);
18
19 const columns = columnSizeToColumns[columnSize] ?? 3;
20
21 const isVertical = columns === 1;
22 const horizontalAlignment = "items-stretch";
23
24 return (
25 <SlateElement {...props} className="my-4">
26 <div
27 className={cn(
28 "grid w-full",
29 isVertical ? "grid-flow-row gap-4" : `${horizontalAlignment} gap-6`,
30 )}
31 style={
32 isVertical
33 ? { gridTemplateColumns: "1fr" }
34 : { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` }
35 }
36 >
37 {props.children}
38 </div>
39 </SlateElement>
40 );
41 }
42
42 lines Plain Text