Files
Aislo/A00_Common/spreadsheet/spreadsheet_analysis.css
eomsangdonandClaude Opus 5.5 6acc8d0c52 feat(spreadsheet): 수식 분석 — 선행 · 종속 추적 화살표 · 수식 계산 단계 보기 · 오류 검사 ⚠ 풍선
- 추적 화살표(spreadsheet_trace.ts): 누를 때마다 한 단계 · 범위는 상자 · 오류 칸 화살 빨강 · 다른 시트 점선 · 지우기
- 수식 계산 창(spreadsheet_eval_steps.ts): 왼쪽부터 한 마디씩 값으로 · 밑줄 · IF 류 첫 인자만 먼저 · 값은 엔진 풀이
- 오류 검사(spreadsheet_errcheck.ts): 순환 · 식 오류 · 숫자처럼 보이는 글 까닭 · ⚠ 메뉴(숫자로 변환 · 계산 단계 · 선행 추적 · 오류 무시)
- 격자 초록 세모는 C(sub6) · 잇기는 sub7 — 머리 주석에 잇는 법
- 엔진: evalSafe 내보냄 · formulaToText 에 갈음 · 밑줄 자리 · 계약 파일 목록 줄만 더함
- 시험: test_spreadsheet_analysis.py(3 묶음) · harness_analysis(ORCA) · 시험 틀은 inspect 로 문맥 꺼냄

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
2026-09-27 21:14:40 +09:00

188 lines
3.6 KiB
CSS

/* spreadsheet_analysis.css (주인 A) — 추적 화살표 겹판 · 수식 계산 창 · 오류 ⚠ 단추 */
/* 추적 화살표 — 크기 0 겹판(격자 조작을 막지 않음) */
.ss-trace {
position: absolute;
left: 0;
top: 0;
width: 1px;
height: 1px;
overflow: visible;
pointer-events: none;
}
.ss-trace__line {
stroke-width: 1.5;
}
.ss-trace__line.is-plain,
.ss-trace__dot.is-plain,
.ss-trace__head.is-plain {
stroke: var(--color-info);
fill: var(--color-info);
}
.ss-trace__line.is-error,
.ss-trace__dot.is-error,
.ss-trace__head.is-error {
stroke: var(--color-danger);
fill: var(--color-danger);
}
.ss-trace__line.is-sheet,
.ss-trace__dot.is-sheet,
.ss-trace__head.is-sheet {
stroke: var(--color-text-body);
fill: var(--color-text-body);
}
.ss-trace__line.is-sheet {
stroke-dasharray: 4 3;
}
.ss-trace__box {
fill: none;
stroke-width: 2;
stroke: var(--color-info);
}
.ss-trace__box.is-error {
stroke: var(--color-danger);
}
.ss-trace__sheet {
fill: var(--color-surface);
stroke: var(--color-text-body);
}
/* 수식 계산 창 */
.ss-steps {
position: absolute;
inset: 0;
z-index: var(--z-dropdown);
display: flex;
align-items: center;
justify-content: center;
background: rgb(0 0 0 / 18%);
}
.ss-steps__box {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
min-width: 420px;
max-width: 90%;
padding: var(--spacing-12);
background: var(--color-surface-raised);
color: var(--color-text-body);
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
box-shadow: var(--shadow-lg);
font-size: 13px;
}
.ss-steps__title {
font-weight: 600;
}
.ss-steps__meta {
color: var(--color-text-secondary);
}
.ss-steps__text {
min-height: 60px;
padding: var(--spacing-8);
font-family: var(--font-mono, monospace);
white-space: pre-wrap;
word-break: break-all;
background: var(--color-canvas);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
}
.ss-steps__foot {
display: flex;
justify-content: flex-end;
gap: var(--spacing-8);
}
/* 오류 ⚠ 단추 · 풍선 · 메뉴 */
.ss-errtip {
position: absolute;
z-index: var(--z-dropdown);
width: 0;
height: 0;
overflow: visible;
}
.ss-errtip__btn {
position: absolute;
width: 18px;
height: 18px;
padding: 0;
font-size: 11px;
line-height: 16px;
cursor: pointer;
color: var(--color-warning);
background: var(--color-surface);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
}
.ss-errtip__balloon {
display: none;
position: absolute;
left: 0;
top: 22px;
z-index: var(--z-dropdown);
width: max-content;
max-width: 320px;
padding: var(--spacing-4) var(--spacing-8);
font-size: 12px;
color: var(--color-text-body);
background: var(--color-surface-raised);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
box-shadow: var(--shadow-lg);
}
.ss-errtip__btn:hover + .ss-errtip__balloon {
display: block;
}
.ss-errtip__menu {
position: absolute;
left: 0;
top: 22px;
z-index: var(--z-dropdown);
display: flex;
flex-direction: column;
min-width: 200px;
max-width: 320px;
padding: var(--spacing-4);
font-size: 13px;
color: var(--color-text-body);
background: var(--color-surface-raised);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
box-shadow: var(--shadow-lg);
}
.ss-errtip__head {
padding: var(--spacing-4);
font-weight: 600;
}
.ss-errtip__item {
padding: var(--spacing-4);
text-align: left;
color: inherit;
background: none;
border: none;
cursor: pointer;
}
.ss-errtip__item:hover {
background: var(--color-surface-sunken);
}