export { createProject, setCanvasSize } from "./project"; export { createLayer, addLayer, removeLayer, moveLayer, updateLayerTransform, reorderLayer, setLayerEffect, removeLayerEffect, setLayerVisible, setEffectEnabled, } from "./layers"; export type { LayerFactoryOptions, TransformPatch } from "./layers"; export { normalizeProject } from "./normalize"; export { serializeProjectFile, parseProjectFile } from "./serialization"; export { getEffectDefinition, normalizeEffect } from "./effects/registry"; export type { EffectDefinition } from "./effects/registry"; export { faceBlurDefinition } from "./effects/face-blur"; export { getToolDefinition, getAllTools } from "./tools/registry"; export type { ToolDefinition, ToolInteractionMode, EditorToolId, } from "./tools/registry"; export { HISTORY_LIMIT, capHistory, cloneLayer, cloneProject, computeHistoryFlags, deepClone, makeHistory, resolveSelectedLayerId, } from "./history"; export type { HistoryState } from "./history"; import type { Layer, LayerEffect, Project } from "@pien-studio/types"; import { addLayer, moveLayer, removeLayer, reorderLayer, setLayerEffect, updateLayerTransform, } from "./layers"; import { setCanvasSize } from "./project"; export type EditorOperation = | { type: "addLayer"; layer: Layer } | { type: "removeLayer"; layerId: string } | { type: "moveLayer"; layerId: string; delta: { dx: number; dy: number } } | { type: "updateLayerTransform"; layerId: string; patch: import("./layers").TransformPatch; } | { type: "reorderLayer"; layerId: string; toIndex: number } | { type: "setLayerEffect"; layerId: string; effect: LayerEffect } | { type: "setCanvasSize"; width: number; height: number; unit?: "px" | "in" | "cm"; }; export function applyOperation( project: Project, operation: EditorOperation, ): Project { switch (operation.type) { case "addLayer": return addLayer(project, operation.layer); case "removeLayer": return removeLayer(project, operation.layerId); case "moveLayer": return moveLayer(project, operation.layerId, operation.delta); case "updateLayerTransform": return updateLayerTransform(project, operation.layerId, operation.patch); case "reorderLayer": return reorderLayer(project, operation.layerId, operation.toIndex); case "setLayerEffect": return setLayerEffect(project, operation.layerId, operation.effect); case "setCanvasSize": return setCanvasSize( project, operation.width, operation.height, operation.unit, ); default: return project; } }