feat(804-5): 줄 쌓기 왼쪽 손질 — 자원 이름 단추 · 항목 띠 · 끌어 옮기기 · X 지움 되돌리기 · 율 번지 읽는 이름

- 인력 · 기계 · 재료 · 단가산출 줄 자원 이름 = 단추(이름 · 규격) → 찾아 넣기 창 → 바꿈 · [찾아 바꾸기] 걷음
- 항목 머리 = 띠(바탕 · 왼쪽 굵은 띠 · 번호) · 줄 = 들여쓰기 + 왼쪽 세로 선 · 가나다 한 단 더 · 접기
- 순서 = 손잡이 끌기(줄 = 항목 안 · 사이 · 항목 끌기 · 자리 선 표시) · [↑][↓] 걷음
- 지움 = X 아이콘 · 확인 없이 지우고 알림 눌러 되돌리기(그 뒤 고침 있으면 못 함)
- 산출근거 율 줄 「번지.복사N.노무비」 → 그 조각 이름 · 값 식 = 번지 값 · 합계 덧셈 항 넷 넘으면 항목 소계끼리
- 알림 부품: 누름 동작 알림은 같은 문구 버림 안 함(두 번째 지움 되돌리기 안 뜨던 흠)
- 글 · 근거 카드 높이 늘던 흠 고침 · 시험 test_804_4 끌어옮김 · 번지 이름 더함

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-08 08:29:31 +09:00
co-authored by Claude Opus 5.5
parent ca11090104
commit af576e5a7a
11 changed files with 475 additions and 70 deletions
+13
View File
@@ -318,6 +318,19 @@ export function dropSyms(doc: FormulaDoc, ids: string[]): void {
doc.식 = (doc.식 ?? []).filter((l) => !gone.has(String(l.기호 ?? "")));
}
/** 끌어 옮김(804-5) — 줄 `[i, j]` → 항목 k 의 p 자리(빼기 전 차례 · 같은 항목 아래로면 하나 당김) */
export function moveLine(items: StackItem[], i: number, j: number, k: number, p: number): void {
const [line] = items[i].줄.splice(j, 1);
if (!line || !items[k]) return void (line && items[i].줄.splice(j, 0, line));
items[k].줄.splice(Math.min(i === k && p > j ? p - 1 : p, items[k].줄.length), 0, line);
}
/** 끌어 옮김(804-5) — 항목 i → p 자리(빼기 전 차례) */
export function moveItem<T>(items: T[], i: number, p: number): void {
const [it] = items.splice(i, 1);
if (it !== undefined) items.splice(Math.min(p > i ? p - 1 : p, items.length), 0, it);
}
/** 공식 줄 값 · 식 고침 — 수 = 숫자 연결 · 식 = 식 줄 */
export function setRow(doc: FormulaDoc, id: string, text: string): void {
const t = text.trim().replace(/,/g, "");