Groo Design

Resizable

화면 안의 크기를 손으로 바꾸는 손잡이 — HR 관리 화면의 목록 | 상세 나누기(목록 폭)와 HR 대시보드 편집 모드의 위젯 크기. 768 이상의 데스크톱에서만 쓴다. 폰은 나누지 않는다 — 목록 → 상세 · 탭이고, 옆 패널은 Side Panel(1280 미만은 Bottom Sheet)이다.

SEED 에는 Resizable 이 없다 — 모바일 앱 중심이라 끌어서 나누는 패널이 없다. 그래서 값은 모두 groo 가 정했다(2026-10-10 사용자 결정 12B · 13A) — 나누기는 남기고 고친다(보이는 선 1px + 가운데 손잡이 표시 · 누르는 폭 16 · 이름 "목록 너비" · ← → 5% · Home · End · 목록 20 ~ 40% · 화면마다 폭 기억 · 한 번 누르면 25 ↔ 40), 위젯 크기도 남기고 고친다(모서리 손잡이 대비 3 이상 · 토큰 색 자리표시 · ⋮ "크기"). 키보드는 WAI-ARIA APG Window Splitter 다. 옛 Resizable 스펙(가로 · 세로 · 손잡이 상자 12 × 16 · 누르는 폭 4 · hover 변화 없음)과 DESIGN.md v71 의 반대되던 글(손잡이 4 ~ 6px · hover 브랜드 색 · ±1% · "localStorage 권장")을 대신한다.

수치 원본은 resizable.yaml이다. 수치 표 자리([표: …])와 그림 자리([그림: …])는 사이트가 그 파일로 그린다 — GitHub 에서는 그 파일 · 그림 코드로 가는 링크로 보인다.

HR 관리 › 회사
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
내 휴가
남은 연차 11.5일 · 이번 달 사용 2일
팀 일정
10월 12일 (월) 클라우드 인프라 점검 외 3건
공지사항
10월 연말정산 서류 제출 안내
HR 관리 › 회사
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
내 휴가
남은 연차 11.5일 · 이번 달 사용 2일
팀 일정
10월 12일 (월) 클라우드 인프라 점검 외 3건
공지사항
10월 연말정산 서류 제출 안내
HR 관리 > 회사 1280 — 부서 나무 25% | 조직도, 손잡이에 초점 · 대시보드 편집 모드의 위젯 크기 — 라이트 · 다크

직접 골라 보기

손잡이를 끌거나, 한 번 눌러 25 ↔ 40 으로 바꾸거나, 초점을 두고 ← → · Home · End · Enter 를 눌러 보라 — 아래 글이 왼쪽 · 오른쪽 폭과 읽기를 따라간다. "화면 다시 열기" 는 기억한 폭으로 연다. 위젯은 모서리를 끌거나 ⋮ → 크기를 골라 보라.

부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
폭 왼쪽 248px(25%) · 오른쪽 728px — —읽기 목록 너비, 세로 분리자, 25기억 없음 — 다시 열면 기본
1280 화면의 본문 992 을 칸 폭에 맞춰 줄여 그렸다 — 768 미만 화면은 나누지 않는다(목록 → 상세 · 탭).대시보드 편집 모드 — 모서리를 끌거나 ⋮ → 크기. 지금: —
내 휴가
남은 연차 11.5일 · 이번 달 사용 2일
팀 일정
10월 12일 (월) 클라우드 인프라 점검 외 3건
공지사항
10월 연말정산 서류 제출 안내
모드
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable"

{/* 768 이상만 — 목록 20 ~ 40%(오른쪽은 60% 아래로 줄지 않는다), 화면마다 폭을 기억 */}
<ResizablePanelGroup storageKey="hr-admin-company">
  <ResizablePanel id="company-tree" defaultSize={25} minSize={20} maxSize={40}>
    {departmentTree}
  </ResizablePanel>
  <ResizableHandle label="목록 너비" toggleSize={40} />
  <ResizablePanel>{orgChart}</ResizablePanel>
</ResizablePanelGroup>
{/* 지금 목록 25% — — */}

Anatomy

내 휴가
남은 연차 11.5일
팀 일정
10월 12일 점검
크기
작게 — 4칸
보통 — 6칸지금 크기
넓게 — 8칸
가득 — 12칸
ⓐ Panel — 목록 25%(20 ~ 40%)ⓑ Line — 1px stroke-neutral-weak · 올리거나 초점 · 끄는 동안 stroke-neutral-solidⓒ Grip — 4 × 24 · 모서리 2ⓓ Handle — 누르는 폭 16(분홍) · 이름 "목록 너비"ⓔ Widget Handle — 누르는 24 × 24(분홍) · 표식 9 · 선 2 · 끝에서 6ⓕ Placeholder — 옅은 브랜드 바탕 + 1px dashed · 모서리 16ⓖ Size Menu — ⋮ → "크기" · 지금 크기 줄에 설명
나누기 — 목록 패널 · 선 1px · 가운데 손잡이 4 × 24 · 누르는 폭 16 / 위젯 — 모서리 손잡이 24 · 표식 9 · 끄는 동안 자리표시
부위설명
ⓐ Panel목록 패널 — 왼쪽, 폭이 바뀐다(20 ~ 40%). 상세 패널은 남는 폭이다.
ⓑ Line선 — 1px stroke-neutral-weak. 올리거나 초점 · 끄는 동안 짙어진다.
ⓒ Grip손잡이 표시 — 선 가운데 4 × 24 stroke-neutral-solid.
ⓓ Handle손잡이 — 선 가운데로 누르는 폭 16. 이름 "목록 너비".
ⓔ Widget Handle위젯 모서리 손잡이 — 오른쪽 아래 24 × 24, 표식 9 × 9.
ⓕ Placeholder끄는 동안 자리표시 — 위젯이 놓일 칸.
ⓖ Size Menu위젯 머리 ⋮ 와 그 "크기" 메뉴 — 끌지 않는 대안.

부위

