Files
Aislo/A00_Common/spreadsheet/spreadsheet.css
T
eomsangdonandClaude Opus 5.5 7389335ca9 fix(spreadsheet): 16장 도구 막대 · 메뉴 · 대화 창 전수 점검 — 흠 스무 곳 고침
M02 면적산출 SA01010100 에서 도구 막대 · 데이터 메뉴 · 우클릭 · 셀 서식 여섯 탭 · 찾기 · 메모 ·
이름 관리 · 조건부 서식 · 유효성 · 이동 · 틀 고정 · 칸 넣기/지우기 · 데이터 도구 · 윤곽 ·
수식 분석 · 되돌리기/다시 · 저장 안 하고 떠나기 · 다시 열기를 빈 값 · 같은 이름 · 긴 이름 ·
취소 · Esc · Enter · 밝은/어두운 테마 예외까지 돌려 찾은 흠.
- 격자(C): 틀고정이 있으면 본문 판이 그릴 행열을 틀고정 폭만큼 덜 셈 — 아래 · 오른쪽 끝이
  빈 칸으로 남던 것(29 행 고정 때 1 행만 그림) · visibleRange 도 같음 · reveal 은 바로 그림
- 도구 막대: 세로 정렬 기본 표시 「위」 → 「아래」(칸 실제와 맞춤) · 크기 409 넘으면 409 ·
  테두리 · 단위 판이 단추 위로 떠 머리까지 덮던 것 → 단추 아래 · ✕ · 수식 안내 · 확대 글
  대비(흐림 투명도 없앰 · --color-text-secondary · 밝은 5.88 · 어두운 7.91)
- 병합(도구 막대 · 우클릭): 왼위 밖 값이 말없이 지워지던 것 → 엑셀처럼 먼저 물음(confirmMerge)
- 셀 서식 · 이동 · 칸 넣기/지우기 · 텍스트 나누기 · 중복 제거 · 연속 채우기 · 메모 창: 열 때
  초점이 창 밖(BODY)이라 Esc · Enter 가 안 먹던 것 → dialogKeys(창 안 초점 · Esc 닫기 ·
  Enter 실행) · 셀 서식 창 탭마다 높이가 널뛰던 것 → 본문 최소 높이
- 우클릭 메뉴(ui_template 공용): Esc 로 닫힘 · 화면 밖이면 안쪽으로 당김 · 데이터 ▾ 메뉴와 알약
  우클릭 메뉴가 화면 좌표를 부품 기준 자리로 써 오른쪽 아래로 떨어지던 것 고침 · 행 · 열 머리
  메뉴에 잘라내기 · 붙여넣기(안내) 더함
- 자동 필터 ▼ 가 칸 밑에 깔려 눌리지 않던 것(z-index) · 값 목록이 격자 아래 끝에서 잘리면
  위로 뒤집음
- Σ: 여러 칸을 고르면 첫 칸에 =SUM() 편집을 열어 Enter 로 값을 덮던 것 → 엑셀처럼 열마다
  바로 아래(또는 고름 끝 빈 칸)에 합계를 바로 넣음(autoSumCells)
- 조건부 서식: 빈 값이 「보다큼 0」 규칙이 되던 것 · #RRGGBB 아닌 색 · 색 없는 규칙 → 안내 후 막음
- 이름 관리: 255 자 넘는 이름 막음 · 긴 이름에 창이 화면 끝까지 늘던 것 · 시트 id(s1) 대신
  시트 이름 · 「이름 바꾸기」 가 브라우저 prompt(자동 취소됨)라 안 되던 것 → 줄 안에서 고침
- 표시 형식 「@」 를 수에 걸면 빈 칸이 되던 것 → 엑셀처럼 일반으로 보임
- 연속 데이터 채우기 · 텍스트 나누기가 칸 서식을 지우던 것 → 서식 유지
- 틀 고정 「지금 칸 기준」 을 먼 칸(Z1000)에서 하면 고정 판이 격자를 다 덮어 못 움직이던 것 →
  화면 안쪽 칸에서만(안내)

