Visual Summary
type이 표현 의도를 정하고, structure.dataset이 행·열 데이터를 담는다. Column에는 role·unit·axis·type 메타데이터도 있다.
CODE WALKTHROUGH · 2026.09.19
aippt-prisonbreak와 comp-frame의 입력 변환, 대상 노드 선택, 실제 데이터 반영을 이어서 본다. 같은 matrix여도 경로에 따라 텍스트 목록이 되거나 표·차트 전체 데이터가 된다.
코드 스냅샷을 설명하는 문서다. iui는 이번 수정 커밋을 기준으로 한다. web-2는 표·차트 분기가 있는 origin/feature/UNICORN-73380_의 로컬 Git 스냅샷을 직접 읽었다. 운영·preview 배포 버전과의 일치는 확인하지 않았다.
comp-frame은 TableItem 또는 ChartItem 하나에 표 문자열을 전달한다. aippt의 Visual Summary PoC와 CSV 도구는 서로 다른 구현이다.
| 경로 | 입력 → 대치 단위 | 실제로 바꾸는 것 | 코드 |
|---|---|---|---|
| aippt RLSC PoC component-tag / iis-node | 투영된 entities → Title·Description 등 Text 슬롯 | RLSC Text.content → sheet의 textTree. 차트 dataset 주입은 구현 범위 밖. | entityContents·bindComponentToRlsc IIS 경계 대치 미채움 제거·dataset 미지원 고지 |
| aippt comp-sign 비교 | matrix → 중첩 Markdown 리스트 → 텍스트 노드 map | 바뀐 텍스트를 fills로, 보정 박스를 bboxes로 적용. 이 브리지는 4.3.5를 사용하며 grid Markdown을 만들지 않는다. | structureToMarkdown·tableAsList comp-sign 결과 → fills·bboxes comp-sign bridge 버전 4.3.5 |
aippt CSV 도구/replace-content | 사용자가 지정한 ID + CSV | 표: 기존 셀 텍스트를 순차 대치. 차트: chartProps.dataSource 전체 교체. XML 경로도 별도 존재. | CSV 대치 도구의 호출부 JSON 표 CSV 대치 JSON 차트 CSV 대치 |
| iui comp-frame 로컬 TS / 원격 Rust 검색 | matrix → pipe-table Markdown → field:'grid' binding 하나 | 클라이언트는 nodeTextMap[gridId]를 만들고, 렌더러가 노드 타입에 따라 표 셀 또는 차트 데이터를 갱신. | matrix → pipe-table Markdown grid 단일 binding Text·Chart·Table 분기 |
책임의 경계: 검색·정렬 코드는 “어느 노드에 어떤 내용”을 결정한다. 표의 행·열 생성과 셀 크기 계산, 차트 데이터 적용은 렌더러가 맡는다. nodeTextMap이라는 이름이 모든 대상이 일반 TextItem이라는 뜻은 아니다.
ListingTable은 내용 표현의 카테고리다. 실제 캔버스가 native TableItem인지, 텍스트와 도형으로 만든 표 모양인지까지 보장하지 않는다.
type이 표현 의도를 정하고, structure.dataset이 행·열 데이터를 담는다. Column에는 role·unit·axis·type 메타데이터도 있다.
RLSC는 의미 노드 트리다. Frame은 질의 텍스트와 디자인 노드 참조를 같은 슬롯 모델로 맞춘다. dataset.kind:'matrix'는 표와 차트를 함께 나타낸다.
TableItem의 셀·자식 연결과 ChartItem의 datasource가 실제 대치 대상이다. 격자 검출은 이 속성을 확인해야 한다.
dataset:
shape: matrix
columns:
- { label: 지역, role: category }
- { label: 매출, role: value }
rows:
- [서울, 12]
- [부산, 9]첫 열은 범주, 나머지 열은 계열이다. 표와 차트가 이 데이터 모양을 공유한다. 숫자 열의 타입 조건은 establish 단계에서 검사한다.
columns:
- { label: 지역 }
- { label: 매출 }
entities:
- { label: 서울, values: [12] }
- { label: 부산, values: [9] }ListingTable·ComparisonTable의 대안 경로. 부모·자식 행은 children으로 담는다. 규약 예시처럼 첫 열 헤더까지 포함한 입력이며, 아래에서 구현 차이를 비교한다.
각 행의 첫 셀 → label
나머지 셀 → 열 이름: 값 items
label → 첫 열
items → 나머지 열
구체적 행·열 방향은 양쪽 구현이 다르다.
캔버스의 셀 좌표를 정하는 단계와 구분해야 한다. 표 카테고리에 도착했어도 이후 대치 경로가 dataset을 소비해야 데이터가 반영된다.
measure는 값 하나와 target·delta 등의 부속이다. comp-frame은 이를 value·items 텍스트로 옮기며 matrix로 만들지 않는다. measure → 값·텍스트
앞의 “지역 / 매출, 서울 12, 부산 9”를 현재 코드의 순수 함수에 직접 입력한 결과다. 아래 표와 트리는 데이터 설명용이며 실제 미캔 렌더 화면은 아니다.
| 지역 | 매출 | | --- | --- | | 서울 | 12 | | 부산 | 9 |
| 지역 | 매출 |
|---|---|
| 서울 | 12 |
| 부산 | 9 |
cols:2, rows:2. query의 rows는 데이터 행 수이고, 전달 문자열은 헤더를 포함해 3행이다. map의 대상은 셀 6개가 아니라 표 또는 차트 ID 하나다.
- 서울 - 매출: 12 - 부산 - 매출: 9
이 변환 이후 comp-sign이 텍스트 슬롯을 매칭한다. 차트 막대 높이나 series 데이터가 자동으로 바뀌는 경로는 아니다.
지역,매출 서울,12 부산,9 사용자가 targetId 지정
[
[
"지역",
"매출"
],
[
"서울",
12
],
[
"부산",
9
]
]숫자로 판정한 문자열은 number로 바꾼다. 이후 지정한 노드의 chartProps.dataSource에 이 배열을 넣는다. Visual Summary 검색·binding을 거치지 않는다.
RLSC PoC 자체에 raw matrix만 넣으면? entityContents는 entities만 읽는다. Chart 노드에 matrix를 넣은 최소 재현에서는 entitiesTotal:0, slotsFilled:0이며 기존 chart data가 유지됐다. 코드도 “차트 데이터 주입은 PoC 범위 밖”이라는 note를 반환한다. P4로 entities로 전환된 경우에는 그 텍스트를 채울 수 있다. entityContents·bindComponentToRlsc 미채움 제거·dataset 미지원 고지
component-tag는 컴포넌트 전체, iis-node는 매칭된 경계 서브트리를 bindComponentToRlsc에 넘긴다. IIS도 표·차트 전용 바인더를 추가하는 것이 아니라 같은 텍스트 바인더의 범위를 좁힌다.
label → Title, value → Subtitle/Description, items → Description으로 배정한다. 남은 단위 안 텍스트는 비운다. entity.values[]와 dataset.rows를 셀 좌표로 대응시키는 루프는 이 함수에 없다.
matrix와 entities 표를 중첩 리스트로 직렬화한다. 이 코드의 주석과 package alias가 4.3.5 제약을 명시한다. 다른 저장소의 최신 comp-sign에 grid 기능이 있어도 이 브리지가 자동으로 그 경로를 쓰는 것은 아니다.
nodeId로 textTree 노드를 찾는다. ID로 못 찾았을 때 before 원문이 유일하게 일치하면 보조 매칭한다.
전체 텍스트를 첫 string leaf에 넣고 다른 string leaf는 비운다. 그 다음 bboxes를 적용한다.
이미 수정된 sheetJson을 인라인 미캔 엔진에 전달한다. 이 렌더 컴포넌트에 dataset 변환을 맡기지 않는다.
수요 평가의 demand/logic-replace.ts도 comp-sign 2.5.0 결과를 같은 fills·box 유틸로 반영한다. 이 문서의 “aippt comp-sign 비교”는 위 Visual Summary 4.3.5 브리지를 가리키며, 저장소의 모든 comp-sign 소비처가 같은 버전이라는 뜻은 아니다. 수요 평가용 comp-sign 대치
CSV를 최대 열 수에 맞춰 빈 문자열로 패딩하고 행 우선으로 편다. JSON은 TableItem.childNodeIds에 속한 TextItem을 json.nodes 배열 순서로 골라 새 텍스트를 넣는다.
입력이 더 많으면 남는 데이터는 쓰지 않고, 기존 셀이 더 많으면 나머지를 비운다. 행·열 크기나 셀 개수를 재구성하지 않는다. XML도 기존 GRID.CELL[i]를 같은 방식으로 채운다.
JSON은 CSV에서 숫자로 판정한 값을 변환한 뒤 ChartItem.chartProps.dataSource에 대입한다. 이 유틸에는 dataVizProps.datasource 분기가 없다.
XML은 첫 데이터 열을 labels로, 나머지 열을 series title·values로 바꾸어 ChartData에 넣는다. 차트 스타일·축 타입 선택은 이 함수가 새로 설계하지 않는다.
matrix 또는 columns+entities → pipe-table Markdown.dataset.slot.text에 표 전체를 보관한다.
행마다 일반 텍스트 unit을 요구하지 않는 경로가 있다.
해당 경계 안의 실제 Table·Chart를 검출한다.
선택한 격자 ID를 dataset.slot.node에 저장.
셀 TextItem은 격자와 중복된 일반 슬롯이 되지 않도록 제외한다.
카테고리·shape·unit 수·dataset kind 등으로 후보를 거른다. matrix끼리 만나면 unit:null, field:'grid', index:0인 direct binding 하나를 만든다. grid 자체는 일반 텍스트 용량 모델로 평가하지 않는다.
grid 대상 표의 자손 셀에 중복 텍스트를 보내지 않는다. native 표 셀의 blank·잔여·별도 bbox 지시를 제거한다. 남은 binding은 map으로, 일반 빈 슬롯·경계 안 잔여는 정책에 따른 임시 문구로 변환한다.
nodeTextMap[tableOrChartId].text에 전체 표 문자열을 싣는다. 실제 표·차트 변경은 다음 절의 엔진 분기에서 수행한다.
로컬 UI는 resultMaps.ts, 원격 UI는 클라이언트 패키지의 buildFrameReplacement로 payload를 만든다. 두 경로 모두 셀 소유권을 먼저 적용하고, 제목 선택·원문 보존·형제 그룹 규칙은 공유 구현을 쓴다. 로컬·원격 UI의 대치 경로 buildFrameReplacement
| 조건 | 현재 코드 동작 | 근거 |
|---|---|---|
| sheetJson 있음 | RLSC의 Table·Chart 후보 ID로 실제 속성을 조회. 표는 layoutProps.cellProps 또는 legacy cellProps, 차트는 chartProps.dataSource 또는 dataVizProps.datasource. 실제 격자가 최소 2×2여야 채택. | 실제 Table·Chart 격자 검출 |
| 실제 속성으로 격자 없음 | RLSC가 Table/Chart라고 적어도 matrix로 확정하지 않는다. doc이 있는데 실패한 경우 RLSC-only 판정으로 되돌아가지 않는다. | doc 우선 격자 판정 |
| sheetJson 자체가 없음 | RLSC 타입으로 fallback. rowCount·columnCount가 없거나 작으면 2로 잡는다. detectedFrom:'rlsc'는 실제 속성 확인보다 약한 근거다. | doc 우선 격자 판정 |
| 경계 안 격자 여러 개 | cols, 다음 rows 오름차순의 첫 격자만 slot. 나머지는 extraGrids 감점으로 넘긴다. 자동으로 모든 표를 채우는 모델이 아니다. | 격자 정렬: cols → rows 첫 grid → dataset.slot extraGrids 감점 입력 |
“유닛 전부 blank”의 해석: raw matrix만 있는 입력이나 P6 결과는 entities가 없을 수 있다. columns+entities 경로도 query units를 비우고 grid에 행 전체를 보관한다. 따라서 일반 unit만 보면 전부 blank여도 binding[field='grid'].text에는 내용이 들어 있다. 그 문자열과 sheet_id를 함께 확인해야 한다. query Frame units·dataset 분리 comp-frame P6 행 재구성 grid 단일 binding
여기는 comp-frame의 검색 코드가 아니라 web-2의 preview 호스트 코드다. 9f70d675에서 확인한 구현이며 현재 배포 엔진과 동일하다고 단정하지 않는다.
페이지를 만든 뒤 nodeBboxMap을 먼저 반영하고, 기준 박스를 저장한 뒤 applyMarkdownToNodes를 실행한다. aippt sheet API의 “텍스트 → bbox” 순서와 다르다.
표 Markdown을 2차원 셀 문자열로 바꾼다. 시작 셀 (0,0)에 붙이고 입력 행·열 개수에 맞춰 표를 축소·확장한다. 새 데이터에 병합 정보를 따로 전달하지 않는다.
셀 폰트 크기를 기본값으로 정규화한 뒤 열 너비를 재배분하고 행 높이를 정착시킨다. 줄바꿈이 바뀌므로 이 순서가 중요하다.
기존 색 필드를 제거하고 라벨 표시를 정규화하며 data·series 폰트 크기를 초기화한다. 표 문자열을 2차원 배열로 읽어 getDataUnit().updateData()에 전달한다.
데이터가 비거나 헤더만 있으면 빈 행을 보충한다. 행 길이가 다르면 최대 열 수에 맞춰 빈 문자열로 채운다. 입력 카테고리로 차트 타입을 재설계하는 코드는 이 분기에 없다.
내용이 바뀌었다는 것과 적절한 위치·크기로 보인다는 것은 다른 검증이다. 표의 레이아웃 계산 후 셀을 일반 텍스트처럼 다시 덮으면 데이터는 맞아도 배치가 깨질 수 있다.
일반 TextItem은 같은 map의 문자열을 TextItemPropsBuilder.buildFromMarkdown으로 처리한다. 표 셀도 TextItem이므로 부모 표와 셀을 동시에 대상으로 보내지 않는 것이 중요하다. Text·Chart·Table 분기
처음 보고한 현상은 matrix 경로에서 일반 유닛이 전부 blank로 보이고, 일부 ListingTable의 내용은 들어갔지만 컴포넌트 구성이 뭉개지거나 위치가 어긋나는 것이었다. 아래는 이번 PR에서 확인·수정한 내용이다.
부모 grid ID만 bound로 보고 그 아래 Text 셀을 inside_unbound_text에 넣었다. UI가 셀에 임시 문구를 다시 보낼 수 있었다.
셀의 원래 위치·너비를 text_capacity 확장값으로 덮었다. legacy 문서는 ID가 cellProps가 아닌 childNodeIds·parentNodeId에 있어 기존 셀 수집에서 누락됐다.
IIS와 rule fallback이 문서 전체에서 격자를 찾을 수 있었다. 이제 양쪽 모두 매칭한 경계의 서브트리에서 찾는다. 경계가 없으면 해당 행만 건너뛴다.
이 수치는 이번 문서용 예제가 아니라 앞선 수정 작업의 실데이터 payload 검증 기록이다. 모든 후보의 matrix 문자열은 유지됐다. 원래 스크린샷에는 후보 ID가 없어 동일 후보라고 단정하지 않으며, preview가 당시 404여서 최종 렌더 전후 비교는 수행하지 못했다. PR #1117 원인·검증·적용 범위
수정 적용 범위: PR #1117의 화면·클라이언트 보호는 기존 결과의 셀 중복 지시를 걸러낸다. 이미 DB·스냅샷에 저장된 잘못된 grid ID와 감점 메타데이터는 수정된 빌더로 재적재·스냅샷 재생성해야 바뀐다. 이 문서 작성으로 재적재나 배포를 수행하지 않았다. 검증·적용 범위 기록
리뷰 후속 커밋과 최신 main의 원격 대치·공개 타입 정리까지 통합한 기준이다. legacy 표의 원문 읽기도 자식 연결을 따라가도록 보완했다. 관련 2,414개 테스트와 후속 클라이언트·오라클·Rust 검사를 통과했고, 로컬·원격 UI에 실제 전달되는 payload에서 셀 중복 지시가 빠지는지 확인했다. legacy 셀 원문 읽기 통합 후 검증
아래는 이번 문서를 위해 확인한 동작과 제한이다. 이번 PR에서 모두 수정했다는 뜻은 아니다.
규약은 entity마다 행을 만든다고 적는다. aippt는 도착 카테고리의 count.basis==='comparisonColumns'이면 entities를 열로 전치한다. comp-frame의 어댑터는 P6 뒤 tableRows로 다시 만들고 entities·columns를 삭제하여 행 방향을 유지한다.
comp-frame의 grid 문자열에는 열 label과 셀 값이 들어간다. Column.unit / axis / type / role을 별도 차트 설정으로 싣지 않는다. role 일부는 query의 chartlike 플래그에 쓰지만 필터는 chartlike를 비교하지 않는다. 원래 차트의 축·series 타입이 입력 의도와 맞는지 별도 확인이 필요하다.
comp-frame tableRows는 자식 행을 펼치고 label 앞 공백으로 깊이를 표시한다. Markdown payload에는 rowspan·colspan이 없고, 참조 표 파서는 셀 문자열을 trim한다. 계층 텍스트가 남는 것과 원래 병합·들여쓰기가 보존되는 것은 다르다.
iui는 셀의 |를 \|, 개행을 <br>로 보낸다. 참조 web-2 표 파서는 단순 split('|')여서 escaped pipe를 복원하지 못한다. 표는 <br>를 개행으로 바꾸지만 같은 파일의 차트 전용 간이 파서는 그 변환이 없다. 배포 엔진이 이 코드와 같다면 입력에 따라 열 분리가 어긋날 수 있다.
필터는 dataset kind를 비교하고, grid binding은 일반 Text 용량 계산에서 빠진다. 현재 rank·cost 경로에는 matrix의 행·열 차이에 대한 별도 비용 항목도 확인되지 않는다. “dimensions are cost”라는 일부 테스트 주석만으로 치수 적합성이 채점된다고 읽으면 안 된다.
텍스트·도형으로 만든 표 모양에 ListingTable 태그가 붙어도 doc 기반 grid 검출을 통과하지 못하면 dataset:none이다. matrix 쿼리는 kind 필터에서 그 후보를 못 받는다. 반대로 doc 없는 RLSC-only 검출은 실제 격자 구조를 보증하지 못한다.
§2의 columns:[지역,매출], label:서울, values:[12] 입력을 그대로 넣었다. comp-frame은 “지역 / 매출” 표를 만들지만 aippt 브리지는 columns 앞에 빈 헤더를 덧붙여 아래 결과를 만든다.
- 서울 - 지역: 12 - 매출: - - 부산 - 지역: 9 - 매출: -
현재 aippt 코드의 [{label:''}, ...structure.columns]와 [e.label,...e.values] 조합에서 나온 결과다. 양쪽의 columns 해석을 통일할 필요가 있다. structureToMarkdown·tableAsList matrix → pipe-table Markdown
table.childNodeIds = [cell-a, cell-b] json.nodes 내 실제 순서 = [table, cell-b, cell-a] CSV = "A,B,C" 실제 결과: cell-b ← A cell-a ← B C ← 쓸 기존 셀 없음
합성 최소 재현의 결과다. CSV 표 유틸은 childNodeIds를 집합 필터로만 쓰고 그 순서로 정렬하지 않는다. 물리 셀 좌표 기반 대응이나 행·열 증가도 수행하지 않는다. JSON 표 CSV 대치
규약은 설계 의도, 코드는 현재 동작: 위키 §7의 dataset.matrix → Chart data는 대응 방향을 설명한다. 그것만으로 aippt의 RLSC PoC에서 차트 주입이 완료됐다고 볼 수 없다. 별도 binding 계약 문서도 표의 행·열 대응 확인을 열린 항목으로 남겨두고 있다. RLSC 대응 설계 표 행·열 대응의 열린 항목 미채움 제거·dataset 미지원 고지
| 소스 | 고정 기준 | 읽은 범위 |
|---|---|---|
| mordor-wiki | bbabab9f1b207e97e6957dd6aa3231cb76a7e1bb | 사용자가 지정한 projects/mordor/visual-summary/spec·design. 규약과 구현을 혼동하지 않도록 비교. |
| aippt-prisonbreak | 9f2ee87f8136ae0e00091c5aec339af4f782a953 | Visual Summary 바인더·projection·브리지·sheet API·CSV 도구·호출부. README와 함수 목록도 확인. |
| miricanvas-iui | 8dd09206b94b3e2a83b23c2a7dbea68d394aa0d8 | PR #1117의 리뷰 후속 및 main f58687094 통합 포함. shared/index/client, 로컬·원격 UI의 query·align·payload와 Rust 대응. |
| miricanvas-web-2 | 9f70d6757d5976cb81a749455ad7d8a7dd8a9155 | origin/feature/UNICORN-73380_의 Git 객체를 직접 읽음. 현재 체크아웃 HEAD나 실서비스 전체를 대표하지 않는 preview 렌더 참조. |
aippt의 docs 서브모듈 로컬 HEAD는 f3c93dcc로 별도 wiki 체크아웃과 다르다. schema·capability 파일 차이를 확인했고, 본문의 규약 인용은 사용자가 지정한 wiki의 bbabab9f로 고정했다. comp-frame 내부 vendor도 aippt HEAD와 동일한 사본이 아니라 3d5a05d2 기준이므로, 어댑터를 포함한 실제 코드로 동작을 판정했다. aippt vendor 기준 SHA
matrix 직렬화, entities 헤더 차이, RLSC raw matrix 미주입, CSV 숫자·셀 순서를 로컬 함수 호출로 확인했다. 코드 링크는 커밋과 파일·줄 번호를 대조했다. 목차·사이드바·로컬 링크, 데스크톱·모바일·다크모드, 예제 탭·코드 검색 동작도 검사했다.
새로운 DB 검색·재적재·배포는 하지 않았다. 이번 문서에 그린 표·차트·소유권 그림은 설명용이다. 실제 preview 최종 렌더의 전후 이미지와 배포 SHA 일치 여부는 미확인이다.
링크는 모두 GitHub의 고정 커밋·줄 번호다. 사내 저장소 접근 권한이 필요하다. 저장소 이름, 함수, 경로로 좁힐 수 있다.
| 저장소 | 함수·코드 위치 |
|---|---|
| mordor-wiki | matrix·entities 표 규약 projects/mordor/visual-summary/spec/schema-v0.5.md:518 |
| mordor-wiki | Column 메타데이터 projects/mordor/visual-summary/spec/schema-v0.5.md:277 |
| mordor-wiki | RLSC 대응 설계 projects/mordor/visual-summary/spec/schema-v0.5.md:740 |
| mordor-wiki | P4·P6 projection 규칙 projects/mordor/visual-summary/spec/capability-table.md:278 |
| mordor-wiki | 표 행·열 대응의 열린 항목 projects/mordor/visual-summary/design/content-binding-contract.md:231 |
| aippt-prisonbreak | 검색 엔진별 bind·diffSlots src/app/api/visual-summary/service.ts:160 |
| aippt-prisonbreak | entityContents·bindComponentToRlsc src/lib/visual-summary/binding.ts:52 |
| aippt-prisonbreak | 미채움 제거·dataset 미지원 고지 src/lib/visual-summary/binding.ts:202 |
| aippt-prisonbreak | IIS 경계 대치 src/lib/visual-summary/iis/nodeBinding.ts:81 |
| aippt-prisonbreak | structureToMarkdown·tableAsList src/lib/visual-summary/markdown.ts:42 |
| aippt-prisonbreak | aippt P4·P6 src/lib/visual-summary/projection.ts:200 |
| aippt-prisonbreak | comp-sign 결과 → fills·bboxes src/app/api/visual-summary/compSignService.ts:341 |
| aippt-prisonbreak | comp-sign bridge 버전 4.3.5 package.json:197 |
| aippt-prisonbreak | applySheetTextFills src/lib/visual-summary/sheet.ts:87 |
| aippt-prisonbreak | sheet API 적용 순서 src/app/api/visual-summary/sheet/route.ts:125 |
| aippt-prisonbreak | PageRootView 인라인 렌더 src/components/pages/VisualSummaryPocPage/McInlineCanvas.tsx:136 |
| aippt-prisonbreak | CSV 대치 도구의 호출부 src/app/replace-content/page.tsx:145 |
| aippt-prisonbreak | JSON 표 CSV 대치 src/lib/replaceContent/replaceJsonTableDataWithCsv.ts:13 |
| aippt-prisonbreak | JSON 차트 CSV 대치 src/lib/replaceContent/replaceJsonChartDataWithCsv.ts:12 |
| aippt-prisonbreak | CSV 숫자 변환 src/lib/replaceContent/extractDataFromCsv/extractJsonChartDataFromCsvData.ts:12 |
| aippt-prisonbreak | CSV 표 행 우선 평탄화 src/lib/replaceContent/extractDataFromCsv/extractTableDataFromCsvData.ts:35 |
| aippt-prisonbreak | XML GRID.CELL 대치 src/lib/replaceContent/replaceXmlTableDataWithCsv.ts:14 |
| aippt-prisonbreak | XML ChartData 대치 src/lib/replaceContent/replaceXmlChartDataWithCsv.ts:13 |
| aippt-prisonbreak | XML 열 → series 변환 src/lib/replaceContent/extractDataFromCsv/extractXmlChartDataFromCsvData.ts:25 |
| aippt-prisonbreak | 수요 평가용 comp-sign 대치 src/lib/demand/logic-replace.ts:146 |
| miricanvas-iui | matrix → pipe-table Markdown src/comp-frame/query-frame.ts:177 |
| miricanvas-iui | query Frame units·dataset 분리 src/comp-frame/query-frame.ts:313 |
| miricanvas-iui | tableRows·계층 행 평탄화 src/comp-frame/summary-content.ts:243 |
| miricanvas-iui | measure → 값·텍스트 src/comp-frame/summary-content.ts:198 |
| miricanvas-iui | comp-frame P6 행 재구성 src/comp-frame/summary-projection.ts:117 |
| miricanvas-iui | 실제 Table·Chart 격자 검출 packages/comp-frame-shared/src/forked/gridExtract.ts:135 |
| miricanvas-iui | legacy 포함 표 셀 ID 수집 packages/comp-frame-shared/src/forked/gridExtract.ts:176 |
| miricanvas-iui | legacy 셀 원문 읽기 packages/comp-frame-shared/src/forked/gridExtract.ts:93 |
| miricanvas-iui | doc 우선 격자 판정 packages/comp-frame-index/src/frame/component-frame.ts:215 |
| miricanvas-iui | 첫 grid → dataset.slot packages/comp-frame-index/src/frame/component-frame.ts:336 |
| miricanvas-iui | 격자 정렬: cols → rows packages/comp-frame-shared/src/forked/sortGrids.ts:4 |
| miricanvas-iui | IIS 경계 안 격자 탐색 packages/comp-frame-index/src/frame/component-frame.ts:1037 |
| miricanvas-iui | rule fallback의 동일 경계 packages/comp-frame-index/src/frame/component-frame.ts:1514 |
| miricanvas-iui | dataset kind 하드 필터 src/comp-frame/filter.ts:123 |
| miricanvas-iui | grid 단일 binding src/comp-frame/align.ts:747 |
| miricanvas-iui | grid는 글자 용량 계산 제외 src/comp-frame/cost.ts:264 |
| miricanvas-iui | extraGrids 감점 입력 src/comp-frame/rank.ts:316 |
| miricanvas-iui | binding·blank → nodeTextMap src/comp-frame/resultMaps.ts:212 |
| miricanvas-iui | 표 셀 중복 쓰기·박스 제외 packages/comp-frame-shared/src/tableOwnership.ts:1 |
| miricanvas-iui | grid 자손의 잔여 제외 packages/comp-frame-shared/src/insideResidue.ts:69 |
| miricanvas-iui | 셀 bbox override 제외 src/visual-summary/useResultAssets.ts:158 |
| miricanvas-iui | iframe payload 전송 src/comp-frame/FrameThumbnail.tsx:759 |
| miricanvas-iui | iframe URL·wire contract src/comp-frame/previewProtocol.ts:33 |
| miricanvas-iui | buildFrameReplacement packages/comp-frame-client/src/replacement.ts:497 |
| miricanvas-iui | 로컬·원격 UI의 대치 경로 src/comp-frame/FrameResultCard.tsx:636 |
| miricanvas-iui | 없는 IIS 경계 행 건너뛰기 packages/comp-frame-index/src/bin/build-comp-frames.ts:805 |
| miricanvas-iui | Rust grid 정렬 대응 rust/comp-pass/crates/comp-frame-core/src/align.rs:992 |
| miricanvas-iui | aippt vendor 기준 SHA packages/comp-frame-shared/src/eregion/VENDOR.json:1 |
| miricanvas-iui | PR #1117 원인·검증·적용 범위 docs/comp-frame-matrix-table-fix-2026-09-19.md:1 |
| miricanvas-web-2 | Text·Chart·Table 분기 packages/engine/editor/src/test/component-thumbnail/buildComponentThumbnailPage.ts:121 |
| miricanvas-web-2 | bbox → 내용 → shrink 순서 packages/engine/editor/src/test/component-thumbnail/buildComponentThumbnailPage.ts:183 |
| miricanvas-web-2 | 차트 파서·스타일 정규화 packages/engine/editor/src/test/component-thumbnail/buildComponentThumbnailPage.ts:49 |
| miricanvas-web-2 | 표 paste·fit·셀 크기 정착 packages/engine/editor/src/node/item/component/componentTableContentUtil.ts:138 |
| miricanvas-web-2 | 표 파서: 개행·파이프 제한 packages/engine/editor/src/node/item/table/util/TableMarkdownParser.ts:24 |
| miricanvas-web-2 | 열 너비 → 행 높이 순서 packages/engine/editor/src/node/item/table/util/TableCellSizeSettler.ts:5 |
| miricanvas-web-2 | 차트 행렬 정규화 packages/engine/editor/src/node/item/chart/units/ChartMatrixDataUnit.ts:15 |