부위설명
group나눈 자리 — split 은 목록 | 상세 두 패널, widget 은 대시보드 칸(격자)
panel목록 패널(왼쪽) — 폭이 바뀐다. 상세 패널은 남는 폭
handle손잡이 — 두 패널 사이. role="separator", 누르는 폭 16
line보이는 선 — 1px
grip가운데 손잡이 표시 — 4 × 24
widgetHandle위젯 모서리 손잡이 — 오른쪽 아래, 누르는 24 × 24
widgetMark모서리 표식 — 9 × 9 꺾쇠
placeholder끄는 동안 자리표시 — 위젯이 놓일 칸
ghost끄는 동안 포인터를 따라오는 위젯
moreButton위젯 머리 ⋮ — "크기" 메뉴를 연다(Button ghost · iconOnly · medium)
sizeMenu위젯 ⋮ 의 "크기" — 끌지 않는 대안(Menu)
focusRing키보드 포커스 링(웹) — 손잡이 둘레

Properties

패널 나누기(split)

HR 관리 > 역할 · 사용자 · 회사 · 부서 사용자는 목록 | 상세로 나뉘고, 그 사이 손잡이로 목록 폭을 바꾼다. 목록은 기본 25%(1280 에서 본문 992 의 248)이고 20 ~ 40% 사이에서만 바뀐다 — 오른쪽 상세는 60% 아래로 줄지 않는다. 지금 회사 · 부서 사용자는 오른쪽 최소가 없어 End 한 번에 조직도 · 사용자 칸이 0폭이 된다. 나누기를 걷고 25 / 75 로 고정하는 안(12A)은 고르지 않았다 — 긴 부서 이름 · 깊은 나무를 볼 때 목록을 넓힌다.

부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
기본 25%목록 248px · 1280 화면의 본문 992 기준
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
최소 20%목록 198px · 1280 화면의 본문 992 기준
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
최대 40% — 오른쪽 60%목록 397px · 1280 화면의 본문 992 기준
목록은 20 ~ 40% 사이에서만 바뀐다 — 오른쪽 상세가 60% 아래로 줄지 않아 조직도 · 사용자 칸이 0폭이 되지 않는다. 768 미만은 나누지 않는다(목록 → 상세 · 탭)
목록 25% 기본 · 20% 최소 · 40% 최대 — 오른쪽은 60% 아래로 줄지 않는다

나눈 자리 · 목록 패널

kindgroup 간격group 칸 수나누는 방향group 바뀌는 폭group 격자 한 줄panel 너비panel 최소 너비panel 최대 너비panel 누르면 넓게panel 폭 기억설명
split (기본)——가로 — 목록 | 상세 — 세로 나누기 · 셋 이상 나누기는 쓰는 곳이 없어 두지 않는다768px 이상 — 768 미만은 나누지 않는다 — 역할 · 사용자는 목록 → 상세, 회사는 탭(지금과 같다)—25% — 목록 패널의 기본 폭 — 1280 에서 본문 992 의 248(사이드바 240 · 여백 24 × 2)20% — 목록이 이보다 좁아지지 않는다40% — 오른쪽 상세가 60% 아래로 줄지 않는다 — 지금 회사 · 부서 사용자는 0폭까지 민다40% — 손잡이를 한 번 누르면(Enter) 기본 25 ↔ 넓게 40화면마다 기억 — 끌거나 누른 폭을 브라우저에 저장한다(localStorage — 키는 화면: 역할 · 사용자 · 회사 · 부서 사용자). 사이드바 접힘처럼 다시 열면 그 폭패널 나누기 — 목록 | 상세(기본)
widgetspacing-x4 16px — 칸 사이 16 — 지금 HR 값12 — 대시보드 격자 — 지금 HR 값(react-grid-layout). 크기 · 위치는 편집 모드에서만 바꾸고 저장 단추로 서버에 저장한다——72px — 격자 한 줄 — 지금 HR 값—————대시보드 위젯 크기 — 편집 모드에서만

손잡이

선은 1px stroke-neutral-weak(흰 면 위 1.23 · 다크 1.56)로 경계만 긋고, 가운데의 손잡이 표시 4 × 24 stroke-neutral-solid(4.18 · 다크 4.13 — WCAG 1.4.11 의 3 이상)가 끌 수 있는 자리를 알린다. 마우스를 올리거나 키보드 초점 · 끄는 동안에는 선 전체가 손잡이 표시와 같은 색으로 짙어진다. 누르는 폭은 선 가운데로 양쪽 8 — 16 이다. 768 이상 데스크톱의 마우스 경계라 44 가 아니다(사용자 결정 12B — 지금 5). 손잡이를 끌지 않고 한 번 눌렀다 떼면(3px 안) 기본 25 ↔ 넓게 40 으로 바뀐다 — 끌기를 못 하는 사람의 대안(WCAG 2.5.7)이다.

기본 — 선은 옅고 표시만
호버(웹) — 선이 짙어진다
포커스(키보드) — 링 2px
끄는 중 — 화면 전체 col-resize
라이트3배로 그렸다 — 선 1px · 표시 4 × 24 · 누르는 폭 16(분홍)
기본 — 선은 옅고 표시만
호버(웹) — 선이 짙어진다
포커스(키보드) — 링 2px
끄는 중 — 화면 전체 col-resize
다크3배로 그렸다 — 선 1px · 표시 4 × 24 · 누르는 폭 16(분홍)
선 stroke-neutral-weak 는 경계만 긋고, 가운데 표시 stroke-neutral-solid 가 끌 수 있는 자리를 알린다. 끌지 않고 한 번 눌렀다 떼면(3px 안) 기본 25 ↔ 넓게 40 — 768 이상 데스크톱의 마우스 경계라 누르는 폭이 16 이다
선 1px · 손잡이 표시 4 × 24 · 누르는 폭 16 — 기본 · 호버 · 포커스 · 끄는 중

손잡이

