From 16516d33304b24fc76c4226d8b7889d040f53c9f Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Sun, 16 Feb 2025 17:59:06 +0100 Subject: [PATCH] Heading with echo component --- .../heading-with-echo/heading-with-echo.css | 53 +++++++++++++++++++ .../heading-with-echo.jdd.tsx | 44 +++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 src/back/jdd-components/heading-with-echo/heading-with-echo.css create mode 100644 src/back/jdd-components/heading-with-echo/heading-with-echo.jdd.tsx diff --git a/src/back/jdd-components/heading-with-echo/heading-with-echo.css b/src/back/jdd-components/heading-with-echo/heading-with-echo.css new file mode 100644 index 0000000..62ef89e --- /dev/null +++ b/src/back/jdd-components/heading-with-echo/heading-with-echo.css @@ -0,0 +1,53 @@ +.heading-with-echo { + position: relative; + + --shadow-offset-y: 15px; + + padding-top: calc(var(--shadow-offset-y) * 3); + padding-bottom: calc(var(--shadow-offset-y)); + + &.heading-with-echo--blur { + backdrop-filter: blur(5px); + } + + & > * { + width: 100%; + text-align: center; + text-wrap: balance; + color: var(--color-brand-text-fg); + font-size: 40px; + margin: 0; + } + + .fancy-heading__main { + z-index: 1; + position: relative; + + /* https://owumaro.github.io/text-stroke-generator/ */ + text-shadow: var(--color-brand-canvas) 1px 0px 0px, + var(--color-brand-canvas) 0.540302px 0.841471px 0px, + var(--color-brand-canvas) -0.416147px 0.909297px 0px, + var(--color-brand-canvas) -0.989993px 0.14112px 0px, + var(--color-brand-canvas) -0.653644px -0.756803px 0px, + var(--color-brand-canvas) 0.283662px -0.958924px 0px, + var(--color-brand-canvas) 0.96017px -0.279416px 0px; + } + + .fancy-heading__shadow1, + .fancy-heading__shadow2 { + position: absolute; + top: 20px; + color: transparent; + -webkit-text-stroke-color: var(--color-brand-text-fg); + -webkit-text-stroke-width: 1px; + user-select: none; + } + + .fancy-heading__shadow1 { + top: calc(var(--shadow-offset-y) * 1); + } + + .fancy-heading__shadow2 { + top: calc(var(--shadow-offset-y) * 2); + } +} diff --git a/src/back/jdd-components/heading-with-echo/heading-with-echo.jdd.tsx b/src/back/jdd-components/heading-with-echo/heading-with-echo.jdd.tsx new file mode 100644 index 0000000..424a7cf --- /dev/null +++ b/src/back/jdd-components/heading-with-echo/heading-with-echo.jdd.tsx @@ -0,0 +1,44 @@ +import { TempstreamJSX } from "tempstream"; +import type { ComponentToHTMLArgs } from "@sealcode/jdd"; +import { Component, ComponentArguments } from "@sealcode/jdd"; + +const component_arguments = { + title: new ComponentArguments.ShortText(), + level: new ComponentArguments.Enum(["1", "2", "3", "4", "5", "6"]).setExampleValues([ + "2", + ]), + blur_backdrop: new ComponentArguments.Enum(["true", "false"]), + font_family: new ComponentArguments.Enum([ + "industrial", + "sans-serif", + "serif", + "slab-serif", + "headings", + ]), +} as const; + +export class HeadingWithEcho extends Component { + getArguments() { + return component_arguments; + } + + async toHTML({ + args: { title, level, font_family, blur_backdrop }, + classes, + }: ComponentToHTMLArgs): Promise { + return ( +
+ {`${title}`} + {`${title}`} + {`${title}`} +
+ ); + } +}