0 || undefined}
+ data-shape={shape}
+ data-slot="cropper"
+ role="group"
+ tabIndex={disabled ? undefined : 0}
+ aria-disabled={disabled || undefined}
+ aria-label={props["aria-label"] ?? "Image cropper"}
+ className={cn(
+ "relative isolate cursor-grab touch-none overflow-hidden bg-muted outline-none select-none focus-visible:ring-2 focus-visible:ring-ring data-[disabled]:cursor-not-allowed data-[interacting]:cursor-grabbing data-[shape=circle]:rounded-full",
+ className
+ )}
+ style={{ aspectRatio, ...style }}
+ onDoubleClick={handleDoubleClick}
+ onKeyDown={handleKeyDown}
+ onPointerCancel={handlePointerEnd}
+ onPointerDown={handlePointerDown}
+ onPointerMove={handlePointerMove}
+ onPointerUp={handlePointerEnd}
+ onWheel={handleWheel}
+ {...props}
+ >
+

0 ? 1 : 0,
+ transform: `translate(-50%, -50%) translate3d(${currentValue.x}px, ${currentValue.y}px, 0)`,
+ width: renderedImage.width || undefined,
+ }}
+ onLoad={(event) => {
+ const nextImage = {
+ height: event.currentTarget.naturalHeight,
+ width: event.currentTarget.naturalWidth,
+ }
+ setImage(nextImage)
+ onImageLoad?.(nextImage)
+ }}
+ />
+
+ {showGrid &&
}
+ {children}
+
+ )
+ }
+)
+
+function CropperGrid() {
+ return (
+