{ "name": "cropper-controlled-demo", "type": "registry:example", "registryDependencies": [ "cropper", "button", "label", "slider" ], "files": [ { "path": "examples/cropper-controlled-demo.tsx", "type": "registry:example", "content": "\"use client\";\n\nimport { RotateCcwIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Button } from \"@/registry/bases/base/ui/button\";\nimport {\n Cropper,\n CropperArea,\n CropperImage,\n type CropperPoint,\n} from \"@/registry/bases/base/ui/cropper\";\nimport { Label } from \"@/registry/bases/base/ui/label\";\nimport { Slider } from \"@/registry/bases/base/ui/slider\";\n\nexport default function CropperControlledDemo() {\n const id = React.useId();\n const [crop, setCrop] = React.useState({ x: 0, y: 0 });\n const [zoom, setZoom] = React.useState(1);\n const [rotation, setRotation] = React.useState(0);\n\n const onCropReset = React.useCallback(() => {\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setRotation(0);\n }, []);\n\n return (\n
\n \n \n \n \n
\n
\n \n \n setZoom(Array.isArray(value) ? (value[0] ?? 1) : value)\n }\n min={1}\n max={3}\n step={0.1}\n />\n
\n
\n \n \n setRotation(Array.isArray(value) ? (value[0] ?? 0) : value)\n }\n min={-180}\n max={180}\n step={1}\n />\n
\n
\n \n \n \n
\n );\n}\n", "target": "" } ] }