import { __ } from "@wordpress/i18n"; import { useBlockProps, InspectorControls, MediaUpload, MediaUploadCheck, } from "@wordpress/block-editor"; import { PanelBody, Button, FocalPointPicker, RangeControl, ToolbarGroup, ToolbarButton, } from "@wordpress/components"; import { BlockControls } from "@wordpress/block-editor"; import { useState } from "@wordpress/element"; import "./editor.scss"; export default function Edit({ attributes, setAttributes }) { const { images, height } = attributes; const [selectedImageIndex, setSelectedImageIndex] = useState(null); const blockProps = useBlockProps(); const onSelectImages = (media) => { const newImages = media.map((img) => ({ id: img.id, url: img.url, alt: img.alt || "", focalPoint: { x: 0.5, y: 0.5 }, scale: 0.8, rotation: 0, })); setAttributes({ images: [...images, ...newImages] }); }; const updateImageFocalPoint = (index, focalPoint) => { const newImages = [...images]; newImages[index] = { ...newImages[index], focalPoint }; setAttributes({ images: newImages }); }; const updateImageScale = (index, scale) => { const newImages = [...images]; newImages[index] = { ...newImages[index], scale }; setAttributes({ images: newImages }); }; const updateImageRotation = (index, rotation) => { const newImages = [...images]; newImages[index] = { ...newImages[index], rotation }; setAttributes({ images: newImages }); }; const removeImage = (index) => { const newImages = images.filter((_, i) => i !== index); setAttributes({ images: newImages }); if (selectedImageIndex === index) { setSelectedImageIndex(null); } }; const moveImage = (index, direction) => { const newImages = [...images]; const newIndex = index + direction; if (newIndex >= 0 && newIndex < images.length) { [newImages[index], newImages[newIndex]] = [ newImages[newIndex], newImages[index], ]; setAttributes({ images: newImages }); setSelectedImageIndex(newIndex); } }; const getImageStyle = (image) => { const focalPoint = image.focalPoint || { x: 0.5, y: 0.5 }; const scale = image.scale || 0.8; const rotation = image.rotation || 0; return { left: `${focalPoint.x * 100}%`, top: `${focalPoint.y * 100}%`, transform: ` rotate(${rotation}deg) scale(${scale})`, }; }; return ( <> img.id)} render={({ open }) => ( {__("Add Images", "image-stack")} )} /> setAttributes({ height: value })} min={200} max={800} step={10} /> {images.length > 0 && ( {images.map((image, index) => ( setSelectedImageIndex( selectedImageIndex === index ? null : index ) } >
{image.alt}
updateImageFocalPoint(index, focalPoint) } /> updateImageScale(index, scale)} min={0.1} max={3} step={0.05} /> updateImageRotation(index, rotation)} min={-180} max={180} step={1} />
))}
)}
{images.length === 0 && (
( )} />
)} {images.map((image, index) => (
setSelectedImageIndex(index)} role="button" tabIndex={0} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { setSelectedImageIndex(index); } }} style={getImageStyle(image)} > {image.alt}
))}
); }