From 2ee0a44735d2b930348e9774909638b2c1909738 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 29 Apr 2026 01:28:50 +0200 Subject: refactor: unify element params --- apps/web/src/rendering/components/blending-tab.tsx | 0 .../web/src/rendering/components/transform-tab.tsx | 0 apps/web/src/rendering/index.ts | 70 ++++++++++++++++++++++ 3 files changed, 70 insertions(+) delete mode 100644 apps/web/src/rendering/components/blending-tab.tsx delete mode 100644 apps/web/src/rendering/components/transform-tab.tsx (limited to 'apps/web/src/rendering') diff --git a/apps/web/src/rendering/components/blending-tab.tsx b/apps/web/src/rendering/components/blending-tab.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/web/src/rendering/components/transform-tab.tsx b/apps/web/src/rendering/components/transform-tab.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/web/src/rendering/index.ts b/apps/web/src/rendering/index.ts index c5555371..21e66447 100644 --- a/apps/web/src/rendering/index.ts +++ b/apps/web/src/rendering/index.ts @@ -1,3 +1,5 @@ +import type { ParamValues } from "@/params"; + export interface Transform { scaleX: number; scaleY: number; @@ -26,3 +28,71 @@ export type BlendMode = | "saturation" | "color" | "luminosity"; + +export function buildTransformFromParams({ + params, +}: { + params: ParamValues; +}): Transform { + return { + scaleX: readNumberParam({ params, key: "transform.scaleX", fallback: 1 }), + scaleY: readNumberParam({ params, key: "transform.scaleY", fallback: 1 }), + position: { + x: readNumberParam({ params, key: "transform.positionX", fallback: 0 }), + y: readNumberParam({ params, key: "transform.positionY", fallback: 0 }), + }, + rotate: readNumberParam({ params, key: "transform.rotate", fallback: 0 }), + }; +} + +export function readOpacityFromParams({ + params, +}: { + params: ParamValues; +}): number { + return readNumberParam({ params, key: "opacity", fallback: 1 }); +} + +export function readBlendModeFromParams({ + params, +}: { + params: ParamValues; +}): BlendMode { + const value = params.blendMode; + return typeof value === "string" && isBlendMode(value) ? value : "normal"; +} + +function readNumberParam({ + params, + key, + fallback, +}: { + params: ParamValues; + key: string; + fallback: number; +}): number { + const value = params[key]; + return typeof value === "number" ? value : fallback; +} + +function isBlendMode(value: string): value is BlendMode { + return ( + value === "normal" || + value === "darken" || + value === "multiply" || + value === "color-burn" || + value === "lighten" || + value === "screen" || + value === "plus-lighter" || + value === "color-dodge" || + value === "overlay" || + value === "soft-light" || + value === "hard-light" || + value === "difference" || + value === "exclusion" || + value === "hue" || + value === "saturation" || + value === "color" || + value === "luminosity" + ); +} -- cgit v1.3.1