GH GambleHub

Drag & Drop Widget & lar

1) Düşünje we ssenariýalar

Drag & Drop-widjetler - ulanyjynyň tora birikdirilen kanwada erkin ýerleşdirýän interaktiw bloklary (grafika kartoçkalary, tablisalar, süzgüçler, hereket düwmeleri). Presetler - çalt ulanyp, paýlaşyp we wersiýa edip boljak saklanan düzüm we stiller (layout + tema + parametrler).

Adaty ssenariler:
  • Taýýar bloklardan daşbord ýygnamak (KPI kartoçkalary, grafikler, süzgüçler).
  • "Ykjam", "Analitika", "Prezentasiýa" presetleri arkaly düzülişi çalt çalyşmak.
  • Bilelikde redaktirlemek: prodakt widjetleri ýerleşdirýär, analitik çeşmeleri sazlaýar.
  • Steýkholderler üçin "diňe okamak".

2) Binagärlik ýörelgeleri

1. Grid-first: logiki sütünlerde/setirlerde ýerleşmek (12/24), pikseller - emele gelenler.
2. Snapping & Guides: magnit gollanmalar, tora we goňşulara ýapyşmak, tekizlemek.
3. Constraint-aware: ululyk/proporsiýa çäklendirijileri, min/max, lock-aspect.
4. Safe-by-default: üznüksiz awto-gorap saklamak, geleşik çap etmek, undo/redo.
5. A11y-first: Klawiaturadan DnD we üýtgeşmeleri seslendirmek.
6. Realtime-ready: CRDT/OT köp ulanyjy sessiýalary üçin.
7. Themable: dizaýn bellikleri, mowzuk presetleri, açyk/gara/kontrast re modeimleri.
8. Portable: eksport/import JSON/YAML; shemalary wersiýalaşdyrmak.

3) Maglumatlaryň modeli (ýönekeýleşdirilen)

json
{
"id": "layout_01",
"name": "Analytics - Compact,"
"version": "2. 1. 0",
"grid": { "cols": 12, "rowHeight": 8, "gutter": 8, "margin": 16 },
"theme": { "preset": "light-pro", "tokens": { "radius": 12, "elevation": "soft" } },
"widgets": [
{
"id": "w_kpi_1",
"type": "kpi",
"title": "GGR",
"pos": { "x": 0, "y": 0, "w": 3, "h": 4, "z": 1 },
"constraints": { "minW": 2, "minH": 3, "lockAspect": false },
"props": { "format": "currency", "source": "ggr_daily" }
},
{
"id": "w_chart_1",
"type": "lineChart",
"title": "Deposits Trend",
"pos": { "x": 3, "y": 0, "w": 6, "h": 8, "z": 1 },
"props": { "source": "deposits", "legend": true }
},
{
"id": "w_table_1",
"type": "table",
"title": "Top Segments",
"pos": { "x": 9, "y": 0, "w": 3, "h": 12, "z": 2 },
"props": { "source": "segments_top", "pageSize": 12 }
}
],
"meta": { "createdBy": "dima", "updatedAt": "2025-11-03T17:55:00Z" }
}

4) Grid, baglanyşyklar we gollanmalar

Desktop üçin 12 sütün, planşet üçin 6 sütün, telefonlar üçin 4 sütün; 'rowHeight' durnukly dik ädim üçin deňdir.
Snapping: gyralarda/merkezlerde baglanyşyk; "magnitler" 4/8 px; goňşularyna ýakynlaşanda akylly ýolbeletler.
Awto-flow: gapma-garşylyk ýüze çykanda aşakda awtomatiki geçirmek; "ýykylýan bloklaryň" algoritmi.
Responsivity: breakpoints → alternatiw 'pos' her arakesme nokady üçin.

5) DnD-wakalar we ýagdaýlar

События: `dragStart`, `drag`, `dragOver`, `drop`, `resizeStart`, `resize`, `resizeEnd`, `select`, `group`, `ungroup`, `reorder`, `undo`, `redo`.

Ýagdaýlary:
  • Ghost/Preview: süýräniňizde aç-açan kontury.
  • Placeholders: Rugsat berilýän zolaklar (ýaşyl yşyklandyryş), gadagan (gyzyl yşyklandyryş).
  • Collision map: işleýän öýjükleri çalt hasaplamak (bitset/interval tree).

6) Gaýtadan ýazmak, tekizlemek, z-index

Resaýzyň burçlaryndaky tutawaçlar + proporsiýalary saklamak üçin 'Shift' tutawaçlary.
Topary deňleşdirmek: "çep/sag gyrada", "merkezde", "deň paýlamak".
Aralyk çäkli 'z', "öň/arka" düwmeleri.