kindhandle 너비handle 커서handle 터치 영역handle 누름handle 키보드handle 이름handle 터치 동작handle 끌기 시작handle 한 번에설명
split (기본)16px — 누르는 폭 — 선 가운데로 양쪽 8. 768 이상 데스크톱의 마우스 경계라 44 가 아니다(사용자 결정 12B)col-resize16 × 패널 높이 — AA ⚠(폭 16) · AAA ✗ — 같은 일을 누르기(25 ↔ 40) · 키보드로도 한다누르면 25 ↔ 40 — 끌지 않고 한 번 눌렀다 떼면(3px 안) 기본 25 ↔ 넓게 40 — WCAG 2.5.7 Dragging Movements 의 대안← → 5% · Home 20% · End 40% · Enter 25 ↔ 40 — APG Window Splitter — Shift + 화살표는 두지 않는다목록 너비 — role=separator · aria-orientation=vertical · aria-valuenow(목록 %) · aria-valuemin 20 · aria-valuemax 40 · aria-controls(목록 패널)none — 끄는 동안 화면이 스크롤되지 않게3px — 누른 채 3px 넘게 움직이면 끌기 — 그 안에서 놓으면 누르기5% — ← → 한 번에 — 지금 HR 은 10%패널 나누기 — 목록 | 상세(기본)
widget—————————대시보드 위젯 크기 — 편집 모드에서만

선 · 손잡이 표시

kindline 너비line 배경line 전환 대상line 전환 시간line 전환 곡선grip 높이grip 너비grip 모서리grip 배경grip 자리설명
split (기본)1pxcolor-stroke-neutral-weak #E5E8EF · 다크 #404757 — 흰 면 위 1.23 · 다크 1.56 — 경계일 뿐이고 손잡이는 가운데 표시가 알린다background-colormotion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)24px4pxradius-r0_5 2pxcolor-stroke-neutral-solid #767C8B · 다크 #838997 — 흰 면 위 4.18 · 다크 4.13(WCAG 1.4.11 ≥ 3) — 지금 HR 은 선 · 손잡이가 모두 #EEEEEE 1.11선 가운데 — 패널 높이의 가운데패널 나누기 — 목록 | 상세(기본)
widget——————————대시보드 위젯 크기 — 편집 모드에서만

위젯 크기(widget)

HR 대시보드 편집 모드에서 위젯의 크기를 바꾼다 — 크기 · 위치는 편집 모드에서만 바꾸고 저장 단추로 서버에 저장한다(지금과 같다). 오른쪽 아래 모서리 손잡이는 누르는 자리 24 × 24 · 표식 9 × 9 꺾쇠 2px stroke-neutral-solid(카드 면 위 4.18 · 다크 4.13)다. 끄는 동안에는 놓일 칸에 자리표시(옅은 브랜드 바탕 + 1px 브랜드 점선 · 모서리 16)를 보이고, 위젯은 그림자 shadow-s3 로 포인터를 따라온다. 끌지 못하는 사람은 위젯 ⋮ 의 "크기" 에서 고른다(아래). 크기를 위젯마다 고정하는 안(13B)은 고르지 않았다.

내 휴가
크기
작게 — 4칸
보통 — 6칸지금 크기
넓게 — 8칸
가득 — 12칸
남은 연차 11.5일 · 이번 달 사용 2일
팀 일정
10월 12일 (월) 클라우드 인프라 점검 외 3건
공지사항
10월 연말정산 서류 제출 안내
라이트팀 일정을 4칸에서 끄는 중 — 놓일 6칸에 자리표시, 위젯은 그림자 shadow-s3 로 따라온다 · 내 휴가 ⋮ → 크기
내 휴가
크기
작게 — 4칸
보통 — 6칸지금 크기
넓게 — 8칸
가득 — 12칸
남은 연차 11.5일 · 이번 달 사용 2일
팀 일정
10월 12일 (월) 클라우드 인프라 점검 외 3건
공지사항
10월 연말정산 서류 제출 안내
다크팀 일정을 4칸에서 끄는 중 — 놓일 6칸에 자리표시, 위젯은 그림자 shadow-s3 로 따라온다 · 내 휴가 ⋮ → 크기
격자 12칸 · 한 줄 72 · 사이 16 — 크기 · 위치는 편집 모드에서만 바꾸고 저장 단추로 서버에 저장한다. 모서리 손잡이는 누르는 24 · 표식 9, 끌지 못하면 ⋮ 의 "크기"(작게 — 4칸 · 보통 — 6칸 · 넓게 — 8칸 · 가득 — 12칸)
대시보드 편집 — 모서리를 끄는 동안 자리표시 6칸 · ⋮ → 크기

위젯 격자

kindgroup 간격group 칸 수나누는 방향group 바뀌는 폭group 격자 한 줄설명
split (기본)——가로 — 목록 | 상세 — 세로 나누기 · 셋 이상 나누기는 쓰는 곳이 없어 두지 않는다768px 이상 — 768 미만은 나누지 않는다 — 역할 · 사용자는 목록 → 상세, 회사는 탭(지금과 같다)—패널 나누기 — 목록 | 상세(기본)
widgetspacing-x4 16px — 칸 사이 16 — 지금 HR 값12 — 대시보드 격자 — 지금 HR 값(react-grid-layout). 크기 · 위치는 편집 모드에서만 바꾸고 저장 단추로 서버에 저장한다——72px — 격자 한 줄 — 지금 HR 값대시보드 위젯 크기 — 편집 모드에서만

모서리 손잡이 · 표식

kindwidgetHandle 크기widgetHandle 커서widgetHandle 터치 영역widgetHandle 터치 동작widgetMark 크기widgetMark 테두리widgetMark 테두리 두께widgetMark 오른쪽 거리widgetMark 아래 거리설명
split (기본)—————————패널 나누기 — 목록 | 상세(기본)
widget24px — 누르는 자리 24 × 24 — 오른쪽 아래 모서리. 지금 20se-resize24 × 24 — AA ✓ · AAA ✗ — 끌지 않는 대안은 ⋮ 의 "크기"(moreButton)none9px — 오른쪽 · 아래 두 변만 그린 꺾쇠 — 지금 5color-stroke-neutral-solid #767C8B · 다크 #838997 — 카드 면 위 4.18 · 다크 4.13(≥ 3) — 지금 rgba(0,0,0,.4) 는 2.85 · 다크 1.142px6px — 위젯 오른쪽 끝에서6px — 위젯 아래 끝에서대시보드 위젯 크기 — 편집 모드에서만

