diff --git a/view/LayersSheet.tsx b/view/LayersSheet.tsx index bb7b5e3..ae19625 100644 --- a/view/LayersSheet.tsx +++ b/view/LayersSheet.tsx @@ -12,6 +12,8 @@ import { resolveLayerDrop } from "@input/index"; import type { DocumentActions } from "@app/document-actions"; import { addArtboard, addEmptyLayer, addGroupLayer, addLayerMask, deleteSelection, groupLayers, moveLayer } from "@operations/document/layerActions"; import { MaskOperationButtons, MaskStatus } from "./layers/MaskControls"; +import { LayerThumbnail } from "./layers/LayerThumbnail"; +import { createLayerThumbnailIndex, type LayerThumbnailModel } from "./layers/thumbnailModel"; export type LayersSheetProps = { document: ImageDocument; @@ -72,6 +74,7 @@ function LayersSheetBody({ const canGroup = Boolean(selection.artboardId && selection.layerIds.length > 0); const canUngroup = selectedLayer?.layer.type === "group"; const maskLayerIds = documentIndex.maskLayerIds; + const thumbnailByLayerId = useMemo(() => createLayerThumbnailIndex(document, documentIndex.assetById, maskLayerIds), [document, documentIndex, maskLayerIds]); return ( <> @@ -182,6 +185,7 @@ function LayersSheetBody({ setEditingTitle={setEditingTitle} maskLayerIds={maskLayerIds} maskEdit={maskEdit} + thumbnailByLayerId={thumbnailByLayerId} dispatch={dispatch} /> )) @@ -207,6 +211,7 @@ function LayerRow({ setEditingTitle, maskLayerIds, maskEdit, + thumbnailByLayerId, dispatch, }: { document: ImageDocument; @@ -220,6 +225,7 @@ function LayerRow({ setEditingTitle: (editingTitle: EditingTitle | undefined) => void; maskLayerIds: ReadonlySet; maskEdit?: MaskEditState; + thumbnailByLayerId: ReadonlyMap; dispatch: AppStore["dispatch"]; }) { if (maskLayerIds.has(layer.id)) return null; @@ -231,6 +237,8 @@ function LayerRow({ const maskAsset = maskLayer && maskLayer.type !== "group" ? documentIndex.assetById.get(maskLayer.assetId) : undefined; const canAddMask = Boolean(layerInfo && layer.type !== "group" && !layerMask); const editingMask = Boolean(maskEdit && layerMask && maskEdit.targetLayerId === layer.id && maskEdit.maskLayerId === layerMask.maskLayerId); + const thumbnail = thumbnailByLayerId.get(layer.id) ?? { kind: "empty" }; + const maskThumbnail = maskLayer ? thumbnailByLayerId.get(maskLayer.id) : undefined; const rowPadding = 12 + depth * 16; return ( @@ -260,6 +268,14 @@ function LayerRow({ + + + {maskThumbnail ? ( + + + + ) : null} + {editingTitle?.type === "layer" && editingTitle.id === layer.id ? ( {layerMask ? ( -
- - {maskLayer ? "Layer mask" : "Layer mask missing"} +
+