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