{"id":32031,"date":"2025-10-16T23:31:25","date_gmt":"2025-10-16T20:31:25","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/"},"modified":"2025-10-16T23:31:25","modified_gmt":"2025-10-16T20:31:25","slug":"dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/","title":{"rendered":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc"},"content":{"rendered":"<p><body><\/p>\n<p>Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master&#8217;\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API&#8217;si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.<\/p>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131lar\u0131na sadece bilgi sunmakla kalm\u0131yor, ayn\u0131 zamanda onlarla etkile\u015fim kurarak sezgisel ve keyifli bir deneyim ya\u015fatmay\u0131 hedefliyor. Bu etkile\u015fimin temel ta\u015flar\u0131ndan biri de s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) i\u015flevselli\u011fidir. Peki, Svelte gibi reaktif ve performans odakl\u0131 bir framework&#8217;te bu \u00f6zellik neden bu kadar kritik?<\/p>\n<p>\u00d6ncelikle, s\u00fcr\u00fckle-b\u0131rak, kullan\u0131c\u0131lar\u0131n aray\u00fcz elemanlar\u0131n\u0131 do\u011frudan manip\u00fcle etmelerine olanak tan\u0131r. Bir listeyi yeniden s\u0131ralamak, bir panoya g\u00f6rev kartlar\u0131 eklemek, dosyalar\u0131 y\u00fcklemek veya bir dashboard \u00fczerindeki widget&#8217;lar\u0131n yerini de\u011fi\u015ftirmek gibi bir\u00e7ok senaryoda, s\u00fcr\u00fckle-b\u0131rak, men\u00fclerde gezinme veya form doldurma gibi daha geleneksel y\u00f6ntemlere k\u0131yasla \u00e7ok daha h\u0131zl\u0131 ve verimli bir etkile\u015fim sunar. Bu, \u00f6zellikle karma\u015f\u0131k veya yo\u011fun veri i\u00e7eren uygulamalarda kullan\u0131c\u0131 memnuniyetini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Kullan\u0131c\u0131lar, nesneleri fiziksel olarak hareket ettirir gibi hissederek dijital aray\u00fczle daha derin bir ba\u011f kurarlar. Bu sezgisel etkile\u015fim, \u00f6\u011frenme e\u011frisini k\u0131salt\u0131r ve uygulaman\u0131n kullan\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Svelte&#8217;in do\u011fas\u0131 gere\u011fi, uygulaman\u0131n boyutu k\u00fc\u00e7\u00fck kal\u0131r ve performans y\u00fck\u00fc minimumda tutulur. Bu, s\u00fcr\u00fckle-b\u0131rak gibi interaktif \u00f6zelliklerin eklenmesinin genellikle JavaScript y\u00fck\u00fcn\u00fc ve render s\u00fcrelerini art\u0131rd\u0131\u011f\u0131 di\u011fer framework&#8217;lere k\u0131yasla b\u00fcy\u00fck bir avantajd\u0131r. Svelte&#8217;in reaktif yap\u0131s\u0131, s\u00fcr\u00fckleme i\u015flemi s\u0131ras\u0131nda bile aray\u00fcz\u00fcn ak\u0131c\u0131 ve duyarl\u0131 kalmas\u0131n\u0131 sa\u011flar. Bile\u015fenlerinizi minimal kodla olu\u015fturman\u0131za olanak tan\u0131yan Svelte, Dnd-Master gibi hafif k\u00fct\u00fcphanelerle birle\u015fti\u011finde, hem geli\u015ftirme s\u00fcrecini basitle\u015ftirir hem de nihai \u00fcr\u00fcn\u00fcn y\u00fcksek performansl\u0131 olmas\u0131n\u0131 garanti eder.<\/p>\n<p><strong>Ger\u00e7ek D\u00fcnya Senaryosu: Bir G\u00f6rev Y\u00f6netimi Panosu<\/strong><\/p>\n<p>Bir g\u00f6rev y\u00f6netim panosu d\u00fc\u015f\u00fcn\u00fcn (\u00f6rne\u011fin, Trello veya Jira benzeri). Kullan\u0131c\u0131lar\u0131n &#8220;Yap\u0131lacaklar&#8221;, &#8220;Devam Edenler&#8221; ve &#8220;Tamamlananlar&#8221; gibi farkl\u0131 s\u00fctunlar aras\u0131nda g\u00f6rev kartlar\u0131n\u0131 s\u00fcr\u00fckleyip b\u0131rakmas\u0131 gerekir. Ayr\u0131ca, ayn\u0131 s\u00fctun i\u00e7indeki g\u00f6revlerin s\u0131ras\u0131n\u0131 da de\u011fi\u015ftirebilmelidirler. Bu t\u00fcr bir aray\u00fcz, geleneksel t\u0131klama tabanl\u0131 y\u00f6ntemlerle olu\u015fturulmaya \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda olduk\u00e7a hantal ve kullan\u0131\u015fs\u0131z olacakt\u0131r. Her g\u00f6revi ta\u015f\u0131mak i\u00e7in bir a\u00e7\u0131l\u0131r men\u00fc veya yukar\u0131\/a\u015fa\u011f\u0131 d\u00fc\u011fmeleri kullanmak, kullan\u0131c\u0131n\u0131n i\u015f ak\u0131\u015f\u0131n\u0131 bozar ve verimlili\u011fi d\u00fc\u015f\u00fcr\u00fcr. S\u00fcr\u00fckle-b\u0131rak \u00f6zelli\u011fi sayesinde kullan\u0131c\u0131lar, g\u00f6revleri sezgisel bir \u015fekilde y\u00f6netebilir, sadece fare veya dokunmatik ekranlar\u0131 arac\u0131l\u0131\u011f\u0131yla g\u00f6revleri bir yerden al\u0131p ba\u015fka bir yere b\u0131rakabilirler. Bu, kullan\u0131c\u0131lar\u0131n i\u015flerini organize etmelerine yard\u0131mc\u0131 olan do\u011fal bir etkile\u015fim modelidir ve uygulaman\u0131n kullan\u0131labilirli\u011fini (usability) ve kullan\u0131c\u0131 deneyimini (UX) do\u011frudan art\u0131r\u0131r. \u0130\u015fte bu noktada Dnd-Master gibi g\u00fc\u00e7l\u00fc ve esnek bir s\u00fcr\u00fckle-b\u0131rak \u00e7\u00f6z\u00fcm\u00fc, Svelte geli\u015ftiricileri i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: S\u00fcr\u00fckle-b\u0131rak \u00f6zelli\u011fini tasarlarken sadece fonksiyonelli\u011fe de\u011fil, ayn\u0131 zamanda g\u00f6rsel geri bildirime de odaklan\u0131n. S\u00fcr\u00fcklenen \u00f6\u011fenin belirginle\u015fmesi, b\u0131rakma alanlar\u0131n\u0131n vurgulanmas\u0131 gibi detaylar kullan\u0131c\u0131 deneyimini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde iyile\u015ftirir.\n    <\/div>\n<p>Sonu\u00e7 olarak, s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fi, modern web uygulamalar\u0131nda kullan\u0131c\u0131 etkile\u015fimini derinle\u015ftiren, verimlili\u011fi art\u0131ran ve uygulaman\u0131n genel kalitesini y\u00fckselten temel bir \u00f6zelliktir. Svelte ile birle\u015fti\u011finde ise bu \u00f6zellik, performans ve geli\u015ftirici deneyiminden \u00f6d\u00fcn vermeden uygulamalar\u0131n\u0131za kolayca entegre edilebilir.<\/p>\n<h2>Dnd-Master Nedir ve Neden Tercih Etmelisiniz?<\/h2>\n<p>Svelte ekosisteminde bir\u00e7ok s\u00fcr\u00fckle-b\u0131rak k\u00fct\u00fcphanesi bulunsa da, Dnd-Master kendine \u00f6zg\u00fc avantajlar\u0131yla \u00f6ne \u00e7\u0131kmaktad\u0131r. Ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, &#8220;Hafif&#8221; ve &#8220;G\u00fc\u00e7l\u00fc&#8221; kelimeleri Dnd-Master&#8217;\u0131n temel felsefesini \u00f6zetler. Peki, tam olarak nedir Dnd-Master ve onu di\u011ferlerinden ay\u0131ran \u00f6zellikler nelerdir?<\/p>\n<h3>Dnd-Master&#8217;\u0131n \u00d6zellikleri ve Avantajlar\u0131 Nelerdir?<\/h3>\n<p>Dnd-Master, Svelte bile\u015fenleri i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f, minimum ba\u011f\u0131ml\u0131l\u0131\u011fa sahip bir s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) eylemidir. Svelte&#8217;in <code>use:<\/code> direktifini kullanarak herhangi bir HTML eleman\u0131na kolayca s\u00fcr\u00fckle-b\u0131rak yetene\u011fi kazand\u0131rabilir. Bu, Svelte&#8217;in reaktif yap\u0131s\u0131yla m\u00fckemmel bir uyum i\u00e7inde \u00e7al\u0131\u015f\u0131r ve geli\u015ftiricilere ola\u011fan\u00fcst\u00fc bir esneklik sunar.<\/p>\n<ul>\n<li>\n            <strong>Hafif ve Performans Odakl\u0131:<\/strong> Dnd-Master, gereksiz kod y\u00fck\u00fcnden ar\u0131nd\u0131r\u0131lm\u0131\u015f, minimal bir k\u00fct\u00fcphanedir. Bu sayede, Svelte uygulamalar\u0131n\u0131za ekledi\u011finizde performans \u00fczerinde neredeyse hi\u00e7 olumsuz bir etkisi olmaz. \u00d6zellikle mobil cihazlarda ve d\u00fc\u015f\u00fck bant geni\u015fli\u011fine sahip ortamlarda bu hafif yap\u0131 b\u00fcy\u00fck bir avantaj sa\u011flar.\n        <\/li>\n<li>\n            <strong>Svelte Actions ile Kusursuz Entegrasyon:<\/strong> Svelte&#8217;in <code>use:<\/code> eylem mekanizmas\u0131n\u0131 kullanarak elementlere s\u00fcr\u00fckle-b\u0131rak \u00f6zelli\u011fini do\u011frudan uygulayabilir. Bu, bile\u015fenlerinizi daha temiz tutman\u0131z\u0131 ve mant\u0131\u011f\u0131 do\u011frudan ilgili DOM eleman\u0131na ba\u011flaman\u0131z\u0131 sa\u011flar. Karma\u015f\u0131k bile\u015fen yap\u0131lar\u0131ndan ka\u00e7\u0131n\u0131r ve kod okunabilirli\u011fini art\u0131r\u0131r.\n        <\/li>\n<li>\n            <strong>Esnek API:<\/strong> Dnd-Master, s\u00fcr\u00fckleme ba\u015flang\u0131c\u0131, s\u00fcr\u00fckleme s\u0131ras\u0131nda ve b\u0131rakma gibi farkl\u0131 a\u015famalar\u0131 y\u00f6netmek i\u00e7in zengin bir event (olay) sistemi sunar. Bu olaylar sayesinde, s\u00fcr\u00fckle-b\u0131rak i\u015flemini uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re tamamen \u00f6zelle\u015ftirebilirsiniz. \u00d6rne\u011fin, sadece belirli alanlara b\u0131rakmaya izin vermek, s\u00fcr\u00fckleme s\u0131ras\u0131nda g\u00f6rsel geri bildirim sa\u011flamak veya verileri g\u00fcncellemek gibi senaryolar kolayca y\u00f6netilebilir.\n        <\/li>\n<li>\n            <strong>Reaktivite ile Tam Uyum:<\/strong> Svelte&#8217;in reaktif yap\u0131s\u0131yla tam uyumlu \u00e7al\u0131\u015f\u0131r. S\u00fcr\u00fckle-b\u0131rak olaylar\u0131 tetiklendi\u011finde, Svelte&#8217;in otomatik reaktivite sistemi sayesinde kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcz an\u0131nda g\u00fcncellenir. Bu, karma\u015f\u0131k state y\u00f6netimi gereksinimlerini azalt\u0131r ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.\n        <\/li>\n<li>\n            <strong>\u00c7e\u015fitli S\u00fcr\u00fckle-B\u0131rak Senaryolar\u0131n\u0131 Destekler:<\/strong> Tek bir \u00f6\u011feyi s\u00fcr\u00fcklemekten, listeleri yeniden s\u0131ralamaya, farkl\u0131 konteynerler aras\u0131nda \u00f6\u011feleri ta\u015f\u0131maya kadar bir\u00e7ok farkl\u0131 senaryoyu destekler. Ayr\u0131ca, i\u00e7 i\u00e7e s\u00fcr\u00fckle-b\u0131rak yap\u0131lar\u0131 kurman\u0131za da olanak tan\u0131r.\n        <\/li>\n<li>\n            <strong>Eri\u015filebilirlik ve Mobil Uyumluluk Odakl\u0131:<\/strong> \u0130yi tasarlanm\u0131\u015f bir s\u00fcr\u00fckle-b\u0131rak k\u00fct\u00fcphanesi, eri\u015filebilirlik (accessibility) standartlar\u0131n\u0131 da g\u00f6z \u00f6n\u00fcnde bulundurmal\u0131d\u0131r. Dnd-Master, bu konuda da geli\u015ftiricilere yard\u0131mc\u0131 olacak yap\u0131lar\u0131 destekler ve dokunmatik cihazlarda da sorunsuz bir deneyim sunar.<\/li>\n<\/ul>\n<p><strong>Neden Dnd-Master&#8217;\u0131 Tercih Etmelisiniz?<\/strong><\/p>\n<p>\u00d6zellikle Svelte projenizin hafif ve performansl\u0131 kalmas\u0131n\u0131 istiyorsan\u0131z, Dnd-Master do\u011fru bir tercih olacakt\u0131r. Di\u011fer k\u00fct\u00fcphanelerin aksine, Svelte&#8217;in native action yap\u0131s\u0131n\u0131 kullanmas\u0131 sayesinde ekstra bir \u00f6\u011frenme e\u011frisi veya karma\u015f\u0131k bir yap\u0131land\u0131rma gerektirmez. Svelte geli\u015ftirme felsefesine tam olarak uyan, &#8220;daha az kodla daha fazlas\u0131n\u0131 yap&#8221; prensibini benimseyen bir \u00e7\u00f6z\u00fcmd\u00fcr. Karma\u015f\u0131k olmayan API&#8217;si ve kapsaml\u0131 olay sistemi sayesinde, projenizin ihtiya\u00e7lar\u0131na g\u00f6re s\u00fcr\u00fckle-b\u0131rak mant\u0131\u011f\u0131n\u0131 kolayca entegre edebilir ve \u00f6zelle\u015ftirebilirsiniz. Yani, Svelte uygulaman\u0131zda s\u00fcr\u00fckle-b\u0131rak \u00f6zelli\u011fine ihtiyac\u0131n\u0131z varsa ve performans ile sadelik sizin i\u00e7in \u00f6ncelikliyse, Dnd-Master kesinlikle g\u00f6z atman\u0131z gereken bir pakettir.<\/p>\n<h2>Dnd-Master&#8217;\u0131 Projenize Nas\u0131l Dahil Eder ve Kullanmaya Ba\u015flars\u0131n\u0131z?<\/h2>\n<p>Dnd-Master&#8217;\u0131 Svelte projenize entegre etmek olduk\u00e7a basit ve h\u0131zl\u0131d\u0131r. Svelte&#8217;in <code>use:<\/code> direktifiyle \u00e7al\u0131\u015fma prensibi sayesinde, ek bir bile\u015fen sarmalay\u0131c\u0131ya veya karma\u015f\u0131k yap\u0131land\u0131rmaya gerek kalmaz. \u0130\u015fte ad\u0131m ad\u0131m nas\u0131l ba\u015flayaca\u011f\u0131n\u0131z:<\/p>\n<h3>Ad\u0131m 1: Kurulum<\/h3>\n<p>\u0130lk olarak, Dnd-Master paketini projenize eklemeniz gerekiyor. Bunu, terminalinizde pop\u00fcler paket y\u00f6neticilerinden biriyle kolayca yapabilirsiniz:<\/p>\n<pre><code>\nnpm install dnd-master\n<\/pre>\n<p><\/code><\/p>\n<p>veya<\/p>\n<pre><code>\nyarn add dnd-master\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Dnd-Master'\u0131 projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131na ekleyecektir.<\/p>\n<h3>Ad\u0131m 2: Temel S\u00fcr\u00fckle-B\u0131rak \u00d6zelli\u011fi Ekleme<\/h3>\n<p>Dnd-Master'\u0131 kullanmaya ba\u015flamak i\u00e7in, s\u00fcr\u00fcklemek istedi\u011finiz HTML \u00f6\u011fesine <code>use:dnd-master<\/code> eylemini eklemeniz yeterlidir. Bu eylem, \u00f6\u011fenin s\u00fcr\u00fckle-b\u0131rak olaylar\u0131n\u0131 dinlemeye ba\u015flamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\n<script>\n  import { dnd_master } from 'dnd-master';\n\n  let itemText = 'Bu \u00f6\u011feyi s\u00fcr\u00fckleyebilirsiniz!';\n\n  function handleDragStart(event) {\n    console.log('S\u00fcr\u00fckleme ba\u015flad\u0131:', event.detail);\n    \/\/ event.detail genellikle s\u00fcr\u00fcklenen \u00f6\u011fe hakk\u0131nda bilgi i\u00e7erir\n  }\n\n  function handleDragEnd(event) {\n    console.log('S\u00fcr\u00fckleme bitti:', event.detail);\n  }\n\n  function handleDrop(event) {\n    console.log('\u00d6\u011fe b\u0131rak\u0131ld\u0131:', event.detail);\n    \/\/ event.detail.data ile s\u00fcr\u00fcklenen veriye eri\u015febilirsiniz\n  }\n<\/script>\n\n<div\n  use:dnd_master={{ type: 'my-item', data: { id: 1, content: itemText } }}\n  on:dnd:dragstart={handleDragStart}\n  on:dnd:dragend={handleDragEnd}\n  on:dnd:drop={handleDrop}\n  style=\"padding: 15px; border: 1px solid #ccc; background-color: #f9f9f9; cursor: grab; margin-bottom: 10px;\"\n>\n  {itemText}\n<\/div>\n\n<div\n  on:dnd:drop={handleDrop}\n  style=\"min-height: 100px; border: 2px dashed #999; background-color: #eee; display: flex; align-items: center; justify-content: center;\"\n>\n  \u00d6\u011feyi buraya b\u0131rak\u0131n\n<\/div>\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li><code>import { dnd_master } from &#039;dnd-master&#039;;<\/code> ile <code>dnd_master<\/code> eylemini i\u00e7e aktar\u0131yoruz.<\/li>\n<li>S\u00fcr\u00fcklemek istedi\u011fimiz <code>div<\/code> etiketine <code>use:dnd_master<\/code> direktifini ekliyoruz. Bu direktife bir nesne ge\u00e7irerek s\u00fcr\u00fcklenen \u00f6\u011fe hakk\u0131nda bilgi verebiliriz:\n<ul>\n<li><code>type<\/code>: S\u00fcr\u00fcklenen \u00f6\u011fenin tipini belirtir. Bu, farkl\u0131 t\u00fcrdeki \u00f6\u011felerin farkl\u0131 b\u0131rakma alanlar\u0131na b\u0131rak\u0131lmas\u0131n\u0131 k\u0131s\u0131tlamak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/li>\n<li><code>data<\/code>: S\u00fcr\u00fcklenen \u00f6\u011feyle ili\u015fkilendirilmi\u015f herhangi bir veriyi ta\u015f\u0131yabilir. Bu veri, b\u0131rakma olay\u0131nda eri\u015filebilir olacakt\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><code>on:dnd:dragstart<\/code>, <code>on:dnd:dragend<\/code> ve <code>on:dnd:drop<\/code> olay dinleyicileri ile s\u00fcr\u00fckle-b\u0131rak s\u00fcrecinin farkl\u0131 a\u015famalar\u0131n\u0131 yakalayabiliriz. Bu olaylar, s\u00fcr\u00fcklenen \u00f6\u011fe ve b\u0131rakma alan\u0131 hakk\u0131nda detayl\u0131 bilgi i\u00e7eren <code>event.detail<\/code> nesnesini i\u00e7erir.<\/li>\n<li>\u0130kinci <code>div<\/code>, bir b\u0131rakma alan\u0131 (droppable area) g\u00f6revi g\u00f6r\u00fcyor. Bu <code>div<\/code>'e sadece <code>on:dnd:drop<\/code> olay dinleyicisi ekleyerek herhangi bir \u00f6\u011fenin buraya b\u0131rak\u0131ld\u0131\u011f\u0131n\u0131 alg\u0131layabiliriz.<\/li>\n<\/ul>\n<h3>Ad\u0131m 3: G\u00f6rsel Geri Bildirim Sa\u011flama (Styling)<\/h3>\n<p>S\u00fcr\u00fckle-b\u0131rak deneyimini daha sezgisel hale getirmek i\u00e7in s\u00fcr\u00fckleme s\u0131ras\u0131nda g\u00f6rsel geri bildirim sa\u011flamak \u00f6nemlidir. Dnd-Master, s\u00fcr\u00fcklenen \u00f6\u011feye otomatik olarak baz\u0131 CSS s\u0131n\u0131flar\u0131 ekler. Bunlar\u0131 kullanarak \u00f6\u011fenin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirebilirsiniz:<\/p>\n<pre><code>\n<style>\n  \/* S\u00fcr\u00fcklenen \u00f6\u011fe i\u00e7in stil *\/\n  :global(.dnd-dragging) {\n    opacity: 0.7;\n    border: 2px solid blue !important;\n    transform: scale(1.05);\n    transition: transform 0.1s ease-out;\n  }\n\n  \/* B\u0131rakma alan\u0131 \u00fczerine gelindi\u011finde stil *\/\n  :global(.dnd-droppable-over) {\n    background-color: #e0f7fa !important;\n    border-color: deepskyblue !important;\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<ul>\n<li><code>:global(.dnd-dragging)<\/code>: Bir \u00f6\u011fe s\u00fcr\u00fcklenirken bu s\u0131n\u0131fa sahip olur.<\/li>\n<li><code>:global(.dnd-droppable-over)<\/code>: S\u00fcr\u00fcklenen bir \u00f6\u011fe, b\u0131rakma alan\u0131n\u0131n \u00fczerine geldi\u011finde b\u0131rakma alan\u0131 bu s\u0131n\u0131fa sahip olur.<\/li>\n<\/ul>\n<p><code>:global()<\/code> anahtar kelimesini kullanmam\u0131z\u0131n nedeni, Svelte'in varsay\u0131lan olarak CSS s\u0131n\u0131flar\u0131n\u0131 bile\u015fene \u00f6zel hale getirmesidir. Dnd-Master'\u0131n ekledi\u011fi s\u0131n\u0131flara stil vermek i\u00e7in bu global eri\u015fimi kullanmam\u0131z gerekir.<\/p>\n<p>Bu ad\u0131mlarla, Dnd-Master'\u0131 projenize ba\u015far\u0131yla entegre etmi\u015f ve temel s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fini eklemi\u015f olursunuz. Art\u0131k daha karma\u015f\u0131k senaryolara ge\u00e7ebiliriz.<\/p>\n<h2>Liste \u00d6\u011felerini S\u00fcr\u00fckle-B\u0131rak ile Yeniden S\u0131ralama: Ad\u0131m Ad\u0131m Uygulama<\/h2>\n<p>S\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011finin en yayg\u0131n kullan\u0131m alanlar\u0131ndan biri, liste \u00f6\u011felerinin (g\u00f6revler, resimler, men\u00fc elemanlar\u0131 vb.) yeniden s\u0131ralanmas\u0131d\u0131r. Dnd-Master, bu t\u00fcr senaryolar\u0131 y\u00f6netmek i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015f esnek bir yap\u0131 sunar. \u015eimdi, basit bir TODO listesi \u00f6rne\u011fi \u00fczerinden \u00f6\u011feleri s\u00fcr\u00fckleyerek yeniden nas\u0131l s\u0131ralayaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h3>Ad\u0131m 1: Temel Liste Yap\u0131s\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>\u00d6ncelikle, yeniden s\u0131ralanabilir bir \u00f6\u011fe listesine ihtiyac\u0131m\u0131z var. Svelte'de bu genellikle bir dizi ve <code>{#each}<\/code> blo\u011fu ile yap\u0131l\u0131r.<\/p>\n<pre><code>\n<script>\n  let items = [\n    { id: 1, text: 'Al\u0131\u015fveri\u015f yap' },\n    { id: 2, text: 'Makale yaz' },\n    { id: 3, text: 'Spor yap' },\n    { id: 4, text: 'Projeyi tamamla' },\n  ];\n<\/script>\n\n<h3>Yap\u0131lacaklar Listesi<\/h3>\n<ul>\n  {#each items as item (item.id)}\n    <li>{item.text}<\/li>\n  {\/each}\n<\/ul>\n\n<style>\n  ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n  li {\n    padding: 10px;\n    border: 1px solid #ddd;\n    background-color: #f9f9f9;\n    margin-bottom: 5px;\n    cursor: grab;\n    border-radius: 4px;\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, d\u00f6rt \u00f6\u011feden olu\u015fan basit bir liste olu\u015fturur. Her \u00f6\u011fenin benzersiz bir <code>id<\/code>'si ve <code>text<\/code>'i bulunur. <code>{#each ... (item.id)}<\/code> sentaks\u0131, Svelte'in her \u00f6\u011feyi benzersiz bir anahtarla izlemesini sa\u011flar, bu da yeniden s\u0131ralama gibi dinamik liste manip\u00fclasyonlar\u0131 i\u00e7in \u00f6nemlidir.<\/p>\n<h3>Ad\u0131m 2: Dnd-Master Entegrasyonu ve Yeniden S\u0131ralama Mant\u0131\u011f\u0131<\/h3>\n<p>\u015eimdi Dnd-Master'\u0131 her liste \u00f6\u011fesine entegre edip, s\u00fcr\u00fckle-b\u0131rak olaylar\u0131n\u0131 dinleyerek <code>items<\/code> dizisini g\u00fcncelleyece\u011fiz.<\/p>\n<pre><code>\n<script>\n  import { dnd_master } from 'dnd-master';\n  import { flip } from 'svelte\/animate'; \/\/ Daha ak\u0131c\u0131 ge\u00e7i\u015fler i\u00e7in\n\n  let items = [\n    { id: 1, text: 'Al\u0131\u015fveri\u015f yap' },\n    { id: 2, text: 'Makale yaz' },\n    { id: 3, text: 'Spor yap' },\n    { id: 4, text: 'Projeyi tamamla' },\n  ];\n\n  function handleReorder(event) {\n    const { fromIndex, toIndex, item } = event.detail;\n\n    \/\/ Dizinin kopyas\u0131n\u0131 alarak do\u011frudan manip\u00fclasyondan ka\u00e7\u0131nma\n    const newItems = [...items];\n    const [movedItem] = newItems.splice(fromIndex, 1); \/\/ Eski konumdan kald\u0131r\n    newItems.splice(toIndex, 0, movedItem); \/\/ Yeni konuma ekle\n\n    items = newItems; \/\/ Svelte reaktivitesi ile UI'\u0131 g\u00fcncelle\n  }\n<\/script>\n\n<h3>Yap\u0131lacaklar Listesi (S\u00fcr\u00fckle-B\u0131rak)<\/h3>\n<ul use:dnd_master={{ type: 'list-item', group: 'my-list' }} on:dnd:reorder={handleReorder}>\n  {#each items as item (item.id)}\n    <li\n      use:dnd_master={{ item: item, type: 'list-item', group: 'my-list' }}\n      animate:flip={{ duration: 300 }}\n    >\n      {item.text}\n    <\/li>\n  {\/each}\n<\/ul>\n\n<style>\n  ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n    min-height: 100px; \/* B\u0131rakma alan\u0131 i\u00e7in minimum y\u00fckseklik *\/\n  }\n  li {\n    padding: 10px;\n    border: 1px solid #ddd;\n    background-color: #f9f9f9;\n    margin-bottom: 5px;\n    cursor: grab;\n    border-radius: 4px;\n    position: relative; \/* Animasyon i\u00e7in \u00f6nemli *\/\n  }\n\n  \/* S\u00fcr\u00fcklenen \u00f6\u011fe i\u00e7in stil *\/\n  :global(.dnd-dragging) {\n    opacity: 0.7;\n    border: 2px solid #3f51b5 !important;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);\n    transform: scale(1.02);\n    transition: transform 0.1s ease-out;\n  }\n\n  \/* Ge\u00e7ici yer tutucu (ghost) i\u00e7in stil *\/\n  :global(.dnd-ghost) {\n    opacity: 0.3;\n    border: 2px dashed #999 !important;\n    background-color: #e0e0e0 !important;\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu g\u00fcncellenmi\u015f kodda \u00f6nemli de\u011fi\u015fiklikler var:<\/p>\n<ul>\n<li>\n            <strong><code>dnd_master<\/code> Eyleminin <code>ul<\/code> ve <code>li<\/code>'lere Uygulanmas\u0131:<\/strong><\/p>\n<ul>\n<li><code>ul<\/code> etiketine <code>use:dnd_master={{ type: &#039;list-item&#039;, group: &#039;my-list&#039; }}<\/code> ekledik. Bu, <code>ul<\/code>'yi bir b\u0131rakma alan\u0131 olarak tan\u0131mlar ve <code>type<\/code> ile <code>group<\/code> \u00f6zellikleriyle hangi \u00f6\u011feleri kabul edece\u011fini belirtir. <code>group<\/code> \u00f6zelli\u011fi, birden fazla s\u00fcr\u00fckle-b\u0131rak listesi oldu\u011funda \u00f6\u011felerin do\u011fru listeler aras\u0131nda ta\u015f\u0131nmas\u0131n\u0131 sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir.<\/li>\n<li>Her bir <code>li<\/code> etiketine de <code>use:dnd_master={{ item: item, type: &#039;list-item&#039;, group: &#039;my-list&#039; }}<\/code> eylemini uygulad\u0131k. Burada <code>item: item<\/code> ile her liste \u00f6\u011fesinin kendi verilerini ta\u015f\u0131d\u0131\u011f\u0131n\u0131 belirtiyoruz. Bu, s\u00fcr\u00fckleme olaylar\u0131nda hangi \u00f6\u011fenin hareket ettirildi\u011fini anlamam\u0131z\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong><code>on:dnd:reorder<\/code> Olay\u0131:<\/strong><\/p>\n<ul>\n<li><code>ul<\/code> etiketi \u00fczerinde <code>on:dnd:reorder={handleReorder}<\/code> olay dinleyicisini kullan\u0131yoruz. Dnd-Master, ayn\u0131 grup i\u00e7indeki \u00f6\u011feler yeniden s\u0131raland\u0131\u011f\u0131nda bu olay\u0131 tetikler.<\/li>\n<li><code>handleReorder<\/code> fonksiyonu, <code>event.detail<\/code> i\u00e7indeki <code>fromIndex<\/code> (\u00f6\u011fenin eski konumu), <code>toIndex<\/code> (\u00f6\u011fenin yeni konumu) ve <code>item<\/code> (hareket ettirilen \u00f6\u011fe verisi) bilgilerini kullanarak <code>items<\/code> dizisini g\u00fcnceller. Dizi manip\u00fclasyonu i\u00e7in, orijinal dizinin bir kopyas\u0131n\u0131 al\u0131p \u00fczerinde i\u015flem yapmak, Svelte'in reaktivitesini do\u011fru tetiklemek ve beklenmeyen yan etkilerden ka\u00e7\u0131nmak i\u00e7in iyi bir y\u00f6ntemdir.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong>Svelte <code>flip<\/code> Animasyonu:<\/strong><\/p>\n<ul>\n<li><code>import { flip } from &#039;svelte\/animate&#039;;<\/code> ile Svelte'in yerle\u015fik <code>flip<\/code> animasyonunu i\u00e7e aktar\u0131yoruz.<\/li>\n<li>Her <code>li<\/code> etiketine <code>animate:flip={{ duration: 300 }}<\/code> ekleyerek, liste \u00f6\u011felerinin s\u0131ralamas\u0131 de\u011fi\u015fti\u011finde ak\u0131c\u0131 ve ho\u015f bir animasyon ge\u00e7i\u015fi sa\u011fl\u0131yoruz. Bu, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde zenginle\u015ftirir.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong><code>:global(.dnd-ghost)<\/code> Stili:<\/strong><\/p>\n<ul>\n<li><code>:global(.dnd-ghost)<\/code> s\u0131n\u0131f\u0131, bir \u00f6\u011fe s\u00fcr\u00fcklenirken orijinal konumunda g\u00f6r\u00fcnen ge\u00e7ici yer tutucu (placeholder) i\u00e7in kullan\u0131l\u0131r. Bu stil, kullan\u0131c\u0131n\u0131n \u00f6\u011fenin nereye yerle\u015fece\u011fini tahmin etmesine yard\u0131mc\u0131 olur.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Bu uygulamayla, kullan\u0131c\u0131lar art\u0131k listedeki \u00f6\u011feleri fareleriyle s\u00fcr\u00fckleyip istedikleri s\u0131raya b\u0131rakarak listenin dinamik olarak g\u00fcncellendi\u011fini g\u00f6recekler. <code>flip<\/code> animasyonu sayesinde ge\u00e7i\u015fler de olduk\u00e7a ak\u0131c\u0131 ve g\u00f6z yormayan bir deneyim sunacakt\u0131r.<\/p>\n<h2>Geli\u015fmi\u015f Dnd-Master Kullan\u0131m\u0131: \u00d6zelle\u015ftirme ve Karma\u015f\u0131k Senaryolar<\/h2>\n<p>Dnd-Master'\u0131n temel kullan\u0131m\u0131 olduk\u00e7a basit olsa da, k\u00fct\u00fcphane daha karma\u015f\u0131k senaryolar ve derinlemesine \u00f6zelle\u015ftirme i\u00e7in g\u00fc\u00e7l\u00fc mekanizmalar sunar. Uygulaman\u0131z\u0131n benzersiz gereksinimlerini kar\u015f\u0131lamak i\u00e7in bu geli\u015fmi\u015f \u00f6zellikleri nas\u0131l kullanabilece\u011finize dair baz\u0131 ipu\u00e7lar\u0131na g\u00f6z atal\u0131m.<\/p>\n<h3>1. Farkl\u0131 Tipteki \u00d6\u011feleri Y\u00f6netme ve B\u0131rakma Alanlar\u0131n\u0131 K\u0131s\u0131tlama<\/h3>\n<p>Bir g\u00f6rev y\u00f6netim panosunda \"g\u00f6rev\" ve \"not\" gibi farkl\u0131 t\u00fcrde \u00f6\u011feleriniz olabilir ve bunlar\u0131 belirli s\u00fctunlara veya alanlara b\u0131rakmak isteyebilirsiniz. Dnd-Master'\u0131n <code>type<\/code> ve <code>group<\/code> se\u00e7enekleri burada devreye girer.<\/p>\n<pre><code>\n<script>\n  import { dnd_master } from 'dnd-master';\n\n  let tasks = [{ id: 1, text: 'Raporu bitir' }];\n  let notes = [{ id: 2, text: '\u00d6nemli not: Toplant\u0131 10:00' }];\n  let droppedItems = [];\n\n  function handleDrop(event) {\n    const { item, type, target } = event.detail; \/\/ target, b\u0131rak\u0131lan elementtir\n    console.log(<code>Tip: ${type}, \u00d6\u011fren:<\/code>, item);\n\n    if (target.dataset.dropType === type) { \/\/ B\u0131rakma alan\u0131n\u0131n tipi ile s\u00fcr\u00fcklenen \u00f6\u011fenin tipini kar\u015f\u0131la\u015ft\u0131r\n      droppedItems = [...droppedItems, item];\n      \/\/ Orijinal listeden \u00f6\u011feyi kald\u0131rma mant\u0131\u011f\u0131 da buraya eklenebilir\n    } else {\n      alert(<code>Bu alana sadece ${target.dataset.dropType} tipi \u00f6\u011feleri b\u0131rakabilirsiniz.<\/code>);\n    }\n  }\n<\/script>\n\n<h3>G\u00f6revler<\/h3>\n<div class=\"item-container\">\n  {#each tasks as task (task.id)}\n    <div use:dnd_master={{ type: 'task', item: task }} class=\"draggable\">\n      {task.text} (G\u00f6rev)\n    <\/div>\n  {\/each}\n<\/div>\n\n<h3>Notlar<\/h3>\n<div class=\"item-container\">\n  {#each notes as note (note.id)}\n    <div use:dnd_master={{ type: 'note', item: note }} class=\"draggable\">\n      {note.text} (Not)\n    <\/div>\n  {\/each}\n<\/div>\n\n<h3>G\u00f6rev B\u0131rakma Alan\u0131<\/h3>\n<div\n  on:dnd:drop={handleDrop}\n  data-drop-type=\"task\"\n  style=\"min-height: 100px; border: 2px dashed #4CAF50; background-color: #e8f5e9; padding: 10px; margin-bottom: 10px;\"\n>\n  G\u00f6revleri buraya b\u0131rak\u0131n\n  {#each droppedItems as item (item.id)}\n    <div class=\"dropped-item\">{item.text}<\/div>\n  {\/each}\n<\/div>\n\n<h3>Genel B\u0131rakma Alan\u0131<\/h3>\n<div\n  on:dnd:drop={handleDrop}\n  data-drop-type=\"any\"\n  style=\"min-height: 100px; border: 2px dashed #2196F3; background-color: #e3f2fd; padding: 10px;\"\n>\n  Herhangi bir \u00f6\u011feyi buraya b\u0131rak\u0131n\n<\/div>\n\n<style>\n  .item-container {\n    display: flex;\n    gap: 10px;\n    margin-bottom: 20px;\n    flex-wrap: wrap;\n  }\n  .draggable {\n    padding: 10px;\n    border: 1px solid #ccc;\n    background-color: #f9f9f9;\n    cursor: grab;\n    border-radius: 4px;\n    flex-grow: 0;\n    flex-shrink: 0;\n  }\n  .dropped-item {\n    background-color: #dcedc8;\n    border: 1px solid #8bc34a;\n    padding: 8px;\n    margin-top: 5px;\n    border-radius: 3px;\n  }\n  :global(.dnd-dragging) {\n    opacity: 0.7;\n    border: 2px solid #ff9800 !important;\n  }\n  :global(.dnd-droppable-over) {\n    background-color: #fff9c4 !important;\n    border-color: #ffc107 !important;\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>Burada, <code>type<\/code> \u00f6zelli\u011fini kullanarak \u00f6\u011feleri \"task\" ve \"note\" olarak ay\u0131rd\u0131k. B\u0131rakma alanlar\u0131nda <code>data-drop-type<\/code> \u00f6zel \u00f6zniteli\u011fini kullan\u0131p, <code>handleDrop<\/code> fonksiyonu i\u00e7inde <code>event.detail.target.dataset.dropType<\/code> ile bu de\u011fere eri\u015ferek tip kontrol\u00fc yap\u0131yoruz. Bu, kullan\u0131c\u0131 deneyimini daha kontroll\u00fc ve \u00f6ng\u00f6r\u00fclebilir hale getirir.<\/p>\n<h3>2. \u00d6zel S\u00fcr\u00fckleme Verisi (Custom Drag Data)<\/h3>\n<p>Dnd-Master'\u0131n <code>dnd_master<\/code> eylemine bir nesne ge\u00e7irerek, s\u00fcr\u00fcklenen \u00f6\u011feyle birlikte istedi\u011finiz herhangi bir veriyi ta\u015f\u0131yabilirsiniz. Bu veri <code>on:dnd:drop<\/code> olay\u0131nda <code>event.detail.item<\/code> olarak eri\u015filebilir olacakt\u0131r.<\/p>\n<pre><code>\n<div use:dnd_master={{ type: 'image', data: { id: 'img-123', url: '\/path\/to\/image.jpg', size: 'large' } }}>\n  <img decoding=\"async\" src=\"\/path\/to\/image.jpg\" alt=\"S\u00fcr\u00fckle beni\" style=\"width: 100px;\">\n<\/div>\n<\/pre>\n<p><\/code><\/p>\n<p>B\u0131rakma an\u0131nda <code>event.detail.item.url<\/code> veya <code>event.detail.item.size<\/code> gibi bilgilere kolayca eri\u015febilirsiniz.<\/p>\n<h3>3. K\u0131s\u0131tl\u0131 S\u00fcr\u00fckleme Hareketleri (Constraints)<\/h3>\n<p>Baz\u0131 durumlarda \u00f6\u011felerin sadece yatay veya dikey olarak s\u00fcr\u00fcklenmesini isteyebilirsiniz. Dnd-Master'\u0131n kendisi do\u011frudan eksen k\u0131s\u0131tlamalar\u0131 sunmasa da, \u00f6zel CSS veya JavaScript mant\u0131\u011f\u0131 ile bu davran\u0131\u015f taklit edilebilir veya s\u00fcr\u00fckleme olaylar\u0131nda pozisyon verilerini kullanarak k\u0131s\u0131tlamalar uygulanabilir.<\/p>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: S\u00fcr\u00fckleme s\u0131ras\u0131nda bir \"ghost\" (hayalet) \u00f6\u011fesi olu\u015fturmak yerine, orijinal \u00f6\u011fenin konumunu kayd\u0131r\u0131p opacity'sini d\u00fc\u015f\u00fcrerek performans art\u0131rabilirsiniz. Dnd-Master, varsay\u0131lan olarak <code>dnd-ghost<\/code> s\u0131n\u0131f\u0131n\u0131 kullan\u0131r, ancak bu davran\u0131\u015f\u0131 kendiniz de \u00f6zelle\u015ftirebilirsiniz.\n    <\/div>\n<h3>4. \u0130\u00e7 \u0130\u00e7e S\u00fcr\u00fckle-B\u0131rak Senaryolar\u0131<\/h3>\n<p>Dnd-Master, i\u00e7 i\u00e7e ge\u00e7mi\u015f s\u00fcr\u00fckle-b\u0131rak yap\u0131lar\u0131n\u0131 destekler. \u00d6rne\u011fin, bir g\u00f6rev listesinin i\u00e7inde alt g\u00f6revlerin de s\u00fcr\u00fcklenip b\u0131rak\u0131labildi\u011fi bir yap\u0131 olu\u015fturabilirsiniz. Bu t\u00fcr bir senaryoda, her seviyedeki \u00f6\u011feye ve konteynere ayr\u0131 ayr\u0131 <code>dnd_master<\/code> eylemini uygulaman\u0131z ve <code>group<\/code> veya <code>type<\/code> \u00f6zelliklerini dikkatlice y\u00f6netmeniz gerekir.<\/p>\n<p>Ana liste i\u00e7in bir <code>group<\/code> belirlerken, i\u00e7 listeler i\u00e7in farkl\u0131 bir <code>group<\/code> veya <code>type<\/code> kullanarak etkile\u015fimlerin \u00e7ak\u0131\u015fmas\u0131n\u0131 \u00f6nleyebilirsiniz. Ayr\u0131ca, olay yay\u0131l\u0131m\u0131n\u0131 (<code>event.stopPropagation()<\/code>) kullanarak, i\u00e7 eleman\u0131n s\u00fcr\u00fcklenmesinin d\u0131\u015f eleman\u0131n s\u00fcr\u00fcklenmesini tetiklemesini engelleyebilirsiniz.<\/p>\n<pre><code>\n<!-- \u0130\u00e7 i\u00e7e \u00f6rnek yap\u0131 -->\n<ul use:dnd_master={{ group: 'main-list', type: 'main-item' }} on:dnd:reorder={handleMainReorder}>\n  {#each mainItems as mainItem (mainItem.id)}\n    <li use:dnd_master={{ item: mainItem, type: 'main-item', group: 'main-list' }}>\n      {mainItem.text}\n      <ul use:dnd_master={{ group: <code>sub-list-${mainItem.id}<\/code>, type: 'sub-item' }} on:dnd:reorder={handleSubReorder(mainItem.id)}>\n        {#each mainItem.subItems as subItem (subItem.id)}\n          <li use:dnd_master={{ item: subItem, type: 'sub-item', group: <code>sub-list-${mainItem.id}<\/code> }}>\n            {subItem.text}\n          <\/li>\n        {\/each}\n      <\/ul>\n    <\/li>\n  {\/each}\n<\/ul>\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, her alt liste i\u00e7in benzersiz bir <code>group<\/code> (\u00f6rne\u011fin <code>sub-list-1<\/code>, <code>sub-list-2<\/code>) kullanarak, alt \u00f6\u011felerin yaln\u0131zca kendi ana listeleri i\u00e7inde veya ayn\u0131 gruba sahip di\u011fer alt listeler aras\u0131nda s\u00fcr\u00fcklenip b\u0131rak\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<p>Bu geli\u015fmi\u015f teknikler, Dnd-Master'\u0131 kullanarak sadece basit s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fi olu\u015fturmakla kalmay\u0131p, ayn\u0131 zamanda uygulaman\u0131z i\u00e7in zengin ve karma\u015f\u0131k kullan\u0131c\u0131 etkile\u015fimleri tasarlaman\u0131za olanak tan\u0131r. Her zaman oldu\u011fu gibi, en iyi pratik, \u00f6ncelikle temel bir \u00e7\u00f6z\u00fcmle ba\u015flamak ve ard\u0131ndan uygulaman\u0131z\u0131n gereksinimleri do\u011frultusunda kademeli olarak karma\u015f\u0131kl\u0131\u011f\u0131 art\u0131rmakt\u0131r.<\/p>\n<h2>Performans, Eri\u015filebilirlik ve Mobil Uyumluluk \u0130pu\u00e7lar\u0131<\/h2>\n<p>Web uygulamalar\u0131nda s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fi sunarken, performans, eri\u015filebilirlik ve mobil uyumluluk gibi kritik fakt\u00f6rleri g\u00f6z ard\u0131 etmemek gerekir. Dnd-Master, bu alanlarda geli\u015ftiricilere yard\u0131mc\u0131 olacak temelleri sa\u011flasa da, nihai kullan\u0131c\u0131 deneyimi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde sizin uygulad\u0131\u011f\u0131n\u0131z en iyi pratiklere ba\u011fl\u0131d\u0131r.<\/p>\n<h3>Performans Optimizasyonu<\/h3>\n<p>Dnd-Master zaten hafif bir k\u00fct\u00fcphanedir, ancak yine de uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rmak i\u00e7in yapabilece\u011finiz ek \u015feyler vard\u0131r:<\/p>\n<ol>\n<li>\n            <strong>B\u00fcy\u00fck Listelerde Sanalla\u015ft\u0131rma (Virtualization) Kullan\u0131n:<\/strong> E\u011fer y\u00fczlerce veya binlerce \u00f6\u011fe i\u00e7eren bir listeyi s\u00fcr\u00fckle-b\u0131rak \u00f6zelli\u011fi ile kullan\u0131yorsan\u0131z, DOM'daki t\u00fcm \u00f6\u011feleri ayn\u0131 anda render etmek performans\u0131 ciddi \u015fekilde etkileyebilir. Svelte i\u00e7in Svelte-Virtual-List veya svelte-tiny-virtual-list gibi k\u00fct\u00fcphanelerle sanalla\u015ft\u0131rma uygulayarak sadece g\u00f6r\u00fcn\u00fcrdeki \u00f6\u011feleri render edebilir ve performans darbo\u011fazlar\u0131n\u0131 \u00f6nleyebilirsiniz. Dnd-Master'\u0131 sanalla\u015ft\u0131r\u0131lm\u0131\u015f listelerle entegre etmek genellikle daha dikkatli bir yakla\u015f\u0131m gerektirse de, uzun vadede uygulaman\u0131z\u0131n ak\u0131c\u0131l\u0131\u011f\u0131 i\u00e7in hayati \u00f6neme sahiptir.\n        <\/li>\n<li>\n            <strong>Gereksiz Yeniden Hesaplamalardan Ka\u00e7\u0131n\u0131n:<\/strong> S\u00fcr\u00fckleme olaylar\u0131 genellikle h\u0131zl\u0131 tetiklenir (<code>on:dnd:dragmove<\/code> gibi). Bu olay dinleyicilerinin i\u00e7inde pahal\u0131 DOM i\u015flemleri veya yo\u011fun veri manip\u00fclasyonlar\u0131 yapmaktan ka\u00e7\u0131n\u0131n. Yaln\u0131zca gerekli olan state g\u00fcncellemelerini yap\u0131n ve debouncing veya throttling tekniklerini kullanarak olay tetikleme s\u0131kl\u0131\u011f\u0131n\u0131 kontrol alt\u0131nda tutun.\n        <\/li>\n<li>\n            <strong>CSS Animasyonlar\u0131n\u0131 Tercih Edin:<\/strong> S\u00fcr\u00fckleme s\u0131ras\u0131nda g\u00f6rsel geri bildirimler (\u00f6rne\u011fin, \u00f6\u011fenin b\u00fcy\u00fcmesi, g\u00f6lge eklenmesi) i\u00e7in m\u00fcmk\u00fcn oldu\u011funca CSS <code>transform<\/code> ve <code>opacity<\/code> \u00f6zelliklerini kullan\u0131n. Bu \u00f6zellikler GPU taraf\u0131ndan h\u0131zland\u0131r\u0131ld\u0131\u011f\u0131 i\u00e7in daha ak\u0131c\u0131 animasyonlar sunar ve ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 (main thread) bloke etmez. Svelte'in <code>animate:flip<\/code> direktifi de bu konuda harika bir \u00f6rnektir.\n        <\/li>\n<li>\n            <strong>Minimalist S\u00fcr\u00fckleme Geri Bildirimi:<\/strong> S\u00fcr\u00fckleme s\u0131ras\u0131nda g\u00f6sterilen \"ghost\" (hayalet) \u00f6\u011fesini m\u00fcmk\u00fcn oldu\u011funca basit tutun. Karma\u015f\u0131k stiller veya \u00e7ok fazla i\u00e7eri\u011fe sahip bir ghost \u00f6\u011fesi, performans \u00fczerinde olumsuz etki yaratabilir.\n        <\/li>\n<\/ol>\n<h3>Eri\u015filebilirlik (Accessibility)<\/h3>\n<p>S\u00fcr\u00fckle-b\u0131rak etkile\u015fimleri genellikle fare veya dokunmatik ekran kullan\u0131m\u0131yla ili\u015fkilendirilir. Ancak klavye kullanan veya yard\u0131mc\u0131 teknolojilere ihtiya\u00e7 duyan kullan\u0131c\u0131lar i\u00e7in de eri\u015filebilir olmal\u0131d\u0131r. Dnd-Master bu konuda do\u011frudan bir \u00e7\u00f6z\u00fcm sunmasa da, kendi eri\u015filebilirlik katman\u0131n\u0131z\u0131 eklemeniz \u00f6nemlidir:<\/p>\n<ol>\n<li>\n            <strong>WAI-ARIA Niteliklerini Kullan\u0131n:<\/strong> S\u00fcr\u00fckle-b\u0131rak \u00f6\u011feleri ve alanlar\u0131 i\u00e7in uygun ARIA niteliklerini (<code>aria-grabbed<\/code>, <code>aria-dropeffect<\/code>, <code>aria-roledescription<\/code> gibi) ekleyin. Bu, ekran okuyucular\u0131n kullan\u0131c\u0131lara ne oldu\u011funu ve nas\u0131l etkile\u015fim kurabileceklerini bildirmesine yard\u0131mc\u0131 olur. \u00d6rne\u011fin, bir liste \u00f6\u011fesi i\u00e7in <code>aria-grabbed=\"false\"<\/code> ba\u015flay\u0131p, s\u00fcr\u00fcklenmeye ba\u015fland\u0131\u011f\u0131nda <code>aria-grabbed=\"true\"<\/code> olarak g\u00fcncelleyebilirsiniz.\n        <\/li>\n<li>\n            <strong>Klavye Deste\u011fi Sa\u011flay\u0131n:<\/strong> Kullan\u0131c\u0131lar\u0131n klavye ile \u00f6\u011feleri se\u00e7mesine, ta\u015f\u0131mas\u0131na ve b\u0131rakmas\u0131na izin veren alternatif bir mekanizma sunun. Bu genellikle <code>Tab<\/code> tu\u015fu ile odaklan\u0131labilir \u00f6\u011feler ve <code>Space<\/code> veya <code>Enter<\/code> tu\u015flar\u0131 ile tetiklenebilen ta\u015f\u0131ma komutlar\u0131 (\u00f6rne\u011fin, ok tu\u015flar\u0131yla yeni konumu se\u00e7ip tekrar <code>Space<\/code> ile b\u0131rakma) \u015feklinde uygulan\u0131r.\n        <\/li>\n<li>\n            <strong>G\u00f6rsel \u0130pu\u00e7lar\u0131 ve Metin Alternatifleri:<\/strong> S\u00fcr\u00fckle-b\u0131rak etkile\u015fimini g\u00f6rsel olarak alg\u0131lamakta zorlanan kullan\u0131c\u0131lar i\u00e7in a\u00e7\u0131klay\u0131c\u0131 metinler veya simgeler kullan\u0131n. \u00d6rne\u011fin, \"bu \u00f6\u011feyi s\u00fcr\u00fcklemek i\u00e7in t\u0131klay\u0131n ve s\u00fcr\u00fckleyin\" gibi k\u0131sa talimatlar sunulabilir.\n        <\/li>\n<\/ol>\n<pre><code>\n<div\n  use:dnd_master={{ type: 'task', item: task }}\n  aria-grabbed={isDragging ? 'true' : 'false'}\n  aria-roledescription=\"s\u00fcr\u00fckle-b\u0131rak \u00f6\u011fesi\"\n  tabindex=\"0\"\n  on:keydown={handleKeyboardDrag}\n>\n  {task.text}\n<\/div>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte <code>aria-grabbed<\/code> ve <code>aria-roledescription<\/code> gibi ARIA nitelikleri eklenmi\u015f ve klavye ile odaklan\u0131labilir hale getirilmi\u015ftir (<code>tabindex=\"0\"<\/code>). <code>handleKeyboardDrag<\/code> fonksiyonu ise klavye olaylar\u0131n\u0131 i\u015fleyerek s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fini taklit edebilir.<\/p>\n<h3>Mobil Uyumluluk<\/h3>\n<p>Dnd-Master, dokunmatik olaylar\u0131 do\u011fal olarak destekler, bu da mobil cihazlarda sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Ancak, mobil deneyimi daha da iyile\u015ftirmek i\u00e7in:<\/p>\n<ol>\n<li>\n            <strong>Dokunma Hedeflerini B\u00fcy\u00fct\u00fcn:<\/strong> K\u00fc\u00e7\u00fck dokunma hedefleri (s\u00fcr\u00fcklemek i\u00e7in \u00e7ok k\u00fc\u00e7\u00fck \u00f6\u011feler), mobil kullan\u0131c\u0131lar i\u00e7in sinir bozucu olabilir. S\u00fcr\u00fckle-b\u0131rak \u00f6\u011felerinin yeterince b\u00fcy\u00fck oldu\u011fundan veya etraflar\u0131nda yeterli dolgu (padding) oldu\u011fundan emin olun.\n        <\/li>\n<li>\n            <strong>Gecikmeleri Azalt\u0131n:<\/strong> Mobil taray\u0131c\u0131lar, dokunma olaylar\u0131n\u0131 genellikle bir gecikmeyle (300ms) i\u015fler. Bu, \u00e7ift dokunma (double-tap) jestlerini ay\u0131rt etmek i\u00e7indir. Bu gecikmeyi \u00f6nlemek i\u00e7in CSS <code>touch-action: none;<\/code> \u00f6zelli\u011fini s\u00fcr\u00fckle-b\u0131rak \u00f6\u011felerine uygulayabilirsiniz. Bu, taray\u0131c\u0131ya dokunma olaylar\u0131n\u0131 do\u011frudan uygulaman\u0131n i\u015flemesi gerekti\u011fini bildirir. Ancak dikkatli olun, bu baz\u0131 kayd\u0131rma davran\u0131\u015flar\u0131n\u0131 etkileyebilir.\n        <\/li>\n<li>\n            <strong>Duyarl\u0131 Tasar\u0131m (Responsive Design):<\/strong> S\u00fcr\u00fckle-b\u0131rak aray\u00fcz\u00fcn\u00fcz\u00fcn farkl\u0131 ekran boyutlar\u0131na ve y\u00f6nelimlerine uygun oldu\u011fundan emin olun. CSS Media Query'leri veya Svelte'in duyarl\u0131 state y\u00f6netimi ile (\u00f6rne\u011fin, ekran geni\u015fli\u011fine g\u00f6re layout'u de\u011fi\u015ftirmek) bunu sa\u011flayabilirsiniz. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlarda \u00f6\u011felerin yan yana yerine alt alta s\u0131ralanmas\u0131 daha uygun olabilir.\n        <\/li>\n<\/ol>\n<pre><code>\n<style>\n  .draggable {\n    touch-action: none; \/* Mobil cihazlarda gecikmeyi azalt\u0131r *\/\n    \/* Di\u011fer stiller *\/\n  }\n\n  @media (max-width: 768px) {\n    .item-container {\n      flex-direction: column; \/* K\u00fc\u00e7\u00fck ekranlarda dikey s\u0131ralama *\/\n    }\n  }\n<\/style>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ipu\u00e7lar\u0131 ve teknikler, Dnd-Master ile olu\u015fturdu\u011funuz s\u00fcr\u00fckle-b\u0131rak \u00f6zelliklerinin sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda herkes i\u00e7in eri\u015filebilir, h\u0131zl\u0131 ve keyifli olmas\u0131n\u0131 sa\u011flayacakt\u0131r. Modern web geli\u015ftirme prensiplerini uygulayarak, kullan\u0131c\u0131lar\u0131n\u0131za ger\u00e7ekten birinci s\u0131n\u0131f bir deneyim sunabilirsiniz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehberde, Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fi eklemek i\u00e7in Dnd-Master k\u00fct\u00fcphanesini derinlemesine inceledik. Dnd-Master'\u0131n hafif yap\u0131s\u0131, Svelte Actions ile kusursuz entegrasyonu ve esnek API'si sayesinde, basit liste s\u0131ralamalar\u0131ndan karma\u015f\u0131k interaktif panolara kadar bir\u00e7ok farkl\u0131 senaryoyu kolayca hayata ge\u00e7irebilece\u011finizi g\u00f6rd\u00fck. Performans, eri\u015filebilirlik ve mobil uyumlulu\u011fu g\u00f6z \u00f6n\u00fcnde bulundurarak uygulamalar\u0131n\u0131z\u0131 nas\u0131l daha da iyile\u015ftirece\u011finize dair ipu\u00e7lar\u0131n\u0131 da payla\u015ft\u0131k.<\/p>\n<p>Dnd-Master, Svelte geli\u015ftiricileri i\u00e7in ger\u00e7ekten g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Daha az kodla daha fazla i\u015f yapmak isteyenler ve uygulama performans\u0131n\u0131 \u00f6ncelikli tutanlar i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr. Kullan\u0131c\u0131lar\u0131n\u0131za sezgisel ve keyifli bir deneyim sunmak istiyorsan\u0131z, Dnd-Master'\u0131 projenize dahil etmekten \u00e7ekinmeyin.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. Dnd-Master di\u011fer Svelte s\u00fcr\u00fckle-b\u0131rak k\u00fct\u00fcphanelerinden fark\u0131 nedir?<\/strong><\/p>\n<p>Dnd-Master'\u0131n temel fark\u0131, Svelte'in yerel <code>use:<\/code> eylem (action) mekanizmas\u0131n\u0131 kullanmas\u0131d\u0131r. Bu, k\u00fct\u00fcphanenin olduk\u00e7a hafif olmas\u0131n\u0131, Svelte'in reaktif yap\u0131s\u0131yla do\u011fal bir uyum i\u00e7inde \u00e7al\u0131\u015fmas\u0131n\u0131 ve minimal ba\u011f\u0131ml\u0131l\u0131\u011fa sahip olmas\u0131n\u0131 sa\u011flar. Genellikle di\u011fer k\u00fct\u00fcphaneler daha fazla ba\u011f\u0131ml\u0131l\u0131k veya farkl\u0131 bir API yap\u0131s\u0131 gerektirebilirken, Dnd-Master Svelte'in felsefesine sad\u0131k kalarak basit ve etkili bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p><strong>2. Mobil cihazlarda sorunsuz \u00e7al\u0131\u015f\u0131r m\u0131?<\/strong><\/p>\n<p>Evet, Dnd-Master dokunmatik olaylar\u0131 (touch events) destekleyecek \u015fekilde tasarlanm\u0131\u015ft\u0131r ve mobil cihazlarda sorunsuz bir \u015fekilde \u00e7al\u0131\u015f\u0131r. Ancak, mobil kullan\u0131c\u0131 deneyimini daha da iyile\u015ftirmek i\u00e7in dokunma hedeflerinin yeterince b\u00fcy\u00fck oldu\u011fundan emin olmak ve <code>touch-action: none;<\/code> gibi CSS \u00f6zelliklerini kullanarak dokunma gecikmelerini azaltmak gibi ek optimizasyonlar yapman\u0131z \u00f6nerilir.<\/p>\n<p><strong>3. Karma\u015f\u0131k i\u00e7 i\u00e7e s\u00fcr\u00fckle-b\u0131rak senaryolar\u0131n\u0131 destekliyor mu?<\/strong><\/p>\n<p>Evet, Dnd-Master i\u00e7 i\u00e7e s\u00fcr\u00fckle-b\u0131rak yap\u0131lar\u0131n\u0131 destekler. Her i\u00e7 veya d\u0131\u015f s\u00fcr\u00fckle-b\u0131rak alan\u0131na ve \u00f6\u011fesine ayr\u0131 ayr\u0131 <code>dnd_master<\/code> eylemini uygulayarak ve <code>type<\/code> ile <code>group<\/code> \u00f6zelliklerini dikkatlice y\u00f6neterek karma\u015f\u0131k senaryolar olu\u015fturabilirsiniz. \u00d6zellikle <code>group<\/code> \u00f6zelli\u011fi, farkl\u0131 s\u00fcr\u00fckle-b\u0131rak konteynerleri aras\u0131ndaki etkile\u015fimi kontrol etmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p><strong>4. Performans \u00fczerinde bir etkisi var m\u0131?<\/strong><\/p>\n<p>Dnd-Master, hafif yap\u0131s\u0131 sayesinde performans \u00fczerinde minimal bir etkiye sahiptir. Svelte'in derleyici (compiler) avantajlar\u0131yla birle\u015fti\u011finde, olduk\u00e7a optimize edilmi\u015f bir s\u00fcr\u00fckle-b\u0131rak \u00e7\u00f6z\u00fcm\u00fc sunar. Ancak, \u00e7ok b\u00fcy\u00fck listelerle \u00e7al\u0131\u015f\u0131rken (y\u00fczlerce veya binlerce \u00f6\u011fe), sanalla\u015ft\u0131rma tekniklerini kullanmak ve olay dinleyicilerinde pahal\u0131 i\u015flemleri yapmaktan ka\u00e7\u0131nmak gibi genel performans optimizasyon prensiplerine uymak her zaman iyi bir pratiktir.<\/p>\n<p><strong>5. Eri\u015filebilirlik (Accessibility) i\u00e7in nelere dikkat etmeliyim?<\/strong><\/p>\n<p>Dnd-Master, s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011finin temelini sa\u011flarken, eri\u015filebilirlik tamamen sizin uygulaman\u0131z\u0131n sorumlulu\u011fundad\u0131r. Klavyeyle gezinmeyi desteklemek, uygun WAI-ARIA niteliklerini (<code>aria-grabbed<\/code>, <code>aria-dropeffect<\/code>) kullanmak, ekran okuyucular i\u00e7in a\u00e7\u0131klay\u0131c\u0131 metinler sa\u011flamak ve alternatif etkile\u015fim y\u00f6ntemleri sunmak gibi \u00f6nlemler alarak uygulaman\u0131z\u0131n daha kapsay\u0131c\u0131 olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin!&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32031","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc<\/title>\n<meta name=\"description\" content=\"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master&#039;\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API&#039;si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc\" \/>\n<meta property=\"og:description\" content=\"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master&#039;\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API&#039;si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-16T20:31:25+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc\",\"datePublished\":\"2025-10-16T20:31:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\"},\"wordCount\":4186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\",\"name\":\"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-16T20:31:25+00:00\",\"description\":\"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master'\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API'si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc","description":"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master'\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API'si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/","og_locale":"tr_TR","og_type":"article","og_title":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc","og_description":"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master'\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API'si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-16T20:31:25+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc","datePublished":"2025-10-16T20:31:25+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/"},"wordCount":4186,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/","url":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/","name":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-16T20:31:25+00:00","description":"Svelte uygulamalar\u0131n\u0131za s\u00fcr\u00fckle-b\u0131rak (drag-and-drop) yetene\u011fi eklemek karma\u015f\u0131k veya performans sorunlar\u0131na yol a\u00e7an bir s\u00fcre\u00e7 gibi mi g\u00f6r\u00fcn\u00fcyor? Endi\u015felenmeyin! Bu kapsaml\u0131 rehberde, Svelte ekosisteminin parlayan y\u0131ld\u0131zlar\u0131ndan biri olan Dnd-Master'\u0131 ele alaca\u011f\u0131z. Hafif yap\u0131s\u0131, esnek API'si ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle Dnd-Master, kullan\u0131c\u0131 deneyiminizi zenginle\u015ftiren interaktif aray\u00fczler olu\u015fturman\u0131z\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/dnd-master-svelte-icin-hafif-ve-guclu-surukle-birak-cozumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dnd-Master: Svelte \u0130\u00e7in Hafif ve G\u00fc\u00e7l\u00fc S\u00fcr\u00fckle-B\u0131rak \u00c7\u00f6z\u00fcm\u00fc"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32031"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32031\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32031"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32031"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}