자리표시 · 따라오는 위젯

kindplaceholder 모서리placeholder 배경placeholder 테두리placeholder 테두리 두께placeholder 테두리 모양placeholder 보이기ghost 모서리ghost 그림자ghost 보이기설명
split (기본)—————————패널 나누기 — 목록 | 상세(기본)
widgetradius-r4 16px — 위젯(Card 면)과 같은 16color-bg-brand-weak HR #E8F3EC · Desk #E8F1FE — 놓일 칸 — 브랜드 옅은 바탕. 지금은 라이브러리 기본 빨강 20%color-stroke-brand-solid HR #075B3C · Desk #0147AD — 바닥 위 HR 7.56 · 다크 6.88 · 옅은 바탕 위 7.18 · 5.47(≥ 3) — 자리표시의 경계1px — 비교 페이지 13A 그림은 1.5 였지만 크로미움은 1.5px 테두리를 1px 로 그린다(1 · 2배 화면 모두 — 레시피 하네스 실측) — 사용자가 본 모습 그대로 1dashed숨김 — 끄는 동안만 보인다radius-r4 16pxshadow-s3 — 떠 있는 동안만숨김 — 끄는 동안 포인터를 따라오는 위젯 — 위젯 모양 그대로대시보드 위젯 크기 — 편집 모드에서만

⋮ · 크기 메뉴

kindmoreButton 크기moreButton 아이콘 크기moreButton 터치 영역moreButton 이름sizeMenu 항목sizeMenu 글설명
split (기본)——————패널 나누기 — 목록 | 상세(기본)
widget40px — Button ghost · iconOnly · medium — 표 · 줄의 ⋮ 와 같다. 위젯 머리 오른쪽18px — lucide ellipsis-vertical44 × 44 — 보이는 40 바깥으로 2 씩 — 모서리 손잡이(24)의 끌지 않는 대안. AA ✓ · AAA ✓{위젯} 더보기 — 편집 모드에서만 — 위젯 제목을 붙인다작게 — 4칸 · 보통 — 6칸 · 넓게 — 8칸 · 가득 — 12칸 — 누르면 바로 그 폭 — 높이는 그대로. 메뉴는 실행만이라 체크 · 라디오가 없고, 지금 크기 줄에 설명 "지금 크기"(menu.md)크기 — 메뉴 묶음 이름(MenuGroupLabel) — 1280 미만은 Menu Sheet대시보드 위젯 크기 — 편집 모드에서만

State

상태모습
enabled선 stroke-neutral-weak + 손잡이 표시 stroke-neutral-solid
hovered웹 — 선 전체가 stroke-neutral-solid · 커서 col-resize
focused웹 — 누르는 폭 16 둘레에 링 2px(모서리 4) · 선이 짙어진다
pressed끄는 동안 — 선이 짙고, 화면 전체 커서 col-resize · 글을 고르지 않는다. 위젯은 자리표시 + 따라오는 위젯

상태 — 나누기

상태line 너비line 배경line 전환 대상line 전환 시간line 전환 곡선링 두께링 간격링 색focusRing 모서리
enabled 기본1pxcolor-stroke-neutral-weak #E5E8EF · 다크 #404757 — 흰 면 위 1.23 · 다크 1.56 — 경계일 뿐이고 손잡이는 가운데 표시가 알린다background-colormotion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)————
hovered 웹 — 손잡이에 마우스를 올림1pxcolor-stroke-neutral-solid #767C8B · 다크 #838997 — 선 전체가 손잡이 표시와 같은 색 — 끌 수 있는 자리가 보인다background-colormotion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)————
focused 웹 — 키보드 포커스1pxcolor-stroke-neutral-solid #767C8B · 다크 #838997background-colormotion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)2px0px — 누르는 폭 16 둘레 — 패널 높이 전체color-stroke-focus-ring #1A1F2E · 다크 #F5F6FAradius-r1 4px
pressed 끄는 동안(누르고 있는 동안)1pxcolor-stroke-neutral-solid #767C8B · 다크 #838997background-colormotion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)————

상태 — 위젯

kindhovered 웹 — 손잡이에 마우스를 올림focused 웹 — 키보드 포커스pressed 끄는 동안(누르고 있는 동안)
splitline 배경 color-stroke-neutral-solid #767C8B · 다크 #838997 — 선 전체가 손잡이 표시와 같은 색 — 끌 수 있는 자리가 보인다line 배경 color-stroke-neutral-solid #767C8B · 다크 #838997 · 링 두께 2px · 링 간격 0px — 누르는 폭 16 둘레 — 패널 높이 전체 · 링 색 color-stroke-focus-ring #1A1F2E · 다크 #F5F6FA · focusRing 모서리 radius-r1 4pxgroup 커서 col-resize — 끄는 동안 화면 전체 — 글을 고르지 않는다(user-select none) · line 배경 color-stroke-neutral-solid #767C8B · 다크 #838997
widget—링 두께 2px · 링 간격 2px · 링 색 color-stroke-focus-ring #1A1F2E · 다크 #F5F6FA — ⋮ 단추의 링(Button) — 모서리 손잡이는 키보드로 닿지 않는다(대안이 ⋮ "크기")placeholder 보이기 보임 — 손잡이를 끄는 동안 — 놓을 칸을 칸 단위로 · ghost 보이기 보임

모션

전환시간곡선대상비고
선 — 색motion-duration-color-transition 150msmotion-ease-easing cubic-bezier(0.35, 0, 0.35, 1)background-color올리거나 초점 · 끄는 동안 선이 짙어진다
목록 폭——width끄는 동안 포인터를 1:1 로 따라가고, 키보드 · 누르기는 바로 바뀐다 — 모션이 없다

Guidelines

데스크톱에서만