7) Toparlar, gaplar we goýmalar

Toparlar: köp saýlamak, bilelikde süýremek, toparlaýyn deňleşdirmek.
Konteýner-widjetler: tablar, akkordeonlar, karuseller - gyz widjetleri kabul etmegi bilýärler.
Konteýneriň çäklendirijileri: daşarky tor ≠ içki (beýleki sütünler).

8) Presetler (şablonlar) we wersiýalar

Presetleriň görnüşleri: layout, tema (theme), "widget toplumy", "düzüliş + maglumatlar".
Wersiýa: 'semver' shemasy we göçmek (meýdan kartasy, defoltlar).
Preview & Apply: ulanylmazdan öň öňünden görmek.
Scoped presets: şahsy, toparlaýyn, global; okamak/redaktirlemek hukugy.
Eksport/Import: JSON/YAML, gözegçilik mukdary bilen gol, wersiýanyň laýyklygyny barlamak.

9) Elýeterlilik (A11y) we klawiatura

DnD doly keýboard:
  • 'Enter/Space' - Geçirişe başla; oklar - setir ädimine geçmek; 'Shift' + oklar - çaltlaşdyrylan ädim; 'Esc' - ýatyrmak.
  • 'Ctrl/Cmd + G' - toparlanyň; 'Ctrl/Cmd + Shift + G' - toparlanyň.
  • 'Alt' - tor baglanyşygyny wagtlaýyn öçürmek.
  • SR: "Göçürildi (x, y). Ýapyşmak: açyldy. Gapma-garşylyk: hawa/ýok".
  • Fokus halkalary, rezaýzyň uly tutawaçlary, beýany bolan aýlaw zolaklary.

10) Taç we ykjam patternler

DnD başlamak üçin Long-press (300-500 ms).
Uly nyşanlar (azyndan 40-48 px).
Uýgunlaşdyrylan gural panelleri (aşaky dock paneli).
"Redaktirleme re modeimi": kenara geçirilende tuval aýlanmagyny blokirlemek, dik awto-skroll.

11) Widget hereketler (Actionable Widgets)

Gurlan CTA (düwme), kontekstiň menýusy, drag-clone ('Alt' bilen köpeltmek).
Widget üçin "Çalt presetler" (dykyzlyk, rowaýat, reňk shemasy).
Şertler: loading/empty/error, howpsuz bloklar ("maglumatlar yzda").

12) Bilelikdäki iş we neşirler

Realtime: CRDT (Yjs) ýa-da OT (Quill-çemeleşme) - gatnaşyjylaryň kursorlary, toparlaryň petiklenmegi.
Hukuklar: 'Owner', 'Editor', 'Viewer'; suraty çap etmek (immutable snapshot).
Akymlar: taslama → revyu → neşir etmek; üýtgeşmeleri deňeşdirmek (diff layout's).

13) Undo/Redo we Awto gorap saklamak

Buýruk tekeri: her bir amal - 'do/undo' buýrugy.
Müşderi boýunça žurnal (in-memory + döwürleýin persist), uzynlyk boýunça çäk.
Auto-save: her N sekunt/po 'idle', "Saklandy" görkezijisi bilen.

14) Temizasiýa we dizaýn-bellikler

json
{
"themeId": "light-pro",
"tokens": {
"fontScale": { "h1": 24, "h2": 18, "body": 14 },
"radius": 12,
"elevation": "soft",
"palette": { "primary": "#3366FF", "critical": "#E53935" }
}
}

Saýlamasyz mowzuklary üýtgetmek (diňe wizual bellikler).
AA/AAA kontrast, High-Contrast re modeimi, dogry çal bilen garaňky tema.

15) Öndürijilik

Gatlaklara görä çyzmak (çylşyrymly grafikler üçin canvas/webgl, hrom üçin DOM).
Sanlaşdyrma sanawlary/tablisalary, throttle 'drag' (16 ms), requestAnimationFrame.
Diff-render: diňe üýtgedilen widjetleri täzeden çyzmak.
Gapma-garşylyklary we gidlinleri sanamak üçin keş.

16) Howpsuzlyk we mazmuny goramak

HTML widjetleri üçin sanbox (iframe, CSP, 'sandbox' baýdaklary).
Damjalary çäklendirmek: whitelist görnüşleri (faýllar, baglanyşyklar, JSON presetleri); ululygyny we mazmunyny barlamak.
Presetlere bolan hukuklar (RBAC/ABAC), eksport/import barlagy.

17) Widjetleriň API-si (şertnama)

