Artifact
Modelin ürettiğini gösteren, yapay zeka sohbetinin yanındaki panel. Web sayfaları, SVG'ler, belgeler ve kod canlı olarak akar, ardından korumalı bir önizlemeye geçer; karşılaştırıp geri yükleyebileceğiniz sürümler, yeniden boyutlandırılabilir bir bölme ve telefonlarda alt sayfa sunar.
Bir model bir web sayfası, belge ya da dosya gibi saklanmaya değer bir şey ürettiğinde, bu sohbetin içinde değil yanında durmalıdır. Artifact Workspace sohbetinizi ve bir paneli yan yana koyar. Panel, bir artifact akmaya başladığında kendiliğinden açılır, sohbet yer açarken kayarak gelir ve yeniden boyutlandırılabilir, tüm genişliği kaplayacak şekilde genişletilebilir ya da sürüklenerek kapatılabilir. Telefonlarda yalnızca bir karta dokunduğunuzda açılan bir alt sayfaya dönüşür; böylece sohbeti okumak hiç kesintiye uğramaz.
Model yazarken panel, yeni satırları izleyen vurgulanmış kodu gösterir; yukarı kaydırırsanız bir Jump to latest düğmesi çıkar. Web sayfaları ve SVG'ler yazma bitince önizlemeye geçer, akış ortasında asla; o zamana kadar önizleme son tamamlanan sürümü göstermeye devam eder. Belgeler akarken Markdown olarak render edilir. Önizlemeler sitenize erişimi olmayan korumalı bir iframe'de çalışır, beyaz bir parlama olmasın diye yalnızca yeni sürüm yüklendikten sonra değiştirilir ve çalışma zamanı hatalarını, modele geri gönderebileceğiniz bir Fix it eylemiyle bildirir.
Küçük değişiklikler dosyayı yeniden yazmaz. Bir güncelleme, tıpkı Claude'un artifact'ları gibi, son tamamlanan sürüme sırayla uygulanan bul ve değiştir çiftleri olan edits gönderebilir. Kod ekranda kalır ve her düzenlemeye kayar, kaldırılan satırlar üstü çizilip katlanır, yeni metin yeşil tonla yazılır ve dosyanın geri kalanı sabit kalır. Kart, değişiklik sayısıyla Editing der. Metni bulunamayan ya da birden fazla bulunan bir düzenleme, hangi düzenleme olduğunu ve nedenini söyleyen bir mesajla o sürümü başarısız kılar ve son iyi sürüm geçerli kalır. Yerel değişiklikler için edits, dosyanın çoğu ya da yapısı değiştiğinde ise tam content kullanın.
Her güncelleme yeni bir sürümdür. Başlık, sürümleri neyin değiştiğiyle listeler; Show changes bir sürümü öncekiyle satır satır, Diff Review ile aynı fark görünümünde karşılaştırır ve eski sürümler hiçbir şey silinmeden geri yüklenebilir. Anahtarın yanındaki ve kart üzerindeki eklenen ve kaldırılan sayıları, farkın gösterdiği satırlardır. Yeni sürüm her zaman öne gelir. Sohbetteki kartlar mesajlarının ürettiği sürümü gösterir; bu yüzden eski bir karta tıklamak o sürümü açar. getArtifactsFromMessages tüm bunları AI SDK araç çağrılarından oluşturur; panel, kod görünümü ve önizleme tek başlarına da çalışır.
Pro registry'yi components.json dosyasına ekleyin
components.json Token'ınızı ekleyin
Hesap sayfanızda bir token oluşturun ve
.env.localdosyasınaHEXTAUI_PRO_TOKENolarak ekleyin.Bloğu ekleyin
pnpm dlx shadcn@latest add @hextaui-pro/artifact
AI SDK ile
getArtifactsFromMessages, useChat'ten gelen create_artifact ve update_artifact araç çağrılarını sürümlü artifact'lara dönüştürür. Her çağrının göründüğü yere bir ArtifactCard koyun ve setMessages ile tamamlanmış bir update çağrısı ekleyerek geri yükleyin. update_artifact tarayıcıda çalışır; böylece applyEdits bir düzenleme eşleşmediğinde modele söyleyebilir ve model yeniden deneyebilir.
Sunucunuzdaki araçlar
İki araç yeterlidir: biri kararlı bir id ile artifact oluşturur, diğeri onu değiştirir. Bir değişiklik ya küçük değişiklikler için edits (bul ve değiştir çiftleri) ya da yeniden yazım için tüm content olur. İkisi de araç girdisi olarak akar; böylece model yazarken panel dolar ya da düzenleme yerinde yazılır.
Tek başına bir panel
Kaydedilmiş bir artifact'ı sohbet olmadan gösterir; örneğin bir paylaşım sayfasında. Panel kendi sürümünü, sekmesini ve karşılaştırma durumunu korur.
Yapı
Dıştan içe doğru birleştirdiğiniz parçalar.
| Parça | Açıklama |
|---|---|
ArtifactWorkspace | Düzen: sohbetiniz children olarak, panel geniş ekranlarda yanında, dar ekranlarda ise alt sayfada. Neyin açık olduğuna karar verir, yeni artifact'ları açar ve ilerlemeyi duyurur. |
ArtifactCard | Bir mesajdaki, bir artifact'ı ya da bir sürümünü açan ve yazılıyor, başarısız ya da açık olduğunu gösteren kart. |
ArtifactPanel | Başlık, sürümler, sekmeler ve eylemlerle üst bilgi; altında kod, değişiklikler, önizleme ya da belge. |
ArtifactCode, ArtifactPreview | Akan kod ve fark görünümü ile hata kartı olan korumalı önizleme. |
getArtifactsFromMessages, applyEdits | AI SDK mesajlarından create ve update araç çağrılarını okur ve artifact'ları sürümleriyle döndürür. applyEdits bul ve değiştir düzenlemelerini aynı şekilde uygular; böylece modele işe yaradığını söylemeden önce bir düzenlemeyi kontrol edebilirsiniz. |
useArtifactWorkspace | Artifact'ları kendi kontrollerinizden açar ve kapatır; örneğin bir kenar çubuğundaki dosya listesinden. |
| Prop | Tür | Varsayılan |
|---|---|---|
artifactsKonuşmadaki her artifact, sırayla. Genellikle getArtifactsFromMessages(messages). | Artifact[] | – |
childrenSohbet, genellikle bir ChatThread. | ReactNode | – |
openIdSiz kontrol ettiğinizde açık olan artifact. artifacts içinde olmayan bir id kapalı sayılır. | string | null | – |
defaultOpenIdKontrolsüz olduğunda başlangıçta açık olan artifact. | string | null | null |
onOpenChangeBir artifact açıldığında veya panel kapandığında çağrılır. | (id: string | null) => void | – |
autoOpenBir sürüm akmaya başladığında geniş ekranlarda bir artifact açar. Sürüm başına bir kez açılır, o akış sırasında kapattıysanız bir daha açılmaz ve odağı asla taşımaz. | boolean | true |
defaultPanelSizePanelin açıldığında kapladığı genişlik payı, yüzde olarak. Sohbet en az 320px, panel en az 360px kalır. Ayırıcıyı sürüklemek oturumun geri kalanında önceliklidir. | number | 70 |
onRestoreEski sürümlerde Restore gösterir. Eski içeriği yeni bir sürüm olarak ekler; hiçbir şey silinmez. | (artifact, version) => void | – |
onFixÖnizleme hata fırlattığında Fix it gösterir. error, message ve line içerir. | (artifact, version, error) => void | – |
actionsPublish veya Share gibi ek başlık kontrolleri. | (artifact) => ReactNode | – |
| Prop | Tür | Varsayılan |
|---|---|---|
artifactIdAçılacak artifact. Yoksa hiçbir şey render etmez. | string | – |
versionIdBu kartın temsil ettiği sürüm, genellikle araç çağrısı id'si. Tıklamak o sürümü açar ve kart hangi sürüm olduğunu söyler. | string | – |
ArtifactPanel
ArtifactWorkspace içinde sizin için render edilir. Sohbet olmadan bir artifact göstermek için doğrudan kullanın.
| Prop | Tür | Varsayılan |
|---|---|---|
artifactNe gösterileceği. | Artifact | – |
versionIdSiz kontrol ettiğinizde gösterilen sürüm. null en son sürümü izler. | string | null | – |
onVersionChangeBiri bir sürüm seçtiğinde çağrılır; en son sürüm için null. | (versionId: string | null) => void | – |
onCloseKapatma düğmesini gösterir ve Escape ile kapanır. | () => void | – |
fullscreen, onFullscreenChangeExpand ve Show chat gösterir, Escape ile genişletilmiş moddan çıkar. | boolean, (fullscreen: boolean) => void | – |
onRestore, onFix, actionsWorkspace'tekiyle aynı. | see ArtifactWorkspace | – |
Artifact
Bileşenlerin okuduğu veri.
| Prop | Tür | Varsayılan |
|---|---|---|
id, titleKararlı bir id ve başlıkta ile kartta gösterilen başlık. | string | – |
kindhtml ve svg korumalı bir önizleme alır, markdown belge olarak render edilir, code yalnızca kodu gösterir. | "html" | "svg" | "markdown" | "code" | – |
language, filenameKod için vurgulama ve indirme adı. | string | – |
versionsEn eskiden başlar. status streaming, complete, stopped veya error olabilir; note neyin değiştiğini söyler. edits, hedefli bir güncellemenin uyguladığı bul ve değiştir çiftlerini listeler; content her zaman tam sonuçtur. | { id, content, status?, error?, note?, edits?, createdAt?, messageId? }[] | – |
| Prop | Tür | Varsayılan |
|---|---|---|
messagesuseChat mesajları. create_artifact ve update_artifact adlı araç çağrıları, ya da bunların camelCase biçimleri, sürümlere dönüşür. | UIMessage[] | – |
options.streamingSon mesajın hâlâ gelmekte olup olmadığı. Verilmezse bitmemiş çağrılar durdurulmuş sayılır. | boolean | false |
options.toolsKendi araç adlarınız. Create; id, title, kind, language, filename, description ve content okur. Update; id, description ve content ya da edits okur. | { create: string[]; update: string[] } | – |
update inputcontent artifact'ı yeniden yazar. edits son tamamlanan sürüme sırayla uygulanır; her find tam olarak bir kez eşleşmelidir, aksi halde sürüm hangi düzenleme olduğunu ve nedenini söyleyen error ile başarısız olur. İkisi de gönderilirse content kazanır. | { content: string } | { edits: { find: string; replace: string }[] } | – |
| Tuş | Action |
|---|---|
| Enter | Bir kartta artifact'ını açar ve odağı panel başlığına taşır. Açık bir kartta kapatır. |
| Esc | Genişletilmiş moddan çıkar, ardından paneli kapatır ve odağı karta döndürür. |
| ←→ | Ayırıcı odaktayken bölmeyi yeniden boyutlandırır. En küçük boyutun ötesinde panel kapanır ya da sohbet gizlenir. |
| ←→ | Bir sekme odaktayken Code ve Preview arasında geçiş yapar. |
| Tab | Başlık, ok tuşlarıyla kayan kod veya belge alanı ve önizleme arasında gezinir. |
- Panel, gerçek bir başlığı olan etiketli bir bölgedir. Bir karttan açmak odağı o başlığa taşır, kapatmak odağı karta döndürür. Model yazarken kendiliğinden açılması odağı asla taşımaz; böylece yazma alanında yazmak hiç kesintiye uğramaz.
- Kartlar aria-pressed ve aria-controls içeren düğmelerdir ve artifact'ın yazılıyor, başarısız ya da durdurulmuş olduğunu söyler. Her satırı okumak yerine, yazma başladığında ve bir sürüm hazır olduğunda polite bir durum duyurusu yapılır.
- Önizleme iframe'inin başlığı artifact'ın adıdır. Çalışma zamanı hataları mesaj ve satırla birlikte bir alert olarak görünür; uygulanamayan bir düzenleme de öyle. Değişiklikler yalnızca renkle değil, eklendi ve kaldırıldı olarak duyurulur.
- Her simge düğmesinin bir etiketi ve tooltip'i vardır. Açma, kapama ve genişletme, sohbetin yumuşakça yeniden akmasıyla birlikte kayar; azaltılmış harekette düzen kısa bir solma ile anında değişir. Düzenlemeler yazılmak yerine bütün olarak solarak gelir.
Şunlarla geliştirildi
Artifact bloğunun yapıldığı ücretsiz HextaUI bileşenleri. Her biri tek başına yüklenir.
Kod
12 dosya, components/blocks/artifact konumuna eklendi.