GH GambleHub

드래그 및 드롭 위젯 및 사전 설정

1) 개념과 시나리오

드래그 및 드롭 위젯은 사용자가 그리드를 참조하여 캔버스에 자유롭게 배치하는 대화 형 블록 (그래프 카드, 테이블, 필터, 동작 버튼) 입니다. 사전 설정-신속하게 적용, 공유 및 버전화 할 수있는 레이아웃 및 스타일 (레이아웃 + 테마 + 매개 변수) 을 저장했습니다.

일반적인 시나리오:
  • 준비된 블록에서 대시 보드 조립 (KPI 카드, 그래프, 필터).
  • 사전 설정 "Compact", "Analytics", "Presentation" 을 통한 레이아웃의 빠른 변경.
  • 공동 편집: 제품은 위젯을 배치하고 분석가는 소스를 설정합니다.
  • 이해 관계자를위한 읽기 전용 출판물.

2) 건축 원칙

1. 그리드 우선: 논리 열/행 (12/24), 픽셀-파생 상품에 위치.
2. 스냅 및 가이드: 마그네틱 가이드, 메쉬 및 이웃을 고수하고 정렬합니다.
3. 제약 인식: 크기/종횡비 제한 기, 최소/최대, 잠금 측면.
4. 기본값으로 안전: 연속 자원 조달, 거래 게시, 실행 취소/재실행.
5. A11y- 우선: 키보드에서 DnD 및 음성 변경.
6. 실시간 준비: 멀티 플레이어 세션을위한 CRDT/OT.
7. 논리적: 디자인 토큰, 테마 사전 설정, 밝은/어두운/대비 모드.
8. 휴대용: JSON/YAML 수출/가져 오기; 회로 버전.

3) 데이터 모델 (단순화)

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) 그리드, 스냅 및 가이드

그리드: 데스크톱 용 스피커 12 개, 태블릿 6 개, 전화 용 4 개; 'rowHeight' 는 안정적인 수직 피치에 대해 동일합니다.

스냅 핑: 가장자리/중앙으로 스냅; 4/8 px에서 "자석"; 이웃에게 다가 갈 때 현명한 가이드

자동 흐름: 충돌시 아래 자동 전송; "떨어지는 블록" 알고리즘.
응답: 중단 점 → 각 중단 점에 대한 대체 'pos'.

5) DnD 이벤트 및 상태

확인: 'dragStart', 'drag', 'drag Over', 'drop', 'resizeStart', 'crezeEnd', 'resizeEnd', 'selection', 'group', 'ungroup', 'reorder', 'undo', 'redo'.

상태:
  • 드래그하는 동안 유령/미리보기 -반투명 경로.
  • 장소 보유자: 허용 구역 (녹색), 금지 (빨간색).
  • 충돌 맵-점유 셀 (비트 세트/간격 트리) 의 빠른 계산.

6) 인상, 정렬, z- 인덱스

비율을 유지하기 위해 코너에서 그립을 유지하고 '시프트' 를 유지하십시오.
그룹의 정렬: "왼쪽/오른쪽", "중앙", "고르게 분배".
오버레이 레벨: 범위 제한이있는 'z', 앞/뒤 버튼.

7) 그룹, 컨테이너 및 중첩

그룹: 여러 선택, 결합 된 드래그 앤 드롭, 그룹 정렬.
위젯 컨테이너: 탭, 아코디언, 회전 목마-자식 위젯을 수락하는 방법을 알고 있습니다.
컨테이너 정류장: 외부 그리드 내부 (다른 열).

8) 사전 설정 (템플릿) 및 버전

사전 설정의 종류: 레이아웃, 테마, 위젯 설정, 레이아웃 + 데이터.
Versioning: 'semver' 체계 및 마이그레이션 (필드 맵, 기본값).

적용하기 전에 미리 보기 (S)

스코프 사전 설정: 개인, 팀, 글로벌; 읽기/편집 권한.
내보내기/가져오기: JSON/YAML, 체크섬 서명, 버전 호환성 검사.

9) 접근성 (A11y) 및 키보드

전체 키보드 DnD:
  • '입력/공간' -전송을 시작합니다. 화살표-그리드 간격으로 이동; '시프트' + 화살표-가속 간격; 'Esc' -취소.
  • 'Śl/Cmd + G' - 그룹; 그룹화되지 않은 '차이점/Cmd + 시프트 + G' -
  • 'Alt' -일시적으로 그리드로 스냅을 끄십시오.
  • 음성 연기 SR: "(x, y) 로 이동 고집: 켜라. 갈등: 예/아니요 ".
  • 포커스 링, 큰 정류장 핸들, 설명이있는 드롭 존.

10) 터치 및 모바일 패턴

DnD 시작을위한 롱 프레스 (300-500 ms).
증가 된 대상 (최소 40-48 px).
적응 형 도구 모음 (하단 도크).
편집 모드: 가장자리로 이동할 때 캔버스 스크롤 잠금, 수직 자동 스크롤.

11) 위젯의 동작 (실행 가능한 위젯)

내장 CTA (버튼), 컨텍스트 메뉴, 드래그 클론 (Alt- 헬드 복제).
위젯에 대한 "빠른 사전 설정" (밀도, 전설, 색 구성표).
상태: 로딩/빈/오류, 보안 스터브 ("데이터가 지연되었습니다").