ORCA(IP http://100.72.32.27:5181 · 메인 폴더 탭 · 판정은 수치): 목록 80 항목 밝은 80/80 ·
어두운 80/80 · 사각형 겹침 · 잘림 · 화면 밖 · 대비 3 미만 0 건. 시험 — test_stage3_autosum
(여러 칸 넷 더함) · test_stage2_data_tools · test_stage2_format_code · spreadsheet_b_test_entry
197/197(@ 하나 더함) · test_spreadsheet_size(css gzip 3121 · 합 67403) 통과. 시험으로 바꾼 칸은
저장 안 하고 「다시 열기」 로 버림.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9YEkMnYQnNnRZRPXoxFsw
2026-09-28 22:57:48 +09:00

321 lines
6.0 KiB
CSS

/* spreadsheet.css (주인 D) — 부품 틀 · 주소 상자 · 수식 입력줄 · 칸 편집기 · 채우기 미리보기 · 알림 */
.ss {
position: relative;
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
font-size: 13px;
color: var(--color-text-body);
background: var(--color-surface-raised);
}
.ss-grid-host {
flex: 1 1 auto;
min-height: 0;
}
.ss-bar {
display: flex;
flex: none;
align-items: stretch;
height: 26px;
border-bottom: 1px solid var(--color-border);
}
.ss-addr {
width: 96px;
padding: 0 6px;
border: none;
border-right: 1px solid var(--color-border);
background: transparent;
color: inherit;
font: inherit;
outline: none;
}
.ss-addr:focus {
box-shadow: inset 0 0 0 2px var(--color-focus-ring);
}
.ss-fx {
align-self: center;
padding: 0 8px;
color: var(--color-text-muted);
font-style: italic;
user-select: none;
}
.ss-formula {
flex: 1;
padding: 4px 6px;
border: none;
border-left: 1px solid var(--color-border);
background: transparent;
color: inherit;
font: inherit;
line-height: 18px;
white-space: pre;
overflow: hidden;
resize: none;
outline: none;
}
.ss--readonly .ss-formula {
color: var(--color-text-secondary);
}
/* 칸 편집기 = 숨은 textarea — 쉴 때는 활성 칸 자리에 투명하게(한글 조합 창 자리) */
.ss-input {
position: absolute;
z-index: 5;
box-sizing: border-box;
margin: 0;
padding: 1px 3px;
border: 2px solid var(--color-focus-ring);
background: var(--color-surface-raised);
color: var(--color-text-body);
font: inherit;
line-height: 1.25;
white-space: pre;
overflow: hidden;
resize: none;
outline: none;
}
.ss-input--idle {
width: 1px;
height: 1px;
min-width: 0 !important;
min-height: 0 !important;
padding: 0;
border: 0;
opacity: 0;
pointer-events: none;
}
.ss-fill-preview {
position: absolute;
z-index: 4;
box-sizing: border-box;
border: 1px dashed var(--color-text-secondary);
pointer-events: none;
}
.ss-toast {
position: absolute;
right: 12px;
bottom: 40px;
z-index: 20;
padding: 6px 10px;
border-radius: 4px;
background: var(--color-primary);
color: var(--color-primary-text);
}
/* 2단계 잇기 — 서식 붓 · 찾기 패널 · 메모 · 골라 붙여넣기 */
.ss-brush {
flex: none;
padding: 0 8px;
border: none;
border-right: 1px solid var(--color-border);
background: none;
color: inherit;
font: inherit;
cursor: pointer;
}
.ss-brush.is-on {
background: color-mix(in srgb, var(--color-focus-ring) 20%, var(--color-surface-raised));
box-shadow: inset 0 0 0 2px var(--color-focus-ring);
}
.ss--painting .ss-grid-host {
cursor: copy;
}
.ss-find {
position: absolute;
top: 4px;
right: 16px;
z-index: 20;
display: flex;
flex-direction: column;
gap: 4px;
padding: 8px;
border: 1px solid var(--color-border);
border-radius: 6px;
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss-find[hidden],
.ss-find__row[hidden],
.ss-memo[hidden],
.ss-pick[hidden],
.spreadsheet-comment-balloon[hidden] {
display: none;
}
.ss-find__row {
display: flex;
align-items: center;
gap: 4px;
}
.ss-find__input {
width: 180px;
padding: 2px 6px;
border: 1px solid var(--color-border);
background: var(--color-surface-raised);
color: var(--color-text-body);
font: inherit;
}
.ss-find__btn {
padding: 2px 8px;
border: 1px solid var(--color-border);
border-radius: 4px;
background: var(--color-surface);
color: var(--color-text-body);
font: inherit;
cursor: pointer;
}
.ss-find__opt {
display: flex;
align-items: center;
gap: 2px;
font-size: 12px;
}
.ss-find__status {
font-size: 12px;
color: var(--color-text-secondary);
}
.ss-memo,
.spreadsheet-comment-balloon {
position: absolute;
z-index: 15;
min-width: 140px;
max-width: 260px;
padding: 4px 6px;
border: 1px solid var(--color-warning);
background: color-mix(in srgb, var(--color-warning) 15%, var(--color-surface-raised));
color: var(--color-text-body);
font: inherit;
white-space: pre-wrap;
box-shadow: var(--shadow-sm);
}
.ss-memo {
min-height: 60px;
resize: both;
outline: none;
}
.ss-pick {
position: absolute;
z-index: 20;
display: flex;
gap: 2px;
padding: 4px;
border: 1px solid var(--color-border);
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss-pick > button {
padding: 2px 8px;
border: 1px solid var(--color-border);
background: var(--color-surface);
color: var(--color-text-body);
font: inherit;
cursor: pointer;
}
/* 함수 자동 완성 · 인자 도움말 */
.ss-hint {
position: absolute;
z-index: 6;
min-width: 200px;
max-width: 360px;
border: 1px solid var(--color-border);
background: var(--color-surface-raised);
font-size: 12px;
box-shadow: var(--shadow-lg);
}
.ss-hint[hidden] {
display: none;
}
.ss-hint__item,
.ss-hint__help {
padding: 2px 6px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ss-hint__item {
cursor: pointer;
}
.ss-hint__item.is-on {
background: color-mix(in srgb, var(--color-accent) 18%, var(--color-surface-raised));
}
/* 데이터 메뉴 — 패널 창 · 유효성 목록 ▼ */
.ss-dialog {
position: absolute;
top: 4px;
right: 16px;
z-index: 21;
max-width: min(720px, calc(100% - 32px));
max-height: calc(100% - 8px);
overflow: auto;
border: 1px solid var(--color-border);
border-radius: 6px;
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss-dialog[hidden],
.ss-list-arrow[hidden] {
display: none;
}
.ss-dialog__head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
padding: 6px 8px;
border-bottom: 1px solid var(--color-border);
font-weight: bold;
}
.ss-dialog__body {
padding: 8px;
}
.ss-list-arrow {
position: absolute;
z-index: 8;
width: 16px;
padding: 0;
border: 1px solid var(--color-border);
background: var(--color-surface);
color: var(--color-text-body);
font-size: 9px;
cursor: pointer;
}
.ss-validation__dropdown {
position: absolute;
z-index: 20;
}