Vercel UI SDK 0.1.0-beta.1 üzerine kurulu. API’si değişebilir.
Image cropper
Vercel UI SDK üzerinde yeniden boyutlandırılabilir seçim, en-boy oranları, yuvarlak avatar çerçevesi, yakınlaştırma, döndürme ve çevirme sunan bir görsel kırpıcı.
- Bileşen
- 10 parça
- 6 örnek
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-image-cropper.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/ui-sdk-image-cropper.tsx components/ui/button.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
UI SDK, ui-sdk adlı bir cascade katmanında kendi CSS’ini biraz ekler. Sınıflarınızın kazanması için bu katmanı genel stil dosyanızın en üstünde, Tailwind import’unun üzerinde tanımlayın.
Kırpma, görselin kendi pikselleri cinsinden, döndürme ve çevirmesiyle birlikte bir kutudur. Yükleyebileceğiniz bir dosya almak için onu cropImage fonksiyonuna verin. Başka bir siteden gelen görsel CORS gerektirir; yoksa tarayıcı sayfanın piksellerini okumasına izin vermez.
mode="frame" ile seçim sabit kalır, altındaki görseli kaydırıp yakınlaştırırsınız. shape="circle" onu yuvarlar; bu yüzden cropImage fonksiyonuna da shape: "circle" verin.
ImageCropperRotate görseli saat yönünde çeyrek tur döndürür, ImageCropperFlip aynalar. Alt öğe verilmezse İngilizce etiketli simge düğmeleridir.
Dosya input’undan gelen bir fotoğrafı object URL ile kırpın. Yeni bir fotoğrafın sıfırdan başlaması için kırpıcıya bir key verin.
onCropCommit bir sürükleme veya tuş basışı bittiğinde çalışır; kaydetmeyi orada yapın. createImageCropperController() ile oluşturulan bir controller kırpmayı her yerden ayarlar.
Devre dışı bir kırpıcı odak almaz, değişmez; yakınlaştırması ve düğmeleri de devre dışıdır.
| Tuş | Action |
|---|---|
| ←→↑↓ | Seçimi taşır; bir tutamaçtaysa kenarlarını taşır. |
| Shift← | On kat daha uzağa taşır. |
| +- | Kırpmanın ortasına göre yakınlaştırır veya uzaklaştırır. |
| R | Görseli saat yönünde çeyrek tur döndürür, Shift ile geri döndürür. |
| Esc | Sürükleme sırasında kırpmayı sürüklemenin başladığı yere geri koyar. |
Kırpıcı, aria-label ile adlandırılan bir gruptur. Seçim ve her tutamaç kırpmayı sözcüklerle söyleyen kaydırıcılardır (ör. “300 by 300 pixels, at 50, 0”), yakınlaştırma da düzeyini söyler (ör. “125%”). Bu adlar İngilizcedir; her parçaya sayfanızın dilinde aria-label verin.
Izgara yalnızca sürüklerken belirir, azaltılmış harekette hiç görünmez. Dokunmatik ekranlarda tutamaçların dokunma alanı büyür, sürükleme sırasında sayfa kaymaz; zorunlu renkler modunda seçim sistem renginde bir kenarlık alır.
Her parça aynı adlı UI SDK parçasını sarar ve render ile parçanın durumuna bağlı bir fonksiyon olabilen className dahil tüm prop’larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
src | string | – |
cropGörsel pikselleri cinsinden kırpma; rotation, flipX ve flipY ile. | ImageCrop | – |
defaultCrop | ImageCrop | – |
onCropChange | (crop, details) => void | – |
onCropCommitBir sürükleme, tuş basışı veya tekerlek bittiğinde çalışır. | (crop, details) => void | – |
mode | "box" | "frame" | "box" |
aspectRatio | number | – |
shape | "rectangle" | "circle" | "rectangle" |
minWidth | number | – |
minHeight | number | – |
maxZoom | number | 10 |
disabled | boolean | false |
controllercreateImageCropperController() ile oluşturulur. | ImageCropperController | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="image-cropper" | CSS’te kırpıcıyı hedefler. |
data-mode | box veya frame. |
data-shape | rectangle veya circle. |
data-loading | Görsel yüklenene kadar bulunur. |
data-error | Görsel yüklenemediğinde bulunur. |
data-dragging | Bir işaretçi sürüklerken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="image-cropper-viewport" | CSS’te görüntü alanını hedefler. |
--image-cropper-aspect-ratio | Görsel yüklendikten sonra genişliğinin yüksekliğine oranı. Görüntü alanı bunu en-boy oranı olarak kullanır. |
| Prop | Tür | Varsayılan |
|---|---|---|
altZorunlu. | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Prop | Tür | Varsayılan |
|---|---|---|
aria-label | string | "Crop" |
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="image-cropper-selection" | CSS’te seçimi hedefler. |
| Prop | Tür | Varsayılan |
|---|---|---|
childrenVarsayılan olarak üçe bölen çizgiler. | ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
positionYeniden boyutlandırdığı kenar veya köşe. | "n" | "e" | "s" | "w" | "ne" | "nw" | "se" | "sw" | – |
ImageCropperHandles sekizini de çizer. Frame modunda tutamaçlar görünmez.
1’den (en büyük kırpma) maxZoom değerine kadar giden yerel bir range input.
| Prop | Tür | Varsayılan |
|---|---|---|
childrenVarsayılan olarak Rotate etiketli bir simge. Alt öğe verilirse küçük bir metin düğmesidir. | ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
direction | "horizontal" | "vertical" | "horizontal" |
childrenVarsayılan olarak İngilizce etiketli bir simge. | ReactNode | – |