12) 협업 및 출판

실시간: CRDT (예: Yjs) 또는 OT (Quill 접근) -참가자 커서, 그룹 잠금 장치.
권리: '소유자', '편집자', '뷰어'; 불변의 스냅 샷을 게시합니다.
스트림: 초안 → 검토 → 출판; 변경 사항 비교 (diff 레이아웃).

13) 실행 취소/다시 실행 및 자동 저장

명령 버스: 각 작업은 'do/undo' 명령입니다.
클라이언트에 로그 (in-memory + 주기적 지속), 길이 제한.

자동 저장: "저장 된" 표시기가있는 N 초/' 유휴 '

14) 시뮬레이션 및 디자인 토큰

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

레이아웃을 다시 계산하지 않고 테마를 전환합니다 (시각적 토큰 만 해당).
AA/AAA 대비, 고 대조 모드, 올바른 회색의 어두운 테마.

15) 성능

레이어 렌더링 (복잡한 그래프의 경우 캔버스/웹글, 크롬의 경우 DOM).
목록/테이블 가상화, 스로틀 '드래그' (16ms), 요청 애니메이션 프레임.
Diff 렌더링: 수정 된 위젯 만 다시 그립니다.
캐시 계산 충돌 및 지침.

16) 콘텐츠 보안 및 보호

HTML을 위한 Sunbox (iframe, CSP, 'sandbox' 플래그).
드롭 제한: 화이트리스트 유형 (파일, 링크, JSON 사전 설정); 크기와 내용 확인.
사전 설정 권한 (RBAC/ABAC), 수출/수입 감사.

17) 위젯 API (계약)

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;
}

수명주기 이벤트는 '마운트', '크기 조정', '시각 변화' 입니다.
출판 전의 소품 검증.

18) 수입/수출 및 마이그레이션

수출: '그리드', '위젯', '테마', '메타'.
가져오기: 스키마 버전 확인, 자동 마이그레이션 (필드 맵/기본값), 보고.
무결성을 보장하기 위해 해시로 잠금 파일을 사전 설정합니다.

19) 핫키 (권장)

내비게이션: '증거가 없습니다' - 이동; '이동' + 화살표-빠른 단계.
수정: 'Alt' + 화살표.

작업: 'www/Cmd + D' - 중복; 'Śl/Cmd + G' - 그룹; 그룹화되지 않은 '차이점/Cmd + 시프트 + G' -

레벨: '['/']' -z 인덱스에서 뒤/앞으로.

실행 취소/다시 실행: '

사전 설정: 'www/Cmd + 1.. 9 '-저장된 것을 신속하게 적용하십시오.

20) UX 패턴

첫 번째 출시시 빠른 가이드 (3-5 단계의 마이크로 온 보드).
그리드 모드: 토글 "쇼/숨기기 그리드".
충돌에 대한 인라인 힌트 ("사용할 수 없음: 최소 위젯 폭 = 3").
레이아웃 기록: 이전 버전으로 돌아갑니다.

21) 테스트 계획

단위: 충돌 계산, 스냅, 제약 유효성 검사기.
통합: DnD 마우스/탭/키보드; 그룹; 컨테이너.
E2E: 대시 보드를 처음부터 조립하고 사전 설정을 적용하고 출판, 수출/수입합니다.
혼돈: 지연, 연결 상실 (실시간), 권리 상충.
A11y: 키보드 스크립트, SR 음성 연기, 대비.

22) 구현 점검표

  • 그리드/중단 점 및 스냅 설정
  • 수정/그룹/정렬 작업 및 테스트
  • 키보드 DnD 및 스크린 팁 활성화
  • , 실행 취소/재실행, 레이아웃 기록
  • 사전 설정: 버전, 권리, 수출/수입
  • 테마 및 디자인 토큰, 대조 모드
  • 실시간 협업 및 갈등 해결
  • 드롭 제한, 파일 검증, 샌드 박스 HTMLName
  • 측정: 채택, 첫 번째 배치 시간, 충돌 오류

23) 미니 -FAQ

왜 자유 좌표가 아닌 그리드 만 있습니까?
그리드는 정렬, 코로나 바이러스, 사전 설정된 이식성 및 성능을 단순화합니다.

중단 점에 대해 다른 레이아웃을 저장하는 방법은 무엇

각 위젯에는 중단 점 (데스크톱/태블릿/모바일) 에 자동 폴백이있는 'pos' 가 있습니다.

협업을 위해 무엇을 선택해야합니까-OT 또는 CRDT?
CRDT는 오프라인/충돌이 더 쉽습니다. OT-선형 텍스트 연산에 적합합니다. 레이아웃의 경우 CRDT가 더 자주 사용됩니다.

합계

좋은 드래그 및 드롭 위젯은 "드래그 앤 드롭" 이 아닙니다. "엄격한 그리드 및 스냅, 편리한 그룹 및 정렬, 키보드 접근성, 버전 및 수출을 통한 안정적인 사전 설정, 안전한 출판물 및 협업. 안정적인 데이터 모델, 잘 생각되는 UX 및 테스트 계획을 중심으로이를 구축하면 생성자는 컨텐츠 및 명령의 성장에 빠르고 이해하기 쉽고 저항 할 수 있습니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.