"use client"; import * as React from "react"; import type { ToolcraftCommand, ToolcraftImageAsset, ToolcraftMediaAsset, ToolcraftState, } from "../../state/types"; import type { ToolcraftCanvasFrame } from "../../state/canvas-frame"; import { getCanvasMediaTransformStyle } from "./canvas-media-transform"; import { getSceneElementPresentationRect } from "./scene-element-presentation-rect"; import { isToolcraftLayerVisibleInTree } from "../layers/layer-tree"; import { useToolcraftMediaPresentationUrls } from "../app-shell/toolcraft-source-asset-context"; type ToolcraftCanvasImageAsset = ToolcraftImageAsset & { size: NonNullable; }; function cn(...classNames: Array): string { return classNames.filter(Boolean).join(" "); } function isDefaultCanvasImageAsset( state: ToolcraftState, mediaAsset: ToolcraftMediaAsset, ): mediaAsset is ToolcraftCanvasImageAsset { return ( mediaAsset.assetKind === "image" && mediaAsset.lifecycle !== "unavailable" && mediaAsset.size !== undefined && isToolcraftLayerVisibleInTree(state.layers, mediaAsset.layerId) ); } export function getVisibleCanvasImageAssets( state: ToolcraftState, ): ToolcraftCanvasImageAsset[] { return state.mediaAssets.filter((mediaAsset) => isDefaultCanvasImageAsset(state, mediaAsset), ); } export function CanvasDefaultMediaLayer({ canvasFrame, dispatch, mediaAsset, selected, }: { canvasFrame: ToolcraftCanvasFrame; dispatch: React.Dispatch; mediaAsset: ToolcraftCanvasImageAsset; selected: boolean; }): React.JSX.Element { const presentationRect = getSceneElementPresentationRect( canvasFrame, mediaAsset, ); const infinite = canvasFrame.kind === "infinite"; const mediaAssets = React.useMemo(() => [mediaAsset], [mediaAsset]); const previewSrc = useToolcraftMediaPresentationUrls(mediaAssets).get( mediaAsset.id, ); return ( ); }