2.5d-ui
GitHub
Web Component

<iso-ledger>

기록을 장부처럼 한 장씩 쌓습니다. 배열 순서가 시간 순서이고 마지막 항목(가장 최근)이 맨 위에 놓입니다. selected로 고른 장은 오른쪽으로 빠져나옵니다.

예시

릴리스 기록, 세 번째 장(v1.2) 선택 (예시 데이터). 장을 누르면 그 장이 선택되고, 선택된 장을 한 번 더 누르면 선택이 풀립니다.

속성

속성형식의미
dataJSON기록 배열(오래된 것부터). 잘못된 JSON이면 그리지 않고 console.error 후 오류 문구를 보인다
selected정수(인덱스)빼낼 장. 없으면 아무 장도 빼지 않는다. 엘리먼트가 클릭·Enter에 맞춰 스스로 바꾸며, 그 장 블록에 aria-pressed="true"를 단다
unit숫자(px)--iso-u 값. 기본 24
label문자열접근성 캡션(aria-label과 숨김 표 caption)
renderercss | svg | auto그리는 방식. 기본 auto(그 밖의 값도 같음): 블록 200개 이하면 CSS 면, 넘으면 SVG. css·svg는 블록 수와 무관하게 고정. 렌더링 방식

장 두께는 값이 아니라 고정이므로 max와 height-units는 장부 모양에 영향을 주지 않습니다.

data 항목

키형식의미
k문자열 · 필수장 이름(예: 버전)
note문자열 · 선택설명. 라벨에 "k · note"로 붙는다

이벤트

장을 누르거나 Enter·Space를 누르면 iso-select(detail: { index, item })가 버블링됩니다. 엘리먼트는 이 이벤트로 selected를 먼저 바꿔 두므로(같은 장이면 지움), 바깥에서는 selected 속성을 읽어 화면을 맞추면 됩니다.

const ledger = document.querySelector("iso-ledger");
ledger.addEventListener("iso-select", () => {
  const s = ledger.getAttribute("selected"); // null이면 선택 해제
  console.log(s == null ? "선택 없음" : "선택: " + s);
});

접근성