cropper
diceui-base/cropperFreeComponent
diceui/base publishes no description for this item.
Install it
npx shadcn@latest add https://raw.githubusercontent.com/sadmann7/diceui/HEAD/docs/public/r/styles/base-vega/cropper.jsonSource
1"use client";23import { mergeProps } from "@base-ui/react/merge-props";4import { useRender } from "@base-ui/react/use-render";5import { cva, type VariantProps } from "class-variance-authority";6import * as React from "react";7import { cn } from "@/lib/utils";8import { useAsRef } from "@/registry/bases/base/hooks/use-as-ref";9import { useIsomorphicLayoutEffect } from "@/registry/bases/base/hooks/use-isomorphic-layout-effect";10import { useLazyRef } from "@/registry/bases/base/hooks/use-lazy-ref";11import { useComposedRefs } from "@/registry/bases/base/lib/compose-refs";1213const ROOT_NAME = "Cropper";14const ROOT_IMPL_NAME = "CropperImpl";15const IMAGE_NAME = "CropperImage";16const VIDEO_NAME = "CropperVideo";17const AREA_NAME = "CropperArea";1819interface Point {20 x: number;21 y: number;22}2324interface GestureEvent extends UIEvent {25 rotation: number;26 scale: number;27 clientX: number;28 clientY: number;29}3031interface Size {32 width: number;33 height: number;34}3536interface Area {37 width: number;38 height: number;39 x: number;40 y: number;41}4243interface MediaSize {44 width: number;45 height: number;46 naturalWidth: number;47 naturalHeight: number;48}4950type Shape = "rectangle" | "circle";51type ObjectFit = "contain" | "cover" | "horizontal-cover" | "vertical-cover";5253const MAX_CACHE_SIZE = 200;54const DPR = typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1;5556const rotationSizeCache = new Map<string, Size>();57const cropSizeCache = new Map<string, Size>();58const croppedAreaCache = new Map<59 string,60 { croppedAreaPercentages: Area; croppedAreaPixels: Area }61>();62const onPositionClampCache = new Map<string, Point>();6364function clamp(value: number, min: number, max: number): number {65 return Math.min(Math.max(value, min), max);66}6768function quantize(n: number, step = 2 / DPR): number {69 return Math.round(n / step) * step;70}7172function quantizePosition(n: number, step = 4 / DPR): number {73 return Math.round(n / step) * step;74}7576function quantizeZoom(n: number, step = 0.01): number {77 return Math.round(n / step) * step;78}7980function quantizeRotation(n: number, step = 1.0): number {81 return Math.round(n / step) * step;82}8384function snapToDevicePixel(n: number): number {85 return Math.round(n * DPR) / DPR;86}8788function lruGet<K, V>(map: Map<K, V>, key: K): V | undefined {89 const v = map.get(key);90 if (v !== undefined) {91 map.delete(key);92 map.set(key, v);93 }94 return v;95}9697function lruSet<K, V>(98 map: Map<K, V>,99 key: K,100 val: V,101// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from diceui/base
All 192 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| action-baraction-bar | diceui/base | Components | Free | 1 dep | |
| angle-sliderangle-slider | diceui/base | Components | Free | 1 dep · 3 files | |
| avatar-groupavatar-group | diceui/base | Components | Free | 1 dep | |
| badge-overflowbadge-overflow | diceui/base | Components | Free | 1 dep · 2 files | |
| bannerbanner | diceui/base | Components | Free | 1 dep | |
| circular-progresscircular-progress | diceui/base | Components | Free | 1 dep | |
| client-onlyclient-only | diceui/base | Components | Free | no deps | |
| color-pickercolor-picker | diceui/base | Components | Free | 1 dep · 2 files |