나누기는 768 이상에서만 쓴다 — 768 미만은 나누지 않고 역할 · 사용자는 목록 → 상세, 회사는 탭이다(지금과 같다). 손으로 끄는 패널을 폰에 두지 않는다 — 옆에 띄우는 작업은 Side Panel(1280 미만은 Bottom Sheet), 여러 줄 칸은 자동 높이다(Textarea — 끌어 늘이는 손잡이 없음).

끌지 않아도 된다

끌기는 지름길이다 — 손잡이를 한 번 누르면 25 ↔ 40, 키보드는 ← → 5% · Home 20% · End 40% · Enter 25 ↔ 40 이다. 위젯은 ⋮ → "크기" 에서 작게 — 4칸 · 보통 — 6칸 · 넓게 — 8칸 · 가득 — 12칸을 고른다(높이는 그대로). 메뉴는 실행만이라 체크 · 라디오를 두지 않고, 지금 크기 줄에는 설명 "지금 크기" 를 단다(Menu).

부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
↓ 한 번 누르기
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
이렇게 — 손잡이를 끌지 않고 한 번 누르면 기본 25 → 넓게 40(다시 누르면 25) · 키보드 ← → 5% · Home 20% · End 40% · Enter
크기
작게 — 4칸
보통 — 6칸지금 크기
넓게 — 8칸
가득 — 12칸
이렇게 — 위젯은 ⋮ → "크기" 에서 고른다 — 누르면 바로 그 폭, 높이는 그대로. 메뉴는 실행만이라 체크가 없고 지금 크기 줄에 설명을 단다
끌지 않는 길 — 손잡이 한 번 누르기 25 → 40 · 위젯 ⋮ → 크기 메뉴

화면마다 폭을 기억한다

끌거나 누른 목록 폭은 화면마다 브라우저에 기억한다(localStorage — 키는 화면 이름) — 다시 열면 그 폭이다. 사이드바의 손으로 접은 상태처럼 사용자의 기기에 남긴다. 위젯 크기는 지금처럼 저장 단추로 서버에 저장한다.

부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
↻ 다시 열기
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
이렇게 — 회사 화면을 35% 로 넓히고 나갔다가 다시 열면 그 폭 — 화면마다 브라우저에 기억한다(사이드바 접힘처럼)
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
↻ 다시 열기
부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
이렇게 하지 않는다 — 기억하지 않기 — 다시 열 때마다 25% 로 돌아가 긴 부서 이름을 볼 때마다 다시 넓힌다(지금 HR)
회사 화면을 35% 로 넓히고 다시 열기 — 기억한 35%

글

손잡이의 이름은 바뀌는 것을 말한다 — "목록 너비". 위젯 ⋮ 는 "{위젯} 더보기", 크기 줄은 "작게 — 4칸" 처럼 크기와 칸 수를 함께 쓴다.

코드

레시피 recipes/shadcn/components/ui/resizable.tsx 를 쓴다(react-resizable-panels 위에 짜도 된다 — 손잡이 모양 · 키보드 · 누르기 · 기억은 레시피가 맞춘다). 아래 미리보기는 스펙 값으로 그린 모습이다.

  • ResizablePanelGroup — 나눈 자리. storageKey(화면마다 폭을 기억할 이름 — 필수)를 받고 가로로만 나눈다. 768 미만에서는 쓰지 않는다(화면이 목록 → 상세 · 탭으로 바꾼다).
  • ResizablePanel — 목록 패널. defaultSize(기본 25) · minSize(20) · maxSize(40) · id. 오른쪽 상세 패널은 ResizablePanel 하나 더 — 크기를 적지 않는다(남는 폭).
  • ResizableHandle — 손잡이. label(이름 — 필수, "목록 너비") · toggleSize(누르기 · Enter 로 오가는 넓은 폭 — 기본 40). 선 · 손잡이 표시 · 누르는 폭 16 · role="separator"(aria-valuenow · aria-valuemin · aria-valuemax · aria-orientation · aria-controls) · ← → 5% · Home · End 를 손잡이가 맡는다.
  • WidgetResizeHandle — 위젯 모서리 손잡이(누르는 24 · 표식 9 꺾쇠). 대시보드 격자(react-grid-layout)의 resizeHandle 로 넘긴다 — 보조 기술에는 숨긴다. 끄는 동안 자리표시 · 따라오는 위젯의 모양은 레시피의 CSS 가 이 스펙 값으로 덮는다. ⋮ 의 "크기" 는 Menu 로 짠다.

HR 관리 — 부서 나무 | 조직도

부서
  • 가람누리 디지털혁신본부 클라우드 플랫폼 운영 그룹
    • 클라우드 인프라팀
      • 쿠버네티스 운영 파트
      • 네트워크 · 보안 파트(야간 당직 포함)
    • 데이터 플랫폼팀
      • 데이터 엔지니어링 파트
      • 분석 파트
    • 경영지원팀
    • 프로젝트 1팀
    • 프로젝트 2팀
    • 프로젝트 3팀
    • 프로젝트 4팀
    • 프로젝트 5팀
    • 프로젝트 6팀
    • 프로젝트 7팀
    • 프로젝트 8팀
    • 프로젝트 9팀
    • 프로젝트 10팀
    • 프로젝트 11팀
    • 프로젝트 12팀
경영지원팀 · 4명
김김민수팀장
이이서연인사 담당
박박지훈재무 담당
최최유진총무 담당
회사 1280 — 목록 25%(부서 나무) | 조직도, 손잡이 "목록 너비"
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable"

{/* 768 이상만 — 목록 20 ~ 40%(오른쪽은 60% 아래로 줄지 않는다), 화면마다 폭을 기억 */}
<ResizablePanelGroup storageKey="hr-admin-company">
  <ResizablePanel id="company-tree" defaultSize={25} minSize={20} maxSize={40}>
    {departmentTree}
  </ResizablePanel>
  <ResizableHandle label="목록 너비" toggleSize={40} />
  <ResizablePanel>{orgChart}</ResizablePanel>
</ResizablePanelGroup>

HR 대시보드 — 위젯 ⋮ 의 크기