ts interface Widget {
id: string;
type: string;
pos: { x:number; y:number; w:number; h:number; z:number };
constraints?: { minW?:number; minH?:number; maxW?:number; maxH?:number; lockAspect?:boolean };
props: Record<string, unknown>;
validate? (props): { ok: boolean; errors?: string[] };
onDrop? (dataTransfer): DropResult ;//support for external drop onAction? (actionId: string, payload?: any): void;
}

Durmuş sikli wakalary: 'mount', 'resize', 'visibilityChange'.
Propslary çap etmezden öň tassyklamak.

18) Import/eksport we migrasiýa

Eksport edýär: 'grid', 'widgets', 'theme', 'meta'.
Import: shema wersiýalaryny barlamak, awtomatiki göçmek (meýdan kartoçkalary/defoltlar), hasabat.
Bütewiligi kepillendirmek üçin hash bilen Lock-file presenti.

19) Gyzgyn düwmeler (maslahat berilýär)

Nawigasiýa: '← ↑ → ↓' - hereket etmek; 'Shift' oklar - çalt ädim.
Jogap: 'Alt' oklar.
Amallar: 'Ctrl/Cmd + D' - dublikat; 'Ctrl/Cmd + G' - topar; 'Ctrl/Cmd + Shift + G' - topar.
Derejeler: '['/']' - z-index boýunça yza/öňe.
Undo/Redo: `Ctrl/Cmd+Z` / `Ctrl/Cmd+Shift+Z` (или `Y`).
'Ctrl/Cmd + 1.. 9' - saklananlary çalt ulanmak.

20) UX-patternler

Ilkinji işe girizilende çalt gidler (3-5 ädimde mikro-onbording).
Tor mody: "Tory görkezmek/gizlemek" düwmesini açyň.
Gapma-garşylyklarda inline maslahatlar ("elýeterli däl: min. widget ini = 3").
Ýerleşiş taryhy: öňki wersiýasyna gaýdyp gelmek.

21) Synag-meýilnama

Birlik: gapma-garşylyklary hasaplamak, snapping, walidator constraints.
Integrasiýa: DnD syçan/tuşla/klawiatura; toparlanmalar; konteýnerler.
E2E: daşbordyň "noldan" ýygnalmagy, presetiň ulanylmagy, neşir edilmegi, eksport/import.
Bulam-bujarlyk: renderiň gijikdirilmegi, baglanyşygyň ýitmegi (realtime), hukuklaryň gapma-garşylygy.
A11y: klawiatura ssenarileri, SR-ses, kontrast.

22) Girizmegiň çek-sanawy

  • Tor/arakesme nokatlary we snapping sazlandy
  • Gaýtadan işlemek/toparlar/tekizlemek işleýär we synagdan geçirildi
  • Klawiatura DnD we ekran maslahatlary goşuldy
  • Awtoseýw, undo/redo, ýerleşiş taryhy
  • Sazlamalar: wersiýalar, hukuklar, eksport/import
  • Mowzuklar we dizaýn bellikleri, High-Contrast re modeimi
  • Realtime-hyzmatdaşlyk we gapma-garşylyklary çözmek
  • Damjalary çäklendirmek, faýllary tassyklamak, HTML sandbox
  • Metrikler: adoption, ilkinji ýerleşdiriş wagty, gapma-garşylyklaryň ýalňyşlyklary

23) Mini-FAQ

Näme üçin erkin koordinatlar däl-de, diňe tor?
Tor tekizlemegi, uýgunlaşmagy, presetleriň çydamlylygyny we öndürijiligini aňsatlaşdyrýar.

Arakesme nokatlarynda dürli layout 'lary nädip saklamaly?
Her widgetda awtomatiki fall-back bilen 'pos' breykpoint (desktop/tablet/mobile) bar.

Hyzmatdaşlyk üçin näme saýlamaly - OT ýa-da CRDT?
CRDT offline/gapma-garşylyklar üçin has aňsat; OT - çyzykly tekst amallary üçin ok. Layout üçin köplenç CRDT alynýar.

Jemi

Gowy Drag & Drop widjetleri diňe "kartoçkany süýremek" däl. Bular: berk tor we snapping, amatly toparlar we tekizlemek, klawiatura elýeterliligi, wersiýalary we eksporty bilen durnukly presetler, ygtybarly neşirler we bilelikde işlemek. Muny UX we synag meýilnamasy tarapyndan oýlanyşykly ygtybarly maglumat modeliniň töwereginde guruň - dizaýner çalt, düşnükli we mazmunyň we buýruklaryň ösmegine çydamly bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.