2.5d-ui
GitHub
Web Component · Edu

<iso-map>

바닥 평면 위에 위치와 크기가 제각각인 칸을 배치합니다. 교실 좌석표나 학교 평면도처럼 실제 공간의 물리적 배치 자체가 데이터의 핵심 의미를 가질 때 사용합니다.

가상 예시 데이터이며 외부로 전송되지 않습니다. 학생은 번호로만 표시됩니다.

예시: 교실 좌석표

교탁(구조물 fixture)과 좌석(값 칸)이 함께 놓이며, 결석(absent) 학생은 높이 0의 점선으로 구분됩니다.

불규칙 배치와 상태 구분

크기가 제각각인 칸들이 겹치지 않는 한, 위상 정렬(order.ts)을 통해 앞뒤 순서를 정확히 계산해 렌더링합니다.

속성

속성형식의미
dataJSON 객체바닥판(floor)과 항목 목록(items). 잘못된 형식이면 console.error 후 오류 문구를 표시합니다
max숫자축척 최댓값. 생략 시 항목들의 최댓값
unit숫자(px)기본 등각 단위(--iso-u). 기본 24
height-units숫자최댓값일 때의 블록 높이 단위. 기본 5
label문자열접근성 설명(aria-label 및 숨김 표 caption)
renderercss | svg | auto렌더링 방식. 기본 auto (블록 200개 초과 시 SVG 자동 전환)

data 객체

키형식의미
floor객체 · 선택바닥 평면 크기 { "w": 폭, "d": 깊이 }. 생략 시 항목 전체를 감싸는 사각형으로 자동 계산
items배열 · 필수배치할 칸들의 배열

items 항목

키형식의미
k문자열 | 숫자 · 필수칸 이름 또는 학생 번호
x, y숫자 · 필수바닥 좌표계에서의 시작 위치 (0 이상)
w, d양의 숫자 · 선택칸의 가로 폭과 세로 깊이. 기본 1
v0 이상 숫자 · 선택칸의 측정값. 생략되고 state도 없으면 고정 구조물(fixture)
cCSS 색 · 선택블록의 테마 색상
state"absent" | "empty" | "closed"특수 상태. 높이 0과 점선 테두리로 표시

이벤트

값이나 상태가 지정된 칸을 클릭하거나 키보드로 포커스 후 Enter 또는 Space를 누르면 iso-select 커스텀 이벤트가 버블링됩니다. 구조물은 포커스 및 이벤트가 발생하지 않습니다.

document.querySelector("iso-map").addEventListener("iso-select", (e) => {
  const { index, item } = e.detail;
  console.log(`선택된 칸: ${item.k}, 값: ${item.v ?? item.state}`);
});

빈 상태와 오류

칸들의 위치가 겹치거나(overlap) 바닥 밖으로 벗어난 경우 오류 상태가 되며 메시지가 표시됩니다.

접근성