refactor(cad): CAD 앱 겉 자체 변종을 부품 상자 부품으로 — 상태막대 켜기 칩 · 패널 탭 · 떠 있는 판 · 메뉴 · 아이콘 단추 · 확인창 (PLAN 553-6)

- 부품 상자 CSS · 단추 기본 꼴을 CAD iframe 에 실음(integration/ui-kit.ts) · 자리 · 폭은 cad-* 그대로
- 상태막대 = ui-toggle--chip 22 · 특성/레이어 = ui-tabs 36 · ↶↷ · 리본 접기 · 탐색 막대 = ui-icon-btn 20 · 32
- 빠른 특성 · 블록 라이브러리 · 자리표 = ui-float-panel · 리본 넘침 · 스냅 · 명령 자동완성 = ui-ctx-menu
- window.confirm · window.prompt → askConfirm · askText · 빈 안내 = ui-empty 작은 꼴
- 높이 단: 리본 칸 19→18 · 명령 칸 26→28 · 레이어 줄 40→42 · 문서 탭 25→24 · 도각 편집 단추 24
- 마우스 바탕 = --color-hover · 켜짐 = --color-accent-soft · 도면 그림 색(--draw-*) 안 건드림
- 안 쓰는 DropdownButton 지움(쓰는 곳 0 · grep)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 22:35:43 +09:00
co-authored by Claude Opus 5.5
parent dbff07a4f8
commit de250ab759
24 changed files with 364 additions and 496 deletions
+33 -182
View File
@@ -14,22 +14,22 @@
padding-right: 2px;
min-width: 0;
}
/* 도면층 버튼 — 색은 토큰으로만, 상태는 Button이 붙이는 data-* 속성으로 가른다. */
/* 도면층 버튼 — 목록 줄 부품(`ui-sidebar-row`) 꼴 · 상태는 Button이 붙이는 data-* 속성으로 가른다. */
.cad-layer-manager button[data-type="regular"] {
background: var(--cad-chrome-sunken);
color: var(--cad-accent);
background: transparent;
color: var(--color-text-body);
}
.cad-layer-manager button[data-type="transparent"] {
background: transparent;
color: var(--cad-accent);
color: var(--color-text-secondary);
}
.cad-layer-manager button:hover {
background: var(--cad-hover);
background: var(--color-hover);
color: var(--color-text);
}
.cad-layer-manager button[data-active="true"] {
background: var(--color-primary);
color: var(--color-primary-text);
background: var(--color-accent-soft);
color: var(--color-accent);
}
.cad-view-controls {
@@ -41,7 +41,7 @@
align-items: center;
overflow: hidden;
border: 1px solid var(--cad-line);
border-radius: 4px;
border-radius: var(--radius-buttons);
background: var(--cad-chrome-raised);
box-shadow: var(--shadow-lg);
}
@@ -87,21 +87,7 @@ body.cad-file-dragging::after {
pointer-events: none;
}
.cad-view-controls button {
width: 34px;
height: 32px;
border: 0;
border-right: 1px solid var(--cad-line);
background: transparent;
font-size: 17px;
}
.cad-view-controls button:hover {
background: var(--cad-hover);
}
.cad-view-controls__fit {
color: var(--cad-accent);
font-size: 15px;
}
/* 단추 = 아이콘 단추 부품(단 32) · 여기는 배율 글만 */
.cad-view-controls span {
min-width: 48px;
color: var(--cad-text-dim);
@@ -133,30 +119,16 @@ body.cad-file-dragging::after {
color: var(--cad-text-muted);
font: 11px Consolas, monospace;
}
/* 꼴 = 메뉴 부품(`ui-ctx-menu`) · 여기는 자리와 명령 글꼴만 */
.cad-command-suggestions {
position: absolute;
z-index: 6;
bottom: 100%;
left: 10px;
display: flex;
flex-direction: column;
min-width: 220px;
padding: 4px;
background: var(--cad-chrome-raised);
border: 1px solid var(--cad-line);
border-radius: 4px;
box-shadow: var(--shadow-lg);
}
.cad-command-suggestions button {
padding: 4px 8px;
border: 0;
border-radius: 3px;
background: transparent;
font: 11px Consolas, monospace;
text-align: left;
}
.cad-command-suggestions button:hover {
background: var(--cad-hover);
.cad-command-suggestions > .ui-ctx-menu__item {
font: 12px Consolas, monospace;
}
.cad-prop--wide select {
min-width: 132px;
@@ -180,12 +152,13 @@ body.cad-file-dragging::after {
font-size: 11px;
font-weight: 600;
}
/* 명령 칸 = CAD 고유 꼴(토큰만) · 높이 = 크기 단 28 */
.cad-command-area input {
flex: 1;
height: 26px;
height: 28px;
padding: 0 8px;
border: 1px solid var(--cad-line);
border-radius: 2px;
border-radius: var(--radius-buttons);
outline: none;
background: var(--cad-chrome-sunken);
color: var(--cad-text);
@@ -210,23 +183,7 @@ body.cad-file-dragging::after {
background: var(--cad-chrome);
border-top: 1px solid var(--cad-line);
}
.cad-statusbar button {
height: 21px;
padding: 0 8px;
border: 1px solid transparent;
border-radius: 2px;
background: transparent;
color: var(--cad-text-dim);
font-size: 10px;
}
.cad-statusbar button:hover {
background: var(--cad-hover);
}
.cad-statusbar button[data-active="true"] {
border-color: var(--cad-accent);
background: var(--color-primary);
color: var(--color-primary-text);
}
/* 켜기 = 켜기 칩 부품(`ui-toggle--chip` · 단 22) */
.cad-statusbar__hint {
margin-left: auto;
color: var(--cad-text-muted);
@@ -261,13 +218,14 @@ body.cad-file-dragging::after {
font-size: 11px;
color: var(--cad-text-dim);
}
/* 칸 = 크기 단 24(둥글기 6) · 토큰만 */
.cad-properties-editor select,
.cad-properties-editor input {
height: 24px;
min-width: 0;
padding: 0 4px;
border: 1px solid var(--cad-line);
border-radius: 3px;
border-radius: 6px;
background: var(--cad-chrome-sunken);
color: var(--cad-text);
font-size: 11px;
@@ -292,59 +250,19 @@ body.cad-file-dragging::after {
color: var(--cad-text);
text-overflow: ellipsis;
}
.cad-properties__empty {
margin: 0;
color: var(--cad-text-muted);
font-size: 11px;
}
/* 빠른 특성 — 화면 위에 뜨는 작은 상자 */
.cad-quick-properties {
position: fixed;
z-index: 5;
top: calc(var(--cad-title-height) + var(--cad-ribbon-height) + 12px);
right: 14px;
width: 240px;
padding: 8px 10px 10px;
background: var(--cad-chrome-raised);
border: 1px solid var(--cad-line);
border-radius: 5px;
box-shadow: var(--shadow-lg);
}
.cad-quick-properties__header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 6px;
color: var(--cad-text-dim);
font-size: 11px;
}
.cad-quick-properties__header button {
border: 0;
background: transparent;
color: var(--cad-text-muted);
font-size: 12px;
}
/* 블록 라이브러리 팔레트 (INSERT/BLOCK) */
/* 빠른 특성 · 블록 라이브러리 — 꼴 = 떠 있는 판 부품(`ui-float-panel`) · 여기는 자리 · 폭만 */
.cad-quick-properties,
.cad-block-library {
position: fixed;
z-index: 5;
top: calc(var(--cad-title-height) + var(--cad-ribbon-height) + 12px);
right: 14px;
width: 240px;
padding: 8px 10px 10px;
background: var(--cad-chrome-raised);
border: 1px solid var(--cad-line);
border-radius: 5px;
box-shadow: var(--shadow-lg);
}
.cad-block-library__empty {
margin: 0;
color: var(--cad-text-muted);
font-size: 11px;
line-height: 1.5;
}
/* 블록 라이브러리 팔레트 (INSERT/BLOCK) */
.cad-block-library__list {
max-height: 220px;
margin: 0;
@@ -357,40 +275,26 @@ body.cad-file-dragging::after {
align-items: center;
gap: 4px;
}
.cad-block-library__list li button {
border: 0;
background: transparent;
color: var(--cad-text);
font-size: 12px;
}
/* 블록 줄 = 목록 줄 부품(`ui-sidebar-row`) · 지우기 = 아이콘 단추 부품(단 20) · 여기는 줄 폭만 */
.cad-block-library__name {
flex: 1;
min-width: 0;
overflow: hidden;
padding: 3px 4px;
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
}
.cad-block-library__name:hover {
background: var(--cad-chrome-sunken);
}
/* 단추 = 단추 부품(보조 · 단 24) · 여기는 둘이 폭을 나눔만 */
.cad-block-library__actions {
display: flex;
gap: 6px;
margin-top: 8px;
}
.cad-block-library__actions button {
.cad-block-library__actions > .ui-btn {
flex: 1;
padding: 4px 0;
border: 1px solid var(--cad-line);
border-radius: 3px;
background: transparent;
color: var(--cad-text-dim);
font-size: 11px;
}
/* 도각 자리표 패널 — 도각 편집으로 도면을 실었을 때만 뜬다 (2026-09-06 사용자 지시로
부모 사이드바에서 캐드 안으로 옮김). 도면 오른쪽 위, 리본 아래에 붙는다. */
부모 사이드바에서 캐드 안으로 옮김). 꼴 = 떠 있는 판 부품(`ui-float-panel`) · 여기는 자리 · 폭 · 줄 배치만. */
.cad-frame-tokens {
position: fixed;
/* 오른쪽 위는 진행단계 패널이 쓴다 — 아래쪽(상태막대·명령행 위)에 붙인다. */
@@ -398,36 +302,13 @@ body.cad-file-dragging::after {
bottom: calc(var(--cad-status-height) + var(--cad-command-height) + 8px);
z-index: 3;
max-height: 46vh;
overflow-y: auto;
width: 236px;
}
.cad-frame-tokens__body {
display: flex;
flex-direction: column;
gap: 6px;
width: 236px;
padding: 8px;
border: 1px solid var(--cad-line);
border-radius: 6px;
background: var(--cad-chrome-raised);
box-shadow: var(--shadow-lg);
color: var(--cad-text);
}
.cad-frame-tokens__header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 6px;
color: var(--cad-text-dim);
font-size: 11px;
line-height: 1.4;
}
.cad-frame-tokens__fold {
flex: none;
border: 1px solid var(--cad-line);
border-radius: 4px;
background: transparent;
color: var(--cad-text);
cursor: pointer;
}
.cad-frame-tokens__group {
@@ -439,39 +320,9 @@ body.cad-file-dragging::after {
.cad-frame-tokens__title {
width: 100%;
color: var(--cad-text-dim);
font-size: 11px;
}
.cad-frame-tokens__button {
padding: 3px 7px;
border: 1px solid var(--cad-line);
border-radius: 4px;
background: var(--cad-chrome);
color: var(--cad-text);
font-size: 11px;
cursor: pointer;
}
.cad-frame-tokens__button:hover {
background: var(--cad-accent-soft, var(--cad-chrome-raised));
}
/* 자리표 칸 크기 입력 (2026-09-06) */
.cad-frame-tokens__size {
display: flex;
align-items: center;
gap: 4px;
color: var(--cad-text-dim);
font-size: 11px;
}
.cad-frame-tokens__size input {
/* 자리표 칸 크기 입력 (2026-09-06) — 칸 = 입력 부품(단 24) */
.cad-frame-tokens__size > .ui-input {
width: 64px;
padding: 2px 4px;
border: 1px solid var(--cad-line);
border-radius: 4px;
background: var(--cad-chrome);
color: var(--cad-text);
font-size: 11px;
}