내 휴가지금 6칸 · 높이는 그대로
내 휴가 위젯 ⋮ → 크기 — 작게 · 보통(지금 크기) · 넓게 · 가득
import { EllipsisVertical } from "lucide-react"
import { Button } from "@/components/ui/button"
import { Menu, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuTrigger } from "@/components/ui/menu"

<Menu>
  <MenuTrigger asChild>
    <Button variant="ghost" layout="iconOnly" aria-label={`${widget.title} 더보기`}>
      <EllipsisVertical />
    </Button>
  </MenuTrigger>
  <MenuContent>
    <MenuGroup>
      <MenuGroupLabel>크기</MenuGroupLabel>
      {/* 끌지 않는 대안 — 누르면 바로 그 폭, 높이는 그대로. 메뉴는 실행만이라 체크가 없다 */}
      {[
        { label: "작게 — 4칸", columns: 4 },
        { label: "보통 — 6칸", columns: 6 },
        { label: "넓게 — 8칸", columns: 8 },
        { label: "가득 — 12칸", columns: 12 },
      ].map((size) => (
        <MenuItem
          key={size.columns}
          label={size.label}
          description={widget.columns === size.columns ? "지금 크기" : undefined}
          onSelect={() => resizeWidget(widget.id, size.columns)}
        />
      ))}
    </MenuGroup>
  </MenuContent>
</Menu>

Behavior

인터랙션동작
손잡이 끌기목록 폭이 포인터를 따라 20 ~ 40% 사이에서 바뀐다 — 놓으면 그 폭을 기억한다
손잡이 한 번 누르기(3px 안) · Enter기본 25 ↔ 넓게 40
← · →5% 좁히기 · 넓히기 — 끝에서 멈춘다
Home · End20% · 40%
마우스 올리기 · 초점선이 짙어진다 · 커서 col-resize
다시 열기그 화면에 기억한 폭 — 없으면 25
위젯 모서리 끌기(편집 모드)놓일 칸에 자리표시 · 위젯이 따라온다 — 놓으면 그 칸. 저장 단추로 서버에
위젯 ⋮ → 크기고른 폭(4 · 6 · 8 · 12칸)으로 바로 — 높이는 그대로 · 초점은 ⋮ 로

Accessibility

기준검증
WCAG 1.4.11 Non-text contrast(≥ 3:1)손잡이 표시 · 위젯 표식 stroke-neutral-solid 흰 면 위 4.18 · 다크 4.13 ✓ · 자리표시 점선 stroke-brand-solid 바닥 위 HR 7.56 · 다크 6.88 ✓. 선 stroke-neutral-weak(1.23 · 1.56)는 경계일 뿐 — 손잡이는 표시가 알린다. 키보드 포커스 링 HR 8.17 · 6.07 ✓
WCAG 2.1.1 Keyboard손잡이 ← → Home End Enter ✓ · 위젯 크기는 ⋮ 메뉴 ✓
WCAG 2.5.7 Dragging Movements끌지 않고 손잡이를 한 번 눌러 25 ↔ 40 · 위젯은 ⋮ "크기" ✓
WCAG 2.4.7 Focus visible누르는 폭 16 둘레 링 2px ✓
WCAG 2.5.8 Target Size — Minimum(AA ≥ 24×24)손잡이 16 × 패널 높이 ⚠ — 데스크톱 마우스 경계(사용자 결정 12B), 같은 일을 키보드 · 누르기로 한다 · 위젯 모서리 24 × 24 ✓ · ⋮ 44 ✓
WCAG 2.5.5 Target Size — Enhanced(AAA ≥ 44×44)손잡이 16 ✗ · 위젯 모서리 24 ✗ — 대안 ⋮ "크기" 44 ✓
WCAG 4.1.2 Name, Role, Value손잡이 role="separator" · 이름 "목록 너비" · aria-orientation="vertical" · aria-valuenow(목록 %) · aria-valuemin 20 · aria-valuemax 40 · aria-controls(목록 패널) ✓. 위젯 모서리 손잡이는 마우스 · 터치용(보조 기술에 숨긴다) — 대안은 ⋮
Reduced motion폭이 바뀌는 모션이 없다(끄는 동안 1:1 · 키보드 · 누르기는 바로) — 그대로

Do / Don't

✅ Do

  • 768 이상 목록 | 상세에서 목록 폭만 — 20 ~ 40%, 오른쪽은 60% 아래로 줄지 않게.
  • 손잡이 표시를 3 이상의 대비로 보이고, 이름 "목록 너비" 를 단다.
  • 끌지 않는 길 — 한 번 누르기 25 ↔ 40 · 키보드 5% · 위젯 ⋮ "크기".
  • 화면마다 넓힌 폭을 기억한다.

❌ Don't

  • 폰에 끄는 패널 · 세로 나누기 · 셋 이상 나누기.
  • 손잡이를 배경과 같은 색(1.11)으로 · 누르는 폭 5 · 이름 없는 손잡이.
  • 오른쪽 패널을 0폭까지 밀기 · 키보드 한 번에 10%.
  • 브랜드 색 손잡이 · 빨간 자리표시 · 끌기로만 바뀌는 위젯 크기.

Specification

resizable.yaml 의 규칙을 하나도 빼지 않고 조건마다 그린다 — HR 웹이 나누기 · 위젯 크기를 만들 때 이 값을 그대로 쓴다. 조건이 없는 Base 가 모든 조합에 걸리고, 뒤의 규칙이 앞의 같은 값을 덮는다. 상태는 enabled 에서 바뀌는 값만 적었다.

kind=split

