Graflume · Alpha
Timeline / Range · 극단 환경 적용
작업과 사건의 시작·종료 시점을 하나의 시간 축에서 비교합니다. 기기 이름을 추측하지 않고 컨테이너 크기, 입력 방식, 표시 능력과 사용자 선호를 조합합니다. 모바일·워치·전자종이·흑백·도트 화면과 표준 기반 극단 환경을 같은 차트에서 비교하세요.
차트 계열 · 기본 차트 계열
Timeline / Range
작업과 사건의 시작·종료 시점을 하나의 시간 축에서 비교합니다.
- Quick API
timeline()- 브라우저 스냅샷
graflume- mark
timeline- 프리셋
- 3
극단 환경
디바이스·입력·표시 능력에 맞춘 재구성
기기 이름을 추측하지 않고 컨테이너 크기, 입력 방식, 표시 능력과 사용자 선호를 조합합니다. 모바일·워치·전자종이·흑백·도트 화면과 표준 기반 극단 환경을 같은 차트에서 비교하세요.
반응형 화면
컨테이너 폭과 높이에 따라 축, 범례, 설명과 조작부를 자동 재배치합니다.
960×540 · adaptive.profiles=responsive-fluidzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
모바일
세로형 작은 화면에서 44px 터치 대상, 탭 도구 설명과 접힌 보조 정보를 우선합니다.
390×844 · adaptive.profiles=mobile-touchzoom-reflowcoarse-touchvirtual-keyboardshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
스마트 워치
원형 또는 매우 작은 화면에서는 핵심 표식과 값, 단계형 조작만 남기고 나머지는 아래 설명으로 재배치합니다.
184×224 · adaptive.profiles=smartwatchzoom-reflowreduced-effectscoarse-touchlow-resourcecutout-roundshape-rounddisplay-colorinput-coarsemotion-reducedrenderer-canvas-spatialviewport-tiny
e북·전자종이
낮은 갱신률과 잔상 가능성을 고려해 정적 상태, 높은 명암과 데이터 표를 우선합니다.
758×1024 · adaptive.profiles=ebook-paperprint-pagedreduced-effectslow-resourceshape-pageddisplay-e-inkinput-keyboardmotion-staticrenderer-canvas-spatial
흑백 화면
색만으로 계열을 구분하지 않고 선, 표식, 패턴, 라벨과 표를 함께 사용합니다.
640×400 · adaptive.profiles=monochromereduced-effectsshape-rectangledisplay-monochromeinput-finemotion-reducedrenderer-canvas-spatial
도트 화면
낮은 해상도에서는 표식 수와 장식을 줄이고 굵은 선, 정수 라벨과 단계형 확대를 사용합니다.
320×240 · adaptive.profiles=dot-matrixzoom-reflowreduced-effectskeyboard-switchlow-resourceshape-rectangledisplay-gridinput-keyboardmotion-staticrenderer-canvas-spatialviewport-tiny
400% 확대·리플로우
320 CSS px 등가 폭에서 본문은 한 축으로 재배치하고 차트만 자체 확대·이동을 허용합니다.
320×480 · adaptive.profiles=zoom-reflowzoom-reflowshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
폴더블·이중 화면
힌지와 화면 분할 영역을 가로지르지 않도록 차트와 설명을 독립 세그먼트로 재배치합니다.
720×640 · adaptive.profiles=foldable-dualfoldable-dualshape-dualdisplay-colorinput-finemotion-fullrenderer-canvas-spatial
TV·리모컨
호버가 없는 원거리 화면에서 큰 초점 표시와 방향키, Enter, Escape 조작을 제공합니다.
1920×1080 · adaptive.profiles=tv-remotetv-remoteshape-rectangledisplay-colorinput-remotemotion-fullrenderer-canvas-spatial
인쇄·페이지 매체
조작부 대신 정적 차트, 설명과 표를 함께 배치하고 페이지 중간 분할을 피합니다.
794×1123 · adaptive.profiles=print-pagedprint-pagedshape-pageddisplay-colorinput-finemotion-staticrenderer-canvas-spatial
강제 색상
시스템 색과 테두리를 존중하고 패턴, 표식과 텍스트를 중복 단서로 유지합니다.
640×400 · adaptive.profiles=forced-colorsforced-colorsshape-rectangledisplay-high-contrastinput-finemotion-fullrenderer-canvas-spatial
동작·효과 최소화
전환을 즉시 끝내고 불투명 배경과 지연 로드를 사용해 움직임과 투명도 부담을 줄입니다.
640×400 · adaptive.profiles=reduced-effectsreduced-effectsshape-rectangledisplay-colorinput-finemotion-reducedrenderer-canvas-spatial
거친 터치 입력
호버 없이 탭으로 값을 확인하고 실제 조작 대상은 44px 이상, 확대·축소는 명시 버튼으로 제공합니다.
390×844 · adaptive.profiles=coarse-touchcoarse-touchshape-rectangledisplay-colorinput-coarsemotion-fullrenderer-canvas-spatial
키보드·스위치 입력
드래그 전용 기능 없이 Tab, 방향키, Enter, Space, Escape로 모든 조작에 도달합니다.
640×400 · adaptive.profiles=keyboard-switchkeyboard-switchshape-rectangledisplay-colorinput-keyboardmotion-fullrenderer-canvas-spatial
저사양·느린 네트워크
적은 메모리와 느린 연결에서는 점진 렌더링, 샘플링, 취소 가능한 작업과 정적 대체를 우선합니다.
640×400 · adaptive.profiles=low-resourcelow-resourceshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
RTL 문서
본문과 탭은 RTL 논리 방향을 따르되 축, 코드와 데이터 식별자는 기술적 LTR 순서를 유지합니다.
640×400 · adaptive.profiles=rtlrtlshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
세로쓰기
세로쓰기 설명은 재배치하되 차트와 기술 표면은 독립적인 가로 패널로 유지합니다.
640×400 · adaptive.profiles=vertical-writingvertical-writingshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
초광폭·프로젝션
차트를 무한히 늘이지 않고 읽기 가능한 최대 폭, 패널 분할과 큰 라벨을 사용합니다.
1920×720 · adaptive.profiles=ultrawide-projectionultrawide-projectionshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
화면낭독기·점자 출력
짧고 긴 설명, 의미 있는 표와 상태를 제공해 Canvas나 색을 정보의 유일한 경로로 만들지 않습니다.
640×400 · adaptive.profiles=screenreader-braillescreenreader-brailleshape-nonvisualdisplay-colorinput-nonvisualmotion-fullrenderer-canvas-spatial
JavaScript 없음
스크립트가 꺼져도 검증된 정적 미리보기, 설명과 접힌 행 데이터 표가 핵심 정보를 보존합니다.
640×400 · adaptive.profiles=no-scriptno-scriptshape-nonvisualdisplay-colorinput-finemotion-staticrenderer-static-fallback
XR·투명 디스플레이
XR 전용 API가 없어도 일반 2D 또는 WebGL 패널로 안전하게 돌아가며 깊이 단서를 텍스트와 표로 중복합니다.
640×400 · adaptive.profiles=spatial-xrspatial-xrshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
노치·원형 화면
safe-area와 원형 경계를 피해 제목, 표식, 조작부가 잘리지 않게 안쪽으로 재배치합니다.
184×224 · adaptive.profiles=cutout-roundcutout-roundshape-rounddisplay-colorinput-finemotion-fullrenderer-canvas-spatialviewport-tiny
가상 키보드·축소 뷰포트
가상 키보드가 화면을 줄여도 초점 조작, 차트와 현재 설명이 가려지지 않게 다시 배치합니다.
390×560 · adaptive.profiles=virtual-keyboardvirtual-keyboardshape-rectangledisplay-colorinput-finemotion-fullrenderer-canvas-spatial
극단 환경 미리보기
위 프로필 탭을 선택하면 같은 데이터와 ChartSpec을 유지한 채 화면 크기, 입력 방식, 표시 능력과 사용자 선호에 맞춰 차트를 다시 구성합니다.
상태불러오는 중
adaptivecapability-drivenno-user-agent-branching
- 범례:
legend · layers · one series - 포인트·범위 하이라이트:
highlights[] · datum · category - 설명 말풍선:
annotations[] · datum · category · callout · placement:auto - 대화형 선택:
selection · multiple · toggle
불러오는 중
극단 환경 미리보기 · 행 데이터
행 데이터와 zero-copy TypedArray 열은 하나의 데이터 계약을 공유합니다.
starttemporal | categoryordinal | endtemporal |
|---|---|---|
| 2026-01-01 | Research | 2026-01-09 |
| 2026-01-05 | Data design | 2026-01-16 |
| 2026-01-12 | Prototype | 2026-01-25 |
| 2026-01-19 | Accessibility | 2026-02-02 |
| 2026-01-27 | Validation | 2026-02-10 |
| 2026-02-09 | Release | 2026-02-14 |
브라우저 API · 이식 가능한 스키마
브라우저 API
Graflume.timeline()
const data = [
{
"category": "Research",
"end": "2026-01-09",
"start": "2026-01-01"
},
{
"category": "Data design",
"end": "2026-01-16",
"start": "2026-01-05"
},
{
"category": "Prototype",
"end": "2026-01-25",
"start": "2026-01-12"
},
{
"category": "Accessibility",
"end": "2026-02-02",
"start": "2026-01-19"
},
{
"category": "Validation",
"end": "2026-02-10",
"start": "2026-01-27"
},
{
"category": "Release",
"end": "2026-02-14",
"start": "2026-02-09"
}
];
const options = {
"accessibility": {
"description": "A release plan with overlapping work, progress, and a clear finish. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Timeline: A release plan with overlapping work, progress, and a clear finish"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Accessibility"
},
"text": "포인트·범위 하이라이트 · 2026-01-19"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "medium",
"timeZone": "UTC",
"type": "date"
},
"ticks": {
"count": 5,
"spacing": 10
}
},
"y": {
"labels": {
"maxLength": 22,
"orientation": "horizontal",
"padding": 12
},
"title": {
"padding": 86,
"text": "Workstream"
}
}
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Accessibility"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"axis": "y",
"fields": [
{
"dateStyle": "long",
"field": "start",
"format": "date",
"label": "시작",
"timeZone": "UTC"
},
{
"field": "category",
"format": "auto",
"label": "범주"
},
{
"dateStyle": "long",
"field": "end",
"format": "date",
"label": "종료",
"timeZone": "UTC"
}
],
"title": "Timeline / Range",
"trigger": "axis"
}
},
"legend": {
"interactive": true,
"items": [
{
"id": "series",
"label": "Timeline / Range",
"layerId": "layer-0"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Timeline / Range",
"visible": true
},
"locale": "ko",
"mark": {
"fields": {
"end": "end"
}
},
"padding": {
"bottom": 64,
"left": 132,
"right": 30,
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A release plan with overlapping work, progress, and a clear finish",
"text": "Timeline"
},
"width": "container",
"x": {
"field": "start",
"title": "Schedule",
"type": "temporal"
},
"y": {
"field": "category",
"title": "Workstream",
"type": "ordinal"
}
};
Graflume.timeline('#chart', data, options);이식 가능한 스키마
ChartSpec 0.1 · options
{
"accessibility": {
"description": "A release plan with overlapping work, progress, and a clear finish. The example uses curated, deterministic data and exposes its exact values in a semantic table.",
"label": "Timeline: A release plan with overlapping work, progress, and a clear finish"
},
"annotations": [
{
"connector": {
"visible": true
},
"detail": "데이터, 축 범위 또는 화면 위치에 사용자가 작성한 안전한 텍스트 설명을 연결합니다.",
"id": "manual-callout",
"placement": "auto",
"style": {
"maxWidth": 220,
"padding": 8
},
"target": {
"field": "category",
"type": "datum",
"value": "Accessibility"
},
"text": "포인트·범위 하이라이트 · 2026-01-19"
}
],
"axes": {
"x": {
"format": {
"dateStyle": "medium",
"timeZone": "UTC",
"type": "date"
},
"ticks": {
"count": 5,
"spacing": 10
}
},
"y": {
"labels": {
"maxLength": 22,
"orientation": "horizontal",
"padding": 12
},
"title": {
"padding": 86,
"text": "Workstream"
}
}
},
"create": {
"adaptive": {
"profiles": "auto"
}
},
"height": 620,
"highlights": [
{
"id": "manual-focus",
"padding": 7,
"target": {
"field": "category",
"type": "datum",
"value": "Accessibility"
}
}
],
"interaction": {
"controls": {
"annotations": true,
"export": true,
"fullscreen": true,
"labels": {
"controls": "차트 조작",
"enterFullscreen": "전체 화면 열기",
"exitFullscreen": "전체 화면 닫기",
"exportPng": "PNG 다운로드",
"hideAnnotations": "설명 말풍선 숨기기",
"loop": "반복 재생",
"nextFrame": "다음 프레임",
"pause": "일시 정지",
"play": "재생",
"previousFrame": "이전 프레임",
"reset": "보기 초기화",
"seek": "재생 위치",
"showAnnotations": "설명 말풍선 표시",
"speed": "재생 속도",
"zoomIn": "확대",
"zoomOut": "축소"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"selection": {
"ariaLabel": "대화형 선택",
"clearOnBackground": true,
"clearOnEscape": true,
"highlight": {
"padding": 5
},
"key": "category",
"mode": "multiple",
"toggle": true
},
"tooltip": {
"axis": "y",
"fields": [
{
"dateStyle": "long",
"field": "start",
"format": "date",
"label": "시작",
"timeZone": "UTC"
},
{
"field": "category",
"format": "auto",
"label": "범주"
},
{
"dateStyle": "long",
"field": "end",
"format": "date",
"label": "종료",
"timeZone": "UTC"
}
],
"title": "Timeline / Range",
"trigger": "axis"
}
},
"legend": {
"interactive": true,
"items": [
{
"id": "series",
"label": "Timeline / Range",
"layerId": "layer-0"
}
],
"labels": {
"hide": "숨기기",
"show": "표시"
},
"maxItems": 8,
"mode": "layers",
"orientation": "horizontal",
"position": "bottom",
"title": "Timeline / Range",
"visible": true
},
"locale": "ko",
"mark": {
"fields": {
"end": "end"
}
},
"padding": {
"bottom": 64,
"left": 132,
"right": 30,
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "A release plan with overlapping work, progress, and a clear finish",
"text": "Timeline"
},
"width": "container",
"x": {
"field": "start",
"title": "Schedule",
"type": "temporal"
},
"y": {
"field": "category",
"title": "Workstream",
"type": "ordinal"
}
}