diff --git a/src/back/jdd-components/collage/collage.css b/src/back/jdd-components/collage/collage.css new file mode 100644 index 0000000..3481624 --- /dev/null +++ b/src/back/jdd-components/collage/collage.css @@ -0,0 +1,25 @@ +.collage { + display: grid; + grid-template-columns: 150px 150px 150px; + grid-template-rows: 20px 160px 20px repeat(calc(var(--images-count) - 1), 160px 20px); + justify-content: center; + + .collage__image { + grid-row: calc(2 * var(--collage-index) + 1) / calc(2 * var(--collage-index) + 4); + + &:nth-child(2n + 1) { + grid-column: 1/3; + } + + &:nth-child(2n) { + grid-column: 2/4; + } + } + + @container (max-width: 520px) { + display: flex !important; + flex-flow: column; + gap: 16px; + align-items: center; + } +} diff --git a/src/back/jdd-components/collage/collage.jdd.tsx b/src/back/jdd-components/collage/collage.jdd.tsx new file mode 100644 index 0000000..9dd4195 --- /dev/null +++ b/src/back/jdd-components/collage/collage.jdd.tsx @@ -0,0 +1,36 @@ +import { TempstreamJSX } from "tempstream"; +import type { ComponentToHTMLArgs } from "@sealcode/jdd"; +import { Component, ComponentArguments } from "@sealcode/jdd"; + +const component_arguments = { + images: new ComponentArguments.List(new ComponentArguments.Image()), +} as const; + +export class Collage extends Component { + getArguments() { + return component_arguments; + } + + async toHTML({ + args: { images }, + classes, + jdd_context: { render_image }, + }: ComponentToHTMLArgs): Promise { + return ( +
+ {images.map((image, index) => ( +
+ {render_image(image, { + container: { width: 300, height: 200 }, + crop: { width: 300, height: 200 }, + alt: "", + })} +
+ ))} +
+ ); + } +}