부위상태속성값
groupenabled나누는 방향direction가로목록 | 상세 — 세로 나누기 · 셋 이상 나누기는 쓰는 곳이 없어 두지 않는다
바뀌는 폭breakpoint768px 이상768 미만은 나누지 않는다 — 역할 · 사용자는 목록 → 상세, 회사는 탭(지금과 같다)
panelenabled너비width25%목록 패널의 기본 폭 — 1280 에서 본문 992 의 248(사이드바 240 · 여백 24 × 2)
최소 너비minWidth20%목록이 이보다 좁아지지 않는다
최대 너비maxWidth40%오른쪽 상세가 60% 아래로 줄지 않는다 — 지금 회사 · 부서 사용자는 0폭까지 민다
누르면 넓게toggleWidth40%손잡이를 한 번 누르면(Enter) 기본 25 ↔ 넓게 40
폭 기억persist화면마다 기억끌거나 누른 폭을 브라우저에 저장한다(localStorage — 키는 화면: 역할 · 사용자 · 회사 · 부서 사용자). 사이드바 접힘처럼 다시 열면 그 폭
handleenabled너비width16px누르는 폭 — 선 가운데로 양쪽 8. 768 이상 데스크톱의 마우스 경계라 44 가 아니다(사용자 결정 12B)
커서cursorcol-resize
터치 영역touchTarget16 × 패널 높이AA ⚠(폭 16) · AAA ✗ — 같은 일을 누르기(25 ↔ 40) · 키보드로도 한다
누름press누르면 25 ↔ 40끌지 않고 한 번 눌렀다 떼면(3px 안) 기본 25 ↔ 넓게 40 — WCAG 2.5.7 Dragging Movements 의 대안
키보드keyboard← → 5% · Home 20% · End 40% · Enter 25 ↔ 40APG Window Splitter — Shift + 화살표는 두지 않는다
이름name목록 너비role=separator · aria-orientation=vertical · aria-valuenow(목록 %) · aria-valuemin 20 · aria-valuemax 40 · aria-controls(목록 패널)
터치 동작touchActionnone끄는 동안 화면이 스크롤되지 않게
끌기 시작dragStart3px누른 채 3px 넘게 움직이면 끌기 — 그 안에서 놓으면 누르기
한 번에step5%← → 한 번에 — 지금 HR 은 10%
lineenabled너비width1px
배경backgroundstroke-neutral-weak#E5E8EF다크 #404757흰 면 위 1.23 · 다크 1.56 — 경계일 뿐이고 손잡이는 가운데 표시가 알린다
전환 대상transitionPropertybackground-color
전환 시간transitionDurationmotion-duration-color-transition150ms
전환 곡선transitionEasingmotion-ease-easingcubic-bezier(0.35, 0, 0.35, 1)
gripenabled높이height24px
너비width4px
모서리radiusradius-r0_52px
배경backgroundstroke-neutral-solid#767C8B다크 #838997흰 면 위 4.18 · 다크 4.13(WCAG 1.4.11 ≥ 3) — 지금 HR 은 선 · 손잡이가 모두 #EEEEEE 1.11
자리position선 가운데패널 높이의 가운데
linehovered배경backgroundstroke-neutral-solid#767C8B다크 #838997선 전체가 손잡이 표시와 같은 색 — 끌 수 있는 자리가 보인다
linefocused배경backgroundstroke-neutral-solid#767C8B다크 #838997
focusRingfocused링 두께width2px
모서리radiusradius-r14px
링 색colorstroke-focus-ringDesk#0147AD다크 #7AA9F6HR#075B3C다크 #2ABE84
링 간격offset0px누르는 폭 16 둘레 — 패널 높이 전체
grouppressed커서cursorcol-resize끄는 동안 화면 전체 — 글을 고르지 않는다(user-select none)
linepressed배경backgroundstroke-neutral-solid#767C8B다크 #838997

kind=widget

부위상태속성값
groupenabled간격gapspacing-x416px칸 사이 16 — 지금 HR 값
칸 수columns12대시보드 격자 — 지금 HR 값(react-grid-layout). 크기 · 위치는 편집 모드에서만 바꾸고 저장 단추로 서버에 저장한다
격자 한 줄rowHeight72px격자 한 줄 — 지금 HR 값
widgetHandleenabled크기size24px누르는 자리 24 × 24 — 오른쪽 아래 모서리. 지금 20
커서cursorse-resize
터치 영역touchTarget24 × 24AA ✓ · AAA ✗ — 끌지 않는 대안은 ⋮ 의 "크기"(moreButton)
터치 동작touchActionnone
widgetMarkenabled크기size9px오른쪽 · 아래 두 변만 그린 꺾쇠 — 지금 5
테두리borderColorstroke-neutral-solid#767C8B다크 #838997카드 면 위 4.18 · 다크 4.13(≥ 3) — 지금 rgba(0,0,0,.4) 는 2.85 · 다크 1.14
테두리 두께borderWidth2px
오른쪽 거리right6px위젯 오른쪽 끝에서
아래 거리bottom6px위젯 아래 끝에서
placeholderenabled모서리radiusradius-r416px위젯(Card 면)과 같은 16
배경backgroundbg-brand-weakDesk#E8F1FE다크 #20314EHR#E8F3EC다크 #21352B놓일 칸 — 브랜드 옅은 바탕. 지금은 라이브러리 기본 빨강 20%
테두리borderColorstroke-brand-solidDesk#0147AD다크 #7AA9F6HR#075B3C다크 #2ABE84바닥 위 HR 7.56 · 다크 6.88 · 옅은 바탕 위 7.18 · 5.47(≥ 3) — 자리표시의 경계
테두리 두께borderWidth1px비교 페이지 13A 그림은 1.5 였지만 크로미움은 1.5px 테두리를 1px 로 그린다(1 · 2배 화면 모두 — 레시피 하네스 실측) — 사용자가 본 모습 그대로 1
테두리 모양borderStyledashed
보이기display숨김끄는 동안만 보인다
ghostenabled모서리radiusradius-r416px
그림자shadowshadow-s30 8px 24px -4px rgba(15, 18, 28, 0.10), 0 2px 6px -2px rgba(15, 18, 28, 0.05) · 다크 0 8px 24px -4px rgba(0, 0, 0, 0.50), 0 2px 6px -2px rgba(0, 0, 0, 0.25), inset 0 1px 0 0 rgba(255, 255, 255, 0.08)떠 있는 동안만
보이기display숨김끄는 동안 포인터를 따라오는 위젯 — 위젯 모양 그대로
moreButtonenabled크기size40pxButton ghost · iconOnly · medium — 표 · 줄의 ⋮ 와 같다. 위젯 머리 오른쪽
아이콘 크기iconSize18pxlucide ellipsis-vertical
터치 영역touchTarget44 × 44보이는 40 바깥으로 2 씩 — 모서리 손잡이(24)의 끌지 않는 대안. AA ✓ · AAA ✓
이름name{위젯} 더보기편집 모드에서만 — 위젯 제목을 붙인다
sizeMenuenabled항목items작게 — 4칸 · 보통 — 6칸 · 넓게 — 8칸 · 가득 — 12칸누르면 바로 그 폭 — 높이는 그대로. 메뉴는 실행만이라 체크 · 라디오가 없고, 지금 크기 줄에 설명 "지금 크기"(menu.md)
글label크기메뉴 묶음 이름(MenuGroupLabel) — 1280 미만은 Menu Sheet
focusRingfocused링 두께width2px
링 색colorstroke-focus-ringDesk#0147AD다크 #7AA9F6HR#075B3C다크 #2ABE84⋮ 단추의 링(Button) — 모서리 손잡이는 키보드로 닿지 않는다(대안이 ⋮ "크기")
링 간격offset2px
placeholderpressed보이기display보임손잡이를 끄는 동안 — 놓을 칸을 칸 단위로
ghostpressed보이기display보임

