{ "name": "cropper-shapes-demo", "type": "registry:example", "registryDependencies": [ "cropper", "label", "select", "switch" ], "files": [ { "path": "examples/cropper-shapes-demo.tsx", "type": "registry:example", "content": "\"use client\";\n\nimport * as React from \"react\";\nimport {\n Cropper,\n CropperArea,\n CropperImage,\n type CropperObjectFit,\n type CropperPoint,\n type CropperProps,\n type CropperShape,\n} from \"@/registry/bases/base/ui/cropper\";\nimport { Label } from \"@/registry/bases/base/ui/label\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/registry/bases/base/ui/select\";\nimport { Switch } from \"@/registry/bases/base/ui/switch\";\n\nconst shapes: { label: string; value: CropperShape }[] = [\n { label: \"Rectangle\", value: \"rectangle\" },\n { label: \"Circle\", value: \"circle\" },\n] as const;\n\nconst objectFits: { label: string; value: CropperObjectFit }[] = [\n { label: \"Contain\", value: \"contain\" },\n { label: \"Cover\", value: \"cover\" },\n { label: \"Horizontal Cover\", value: \"horizontal-cover\" },\n { label: \"Vertical Cover\", value: \"vertical-cover\" },\n] as const;\n\nexport default function CropperShapesDemo() {\n const id = React.useId();\n const [crop, setCrop] = React.useState({ x: 0, y: 0 });\n const [zoom, setZoom] = React.useState(1);\n const [shape, setShape] =\n React.useState>(\"rectangle\");\n const [objectFit, setObjectFit] =\n React.useState>(\"contain\");\n const [withGrid, setWithGrid] = React.useState(false);\n const [allowOverflow, setAllowOverflow] = React.useState(false);\n\n return (\n
\n
\n
\n \n {\n if (value) setShape(value);\n }}\n >\n \n \n \n \n {shapes.map((s) => (\n \n {s.label}\n \n ))}\n \n \n
\n
\n \n {\n if (value) setObjectFit(value);\n }}\n >\n \n \n \n \n {objectFits.map((fit) => (\n \n {fit.label}\n \n ))}\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n \n \n
\n );\n}\n", "target": "" } ] }