SEED 와 다른 점

  • SEED 에는 Resizable 이 없다 — 모바일 앱 중심이라 끌어서 나누는 패널이 없다. 손잡이 · 범위 · 키보드 · 기억 · 위젯 크기는 모두 groo 가 정했다(키보드는 APG Window Splitter).

Migration notes

2026-10-10 — 남기고 고친다

사용자가 펼치고 접기 · 나누기 비교 페이지에서 정했다 — HR 관리 화면 나누기는 남기고 고친다(12B — 선 stroke-neutral-weak + 손잡이 표시 대비 3 이상 · 누르는 폭 16 · 이름 "목록 너비" · ← → 5% · Home / End · 목록 20 ~ 40% · 오른쪽 60% 아래로 안 줄임 · 화면마다 폭 기억 · 손잡이 누르기로 25 ↔ 40), 대시보드 위젯 크기도 남기고 고친다(13A — 손잡이 대비 3 이상 · 자리표시 토큰 색 · ⋮ "크기"). 나누기를 걷는 안(12A)과 크기 고정(13B)은 고르지 않았다. 비교 페이지 그림의 "크기" 메뉴는 라디오 체크로 그렸는데, Menu 는 실행만이라(2026-10-02 결정) 지금 크기 줄에 설명 "지금 크기" 를 단다. 위젯 ⋮ 는 표 · 줄의 ⋮ 와 같은 Button ghost · iconOnly · medium(40 · 44)이다(그림은 36). 위젯을 옮기는 일의 끌지 않는 대안은 이번 묶음 밖이다. 옛 스펙은 resizable.history/v-pre-seed-collapse.* 에 남겼다.

옛 Resizable새 Resizable
가로 · 세로 · 손잡이 상자(withHandle) 변형가로 나누기 하나(768 이상) + 위젯 크기
선 1px border-default · 손잡이 상자 12 × 16 surface-default선 1px stroke-neutral-weak · 손잡이 표시 4 × 24 stroke-neutral-solid(3 이상)
누르는 폭 4(::after)16
hover · 끌기 모양 변화 없음올리기 · 초점 · 끌기에 선이 짙어진다
키보드 라이브러리 기본(10%) · 링 1px← → 5% · Home · End · Enter 25 ↔ 40 · 링 2px
크기 제한은 사용처 · 저장 언급 없음목록 20 ~ 40% · 화면마다 기억
(DESIGN v71) 손잡이 4 ~ 6px · hover 브랜드 색 · ±1% · snap 25 / 50 / 75% · "localStorage 권장"이 스펙으로 바꿨다

제품은 앱 적용 단계에서 옮긴다(2026-10-09 조사 — HR 은 1280 × 800 렌더로 쟀다). Desk 웹 · 앱 · SSO 에는 나누기가 없다.

  • HR 손잡이(R1 ~ R4) — 선 · 손잡이 상자가 모두 bg-border #EEEEEE 라 패널 바탕 #FAFAFA 위 1.11(다크 1.34), 손잡이 상자 12 × 16 · 아이콘 10, 누르는 폭 5px, 이름 · aria-orientation 0, 키보드 한 번에 10%, hover · 끌기 모양 변화 0 이다(shared/ui/shadcn/resizable.tsx:42-49, D7). 회사 · 부서 사용자는 오른쪽 최소가 없어 End 한 번에 조직도 · 사용자 칸이 0폭이 된다(features/admin-company/ui/CompanyContent.tsx:116-140 · features/admin-users-department/ui/DepartmentContent.tsx:137-178, D7). 넓힌 폭은 저장하지 않는다(autoSaveId 0). 역할 · 사용자는 20 ~ 40% 가 맞다(features/admin-authority/ui/RoleManagementPanel.tsx:282-310 · UserManagementPanel.tsx:124-152).
  • HR 대시보드 위젯(R5) — 손잡이 20 × 20 · 표식 5 × 5 꺾쇠 2px rgba(0,0,0,.4) 가 흰 카드 위 2.85 · 다크 1.14, 끄는 동안 자리표시가 라이브러리 기본 빨강 20%, 키보드로는 바꿀 수 없다(features/dashboard/ui/DashboardContent.tsx:206-240, D17).
  • 곁가지 — HR package-lock.json 의 react-grid-layout 1.5.3 은 npm 이 내려 둔 판이다("ships stray files … an ip_fetcher binary"). 1.5.4 는 그 파일만 뺀 같은 코드라 올린다 — 이 결정과 상관없이.
  • 스펙 글 — DESIGN.md v71 Resizable 이 이 스펙과 반대였다(조사 S7) — "펼치고 접기 · 나누기" 절로 바꿨다.

이전 기록

  • 2026-05 — shadcn 그대로. bg-border-default 선 + surface-default 손잡이 상자로 토큰 이름만 맞췄다. 이번에 모두 바뀌었다.

이 페이지