{"schemaVersion":1,"title":"Syidax Grid API Reference","documents":[{"path":"/ko/docs","id":"overview","kind":"guide","title":"Grid Docs","summary":"Grid는 데이터를 읽는 표이면서 사용자가 검색·선택·수정한 결과를 앱으로 돌려주는 입력 화면입니다. 이 매뉴얼은 기능을 켜는 방법뿐 아니라 데이터의 흐름과 기능을 함께 쓸 때의 판단 기준을 설명합니다.","examples":[{"title":"읽기 전용 주문 목록","explanation":"제품명과 주문 수량을 보여 주되 사용자가 값을 바꾸지 않는 조회 화면입니다. 먼저 열과 행을 연결하고 정렬과 검색만 켭니다.","source":"grid.defaultColDef = { sortable: true, editable: false };\ngrid.quickFilter = true;\ngrid.pagination = true;\ngrid.pageSize = 20;","result":"행 수가 늘어도 한 페이지에서 읽을 양을 제한할 수 있습니다. 표시를 바꾸는 검색·정렬과 원본 값을 바꾸는 편집을 구분합니다."},{"title":"수정하고 저장하는 업무 화면","explanation":"수량을 편집할 수 있게 한 뒤 cellValueChanged에서 실제 바뀐 값을 읽어 저장 작업에 사용합니다. 서버 저장은 Grid 외부의 앱 책임입니다.","source":"grid.addEventListener('cellValueChanged', ({ detail }) => {\n  console.log(detail.rowId, detail.field, detail.oldValue, detail.newValue);\n});","result":"이벤트에 행 ID와 변경 전후 값이 들어옵니다. 저장 성공·실패 표시는 앱에서 응답에 맞춰 처리합니다."},{"title":"요약에서 원본까지 탐색","explanation":"담당 팀별로 합산하려면 그룹화, 팀과 지역을 교차 비교하려면 피벗을 선택합니다. 같은 수량이라도 개별 주문 값과 요약 숫자의 의미가 달라집니다.","source":"// Pro: 팀별 주문 묶기\ngrid.groupBy = 'team';\ngrid.pagination = false;","result":"팀별 요약에서 각 주문을 펼쳐 확인합니다. 피벗으로 전환할 때는 일반 groupBy를 해제하고 피벗의 행·열·값 기준을 지정합니다."}],"sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"처음에는 설치와 데이터 모델을 읽고 필요한 기능별 장으로 이동하세요. API 사전에서는 속성 1개, 메서드 1개, 이벤트 1개를 독립적으로 찾을 수 있습니다. 예제의 grid는 등록이 끝난 sy-grid 요소입니다. Docs에는 실행 중인 Grid를 넣지 않으며 코드와 결과 설명을 따라 앱에 연결합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 읽기 전용 주문 목록","blocks":[{"kind":"paragraph","text":"제품명과 주문 수량을 보여 주되 사용자가 값을 바꾸지 않는 조회 화면입니다. 먼저 열과 행을 연결하고 정렬과 검색만 켭니다."},{"kind":"code","source":"grid.defaultColDef = { sortable: true, editable: false };\ngrid.quickFilter = true;\ngrid.pagination = true;\ngrid.pageSize = 20;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행 수가 늘어도 한 페이지에서 읽을 양을 제한할 수 있습니다. 표시를 바꾸는 검색·정렬과 원본 값을 바꾸는 편집을 구분합니다."}]},{"id":"example-2","title":"예제 2. 수정하고 저장하는 업무 화면","blocks":[{"kind":"paragraph","text":"수량을 편집할 수 있게 한 뒤 cellValueChanged에서 실제 바뀐 값을 읽어 저장 작업에 사용합니다. 서버 저장은 Grid 외부의 앱 책임입니다."},{"kind":"code","source":"grid.addEventListener('cellValueChanged', ({ detail }) => {\n  console.log(detail.rowId, detail.field, detail.oldValue, detail.newValue);\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이벤트에 행 ID와 변경 전후 값이 들어옵니다. 저장 성공·실패 표시는 앱에서 응답에 맞춰 처리합니다."}]},{"id":"example-3","title":"예제 3. 요약에서 원본까지 탐색","blocks":[{"kind":"paragraph","text":"담당 팀별로 합산하려면 그룹화, 팀과 지역을 교차 비교하려면 피벗을 선택합니다. 같은 수량이라도 개별 주문 값과 요약 숫자의 의미가 달라집니다."},{"kind":"code","source":"// Pro: 팀별 주문 묶기\ngrid.groupBy = 'team';\ngrid.pagination = false;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 팀별 요약에서 각 주문을 펼쳐 확인합니다. 피벗으로 전환할 때는 일반 groupBy를 해제하고 피벗의 행·열·값 기준을 지정합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"데이터 다운로드가 느린 문제는 가상화만으로 해결되지 않습니다. 가상화는 화면 요소의 수를 줄이고, 원격 행 모델은 가져오는 데이터의 범위를 줄입니다."},{"kind":"paragraph","text":"Features의 주문 예제는 기능 체험용입니다. 협업 서버·권한·파일 저장 같은 앱 통합은 해당 장의 준비 조건을 함께 구현해야 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/workspace","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/getting-started","id":"getting-started","kind":"guide","title":"Grid 시작하기","summary":"npm에서 필요한 에디션 하나를 설치하고 CSS와 sy-grid를 등록하세요. 한 페이지에서는 Community와 Pro 중 하나만 등록합니다.","examples":[{"title":"Community 등록과 첫 표","explanation":"배포받은 Community 패키지를 설치한 앱의 진입 파일에서 실행합니다. 화면에는 먼저 <sy-grid id=\"orders\"></sy-grid>를 배치합니다.","source":"import '@syidax/advanced/css/grid';\nimport { defineCustomElement } from '@syidax/advanced/components/sy-grid.js';\ndefineCustomElement();\nawait customElements.whenDefined('sy-grid');\nconst grid = document.querySelector('#orders');\nObject.assign(grid, {\n  height: 420, locale: 'ko', getRowId: row => row.id,\n  defaultColDef: { sortable: true },\n  columnDefs: [\n    { field: 'id', headerName: '주문 번호', editable: false },\n    { field: 'product', headerName: '제품' },\n    { field: 'team', headerName: '담당 팀' },\n    { field: 'region', headerName: '지역' },\n    { field: 'quantity', headerName: '수량', editor: 'number', editable: true },\n    { field: 'price', headerName: '단가', editor: 'number' }\n  ],\n  rowData: [\n    { id: 'ORD-0001', product: 'Atlas', team: 'Platform', region: 'APAC', quantity: 10, price: 120 },\n    { id: 'ORD-0002', product: 'Beacon', team: 'Design', region: 'EMEA', quantity: 20, price: 80 },\n    { id: 'ORD-0003', product: 'Cipher', team: 'Platform', region: 'EMEA', quantity: 30, price: 50 }\n  ]\n});","result":"6개 열과 3개 주문이 보이고 수량은 편집할 수 있습니다. 패키지 이름을 브라우저가 해석할 수 있도록 번들러가 있는 앱에서 실행합니다."},{"title":"Pro 기능을 사용하는 앱","explanation":"Pro 패키지를 사용하는 앱은 import 경로도 Pro로 통일합니다. 아래 /licenses/grid.json은 앱이 발급받은 인증서를 제공하는 경로이며 직접 준비해야 합니다.","source":"import { registerLicense } from '@syidax/advanced-pro/license';\nimport { defineCustomElement } from '@syidax/advanced-pro/components/sy-grid.js';\nconst response = await fetch('/licenses/grid.json');\nif (!response.ok) throw new Error('라이선스를 불러오지 못했습니다.');\nconst result = await registerLicense(await response.json());\nif (!result.ok) throw new Error('라이선스를 확인하세요.');\ndefineCustomElement();","result":"등록 결과가 ok인 뒤 컴포넌트를 연결합니다. 서명용 비밀 키는 앱에 포함하지 않고 발급된 인증서만 전달합니다."},{"title":"화면을 다시 여는 앱","explanation":"탭·라우트가 바뀌는 앱에서는 기존 요소와 이벤트 구독을 정리하고 새 화면의 요소를 참조합니다. 다른 화면의 grid 변수로 호출하지 않도록 합니다.","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 이 화면을 해제할 때 호출합니다.\nfunction dispose() {\n  controller.abort();\n  grid.remove();\n}","result":"화면을 재진입해도 이벤트가 중복으로 처리되지 않습니다. 앱에서 만든 소켓·타이머도 같은 시점에 정리합니다."}],"sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"이 매뉴얼의 짧은 코드는 아래 기본 설정을 마친 grid를 기준으로 설명합니다. 각 예제에서 다시 할당한 columnDefs와 rowData가 기존 값을 대체한다는 점에 유의하세요."}]},{"id":"example-1","title":"예제 1. Community 등록과 첫 표","blocks":[{"kind":"paragraph","text":"배포받은 Community 패키지를 설치한 앱의 진입 파일에서 실행합니다. 화면에는 먼저 <sy-grid id=\"orders\"></sy-grid>를 배치합니다."},{"kind":"code","source":"import '@syidax/advanced/css/grid';\nimport { defineCustomElement } from '@syidax/advanced/components/sy-grid.js';\ndefineCustomElement();\nawait customElements.whenDefined('sy-grid');\nconst grid = document.querySelector('#orders');\nObject.assign(grid, {\n  height: 420, locale: 'ko', getRowId: row => row.id,\n  defaultColDef: { sortable: true },\n  columnDefs: [\n    { field: 'id', headerName: '주문 번호', editable: false },\n    { field: 'product', headerName: '제품' },\n    { field: 'team', headerName: '담당 팀' },\n    { field: 'region', headerName: '지역' },\n    { field: 'quantity', headerName: '수량', editor: 'number', editable: true },\n    { field: 'price', headerName: '단가', editor: 'number' }\n  ],\n  rowData: [\n    { id: 'ORD-0001', product: 'Atlas', team: 'Platform', region: 'APAC', quantity: 10, price: 120 },\n    { id: 'ORD-0002', product: 'Beacon', team: 'Design', region: 'EMEA', quantity: 20, price: 80 },\n    { id: 'ORD-0003', product: 'Cipher', team: 'Platform', region: 'EMEA', quantity: 30, price: 50 }\n  ]\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 6개 열과 3개 주문이 보이고 수량은 편집할 수 있습니다. 패키지 이름을 브라우저가 해석할 수 있도록 번들러가 있는 앱에서 실행합니다."}]},{"id":"example-2","title":"예제 2. Pro 기능을 사용하는 앱","blocks":[{"kind":"paragraph","text":"Pro 패키지를 사용하는 앱은 import 경로도 Pro로 통일합니다. 아래 /licenses/grid.json은 앱이 발급받은 인증서를 제공하는 경로이며 직접 준비해야 합니다."},{"kind":"code","source":"import { registerLicense } from '@syidax/advanced-pro/license';\nimport { defineCustomElement } from '@syidax/advanced-pro/components/sy-grid.js';\nconst response = await fetch('/licenses/grid.json');\nif (!response.ok) throw new Error('라이선스를 불러오지 못했습니다.');\nconst result = await registerLicense(await response.json());\nif (!result.ok) throw new Error('라이선스를 확인하세요.');\ndefineCustomElement();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 등록 결과가 ok인 뒤 컴포넌트를 연결합니다. 서명용 비밀 키는 앱에 포함하지 않고 발급된 인증서만 전달합니다."}]},{"id":"example-3","title":"예제 3. 화면을 다시 여는 앱","blocks":[{"kind":"paragraph","text":"탭·라우트가 바뀌는 앱에서는 기존 요소와 이벤트 구독을 정리하고 새 화면의 요소를 참조합니다. 다른 화면의 grid 변수로 호출하지 않도록 합니다."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 이 화면을 해제할 때 호출합니다.\nfunction dispose() {\n  controller.abort();\n  grid.remove();\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 화면을 재진입해도 이벤트가 중복으로 처리되지 않습니다. 앱에서 만든 소켓·타이머도 같은 시점에 정리합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"HTML 예제도 npm import를 처리하는 앱 빌드 도구에서 사용합니다. Installation 안내에서 설치 명령과 CSS import를 확인하세요."},{"kind":"paragraph","text":"Grid가 보이지 않으면 등록 완료 여부, 요소 선택 결과, 높이와 부모 너비를 먼저 확인하세요. Pro 권한 문제와 빈 데이터 문제를 구분해서 조사합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/getting-started","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/concepts","id":"concepts","kind":"guide","title":"행, 열, 그리고 상태","summary":"rowData는 주문의 실제 값이고 columnDefs는 그 값을 어떤 열에 보여 줄지 설명합니다. field는 데이터를 읽을 키이며 headerName은 화면 제목입니다. 제목을 바꿔도 원본 필드 이름은 바뀌지 않습니다.","examples":[{"title":"열 제목만 현지화","explanation":"서버 데이터의 product 키는 유지하고 화면 제목만 한국어로 바꿉니다.","source":"grid.columnDefs = [{ field: 'product', headerName: '제품명', width: 220 }];","result":"데이터 변환 없이 제목만 달라집니다. field를 제품명으로 바꾸면 행에 그 키가 없어서 값이 비게 됩니다."},{"title":"ID로 변경 대상 찾기","explanation":"ORD-0002가 정렬 후 맨 위로 와도 ID로 찾은 주문만 수정합니다.","source":"grid.getRowId = row => row.id;\nconst target = grid.rowData.find(row => row.id === 'ORD-0002');\nif (target) await grid.applyTransaction({ update: [{ ...target, quantity: 25 }] });","result":"원본 배열의 두 번째 행이라는 가정을 하지 않으므로 표시 순서가 바뀌어도 같은 주문을 갱신합니다."},{"title":"배열과 단순 값 전달","explanation":"height는 숫자 또는 CSS 길이이고, 열 정의와 데이터는 JavaScript 객체입니다.","source":"grid.height = '60vh';\ngrid.pagination = false;\ngrid.rowData = [...grid.rowData, { id: 'ORD-0004', product: 'Delta', quantity: 5 }];","result":"새 배열이 전달되면서 주문이 추가됩니다. 문자열로 직렬화한 JSON을 HTML 속성에 넣는 방식과 구분합니다."}],"sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"화면 위치와 업무 ID를 구분하세요. 정렬·필터·그룹화 후 표시 위치는 달라집니다. getRowId가 반환하는 고유 ID는 갱신·선택·복원 시 같은 주문을 찾는 기준입니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 열 제목만 현지화","blocks":[{"kind":"paragraph","text":"서버 데이터의 product 키는 유지하고 화면 제목만 한국어로 바꿉니다."},{"kind":"code","source":"grid.columnDefs = [{ field: 'product', headerName: '제품명', width: 220 }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 데이터 변환 없이 제목만 달라집니다. field를 제품명으로 바꾸면 행에 그 키가 없어서 값이 비게 됩니다."}]},{"id":"example-2","title":"예제 2. ID로 변경 대상 찾기","blocks":[{"kind":"paragraph","text":"ORD-0002가 정렬 후 맨 위로 와도 ID로 찾은 주문만 수정합니다."},{"kind":"code","source":"grid.getRowId = row => row.id;\nconst target = grid.rowData.find(row => row.id === 'ORD-0002');\nif (target) await grid.applyTransaction({ update: [{ ...target, quantity: 25 }] });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 원본 배열의 두 번째 행이라는 가정을 하지 않으므로 표시 순서가 바뀌어도 같은 주문을 갱신합니다."}]},{"id":"example-3","title":"예제 3. 배열과 단순 값 전달","blocks":[{"kind":"paragraph","text":"height는 숫자 또는 CSS 길이이고, 열 정의와 데이터는 JavaScript 객체입니다."},{"kind":"code","source":"grid.height = '60vh';\ngrid.pagination = false;\ngrid.rowData = [...grid.rowData, { id: 'ORD-0004', product: 'Delta', quantity: 5 }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 새 배열이 전달되면서 주문이 추가됩니다. 문자열로 직렬화한 JSON을 HTML 속성에 넣는 방식과 구분합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"ID는 중복되거나 편집할 때마다 달라지면 안 됩니다. 숫자 1과 문자열 \"1\"처럼 ID 형식을 바꾸는 것도 피하세요."},{"kind":"paragraph","text":"기본 열 설정 defaultColDef와 개별 열 설정이 함께 있으면 개별 열의 설정을 확인하세요. 전체 편집을 켰더라도 주문 번호 열은 editable: false로 보호할 수 있습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/concepts","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/column-operations","id":"column-operations","kind":"feature","group":"columns","title":"열 크기와 고정","tier":"free","summary":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다.","examples":[{"title":"중요한 열을 고정","explanation":"가로 스크롤 중에도 주문을 식별할 수 있도록 왼쪽에 ID를 고정합니다.","source":"await grid.setColumnPinned('id', 'left');\nawait grid.setColumnWidth('product', 280);","result":"ID 열은 왼쪽에 남고 제품 열은 280px이 됩니다. 좌우 고정 열이 너무 많으면 가운데 열을 볼 공간이 줄어듭니다."},{"title":"간단 보기와 상세 보기","explanation":"단가가 필요 없는 사용자는 price 열을 숨깁니다. 데이터 필드를 지우는 작업은 아닙니다.","source":"await grid.hideColumn('price');\nconsole.log(await grid.getHiddenColumns());\n// 상세 보기로 돌아갈 때\nawait grid.showColumn('price');","result":"표의 열 표시만 바뀝니다. 보안을 위해 값을 숨겨야 하는 상황이라면 권한 설정과 서버 데이터 제한을 함께 사용합니다."},{"title":"내용 길이에 맞춰 너비 계산","explanation":"필요한 열만 자동 너비를 적용하고 현재 열 구성을 저장합니다.","source":"await grid.autoSizeColumn('product');\nconst savedColumns = await grid.getColumnState();\nconsole.log(savedColumns);\n// 같은 열 ID를 준비한 다른 시점에 복원\nawait grid.applyColumnState(savedColumns);","result":"현재 내용에 맞춘 너비와 열 상태를 읽을 수 있습니다. 열의 ID가 달라진 상태에서는 일부 설정을 적용할 수 없습니다."}],"featureId":"column-operations","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"초기 열 정의에 기본값을 선언하고 사용 중 변경에는 열 메서드를 사용합니다. 사용자 선택을 보관하려면 columnDefs 원본보다 현재 getColumnState 결과를 저장하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 중요한 열을 고정","blocks":[{"kind":"paragraph","text":"가로 스크롤 중에도 주문을 식별할 수 있도록 왼쪽에 ID를 고정합니다."},{"kind":"code","source":"await grid.setColumnPinned('id', 'left');\nawait grid.setColumnWidth('product', 280);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: ID 열은 왼쪽에 남고 제품 열은 280px이 됩니다. 좌우 고정 열이 너무 많으면 가운데 열을 볼 공간이 줄어듭니다."}]},{"id":"example-2","title":"예제 2. 간단 보기와 상세 보기","blocks":[{"kind":"paragraph","text":"단가가 필요 없는 사용자는 price 열을 숨깁니다. 데이터 필드를 지우는 작업은 아닙니다."},{"kind":"code","source":"await grid.hideColumn('price');\nconsole.log(await grid.getHiddenColumns());\n// 상세 보기로 돌아갈 때\nawait grid.showColumn('price');","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표의 열 표시만 바뀝니다. 보안을 위해 값을 숨겨야 하는 상황이라면 권한 설정과 서버 데이터 제한을 함께 사용합니다."}]},{"id":"example-3","title":"예제 3. 내용 길이에 맞춰 너비 계산","blocks":[{"kind":"paragraph","text":"필요한 열만 자동 너비를 적용하고 현재 열 구성을 저장합니다."},{"kind":"code","source":"await grid.autoSizeColumn('product');\nconst savedColumns = await grid.getColumnState();\nconsole.log(savedColumns);\n// 같은 열 ID를 준비한 다른 시점에 복원\nawait grid.applyColumnState(savedColumns);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 현재 내용에 맞춘 너비와 열 상태를 읽을 수 있습니다. 열의 ID가 달라진 상태에서는 일부 설정을 적용할 수 없습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"width와 minWidth·maxWidth를 함께 설정하면 허용 범위가 자동 크기 계산에도 영향을 줄 수 있습니다. flex로 남은 공간을 나누는 열은 고정 너비 열과 구분하세요."},{"kind":"paragraph","text":"재정렬한 화면에서 columnDefs를 이전 배열로 다시 할당하면 사용자가 바꾼 구성을 덮어쓸 수 있습니다. 앱이 초기값과 사용자 상태 중 무엇을 우선할지 정하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/resizableColumns","title":"resizableColumns","description":"사용자가 열 경계를 드래그해 너비를 바꿀 수 있게 합니다."},{"path":"/ko/docs/options/reorderableColumns","title":"reorderableColumns","description":"사용자가 머리글을 드래그해 열 순서를 바꿀 수 있게 합니다."},{"path":"/ko/docs/options/columnHiding","title":"columnHiding","description":"열 숨김 기능을 활성화합니다. 숨긴 열을 복원할 메뉴나 패널도 함께 제공합니다."},{"path":"/ko/docs/options/hideableColumns","title":"hideableColumns","description":"열 숨김 기능의 호환 설정입니다. columnHiding과 일관된 값으로 사용합니다."},{"path":"/ko/docs/options/autoSizeOnDoubleClick","title":"autoSizeOnDoubleClick","description":"열 경계 두 번 클릭으로 내용에 맞는 자동 너비를 적용합니다."},{"path":"/ko/docs/columns/width","title":"width","description":"열의 초기 너비를 픽셀로 지정합니다."},{"path":"/ko/docs/columns/minWidth","title":"minWidth","description":"사용자 조정과 자동 크기 계산에서 허용할 최소 너비입니다."},{"path":"/ko/docs/columns/maxWidth","title":"maxWidth","description":"열 너비의 상한입니다."},{"path":"/ko/docs/columns/flex","title":"flex","description":"남는 공간을 나눠 가질 상대 비율입니다. 고정 너비·최소·최대 너비와 함께 확인합니다."},{"path":"/ko/docs/columns/resizable","title":"resizable","description":"이 열의 너비를 사용자가 조절할 수 있는지 정합니다."},{"path":"/ko/docs/columns/reorderable","title":"reorderable","description":"이 열의 위치를 사용자가 바꿀 수 있는지 정합니다."},{"path":"/ko/docs/columns/pinned","title":"pinned","description":"열을 왼쪽·오른쪽에 고정하거나 null로 고정을 해제합니다."},{"path":"/ko/docs/columns/hidden","title":"hidden","description":"이 열을 처음에 숨길지 설정합니다. 값 읽기 권한을 차단하는 설정은 아닙니다."},{"path":"/ko/docs/columns/hide","title":"hide","description":"열 숨김의 호환 이름입니다. hidden과 모순된 값으로 중복 지정하지 마세요."},{"path":"/ko/docs/methods/setColumnWidth","title":"setColumnWidth","description":"현재 열 너비를 지정합니다. 열의 최소·최대 너비 제한을 함께 확인합니다."},{"path":"/ko/docs/methods/resetColumnWidth","title":"resetColumnWidth","description":"지정한 열의 사용자 너비 변경을 초기 설정으로 되돌립니다."},{"path":"/ko/docs/methods/getColumnWidth","title":"getColumnWidth","description":"현재 열 너비를 읽습니다. 대상 열이 없으면 null입니다."},{"path":"/ko/docs/methods/setColumnPinned","title":"setColumnPinned","description":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다."},{"path":"/ko/docs/methods/getColumnPinned","title":"getColumnPinned","description":"현재 열 고정 방향을 읽습니다."},{"path":"/ko/docs/methods/setColumnOrder","title":"setColumnOrder","description":"열 ID 목록으로 표시 순서를 지정합니다."},{"path":"/ko/docs/methods/getColumnOrder","title":"getColumnOrder","description":"현재 열 표시 순서의 ID 목록을 읽습니다."},{"path":"/ko/docs/methods/hideColumn","title":"hideColumn","description":"지정한 열을 숨깁니다. 원본 데이터를 삭제하거나 읽기 권한을 차단하지 않습니다."},{"path":"/ko/docs/methods/showColumn","title":"showColumn","description":"숨겨진 열을 표시합니다."},{"path":"/ko/docs/methods/toggleColumnVisibility","title":"toggleColumnVisibility","description":"열 표시 여부를 반전하고 결과 상태를 반환합니다."},{"path":"/ko/docs/methods/setHiddenColumns","title":"setHiddenColumns","description":"숨길 열 목록을 한 번에 지정합니다."},{"path":"/ko/docs/methods/resetColumnVisibility","title":"resetColumnVisibility","description":"열 표시 상태를 초기 설정으로 되돌립니다."},{"path":"/ko/docs/methods/getHiddenColumns","title":"getHiddenColumns","description":"현재 숨겨진 열의 식별자 목록을 읽습니다."},{"path":"/ko/docs/methods/autoSizeColumn","title":"autoSizeColumn","description":"현재 측정할 수 있는 내용에 맞춰 한 열의 너비를 계산하고 적용합니다."},{"path":"/ko/docs/methods/autoSizeAllColumns","title":"autoSizeAllColumns","description":"각 열에 자동 너비 계산을 적용합니다. 서버 미로드 값까지 측정할 수 있다고 가정하지 마세요."},{"path":"/ko/docs/methods/getColumnState","title":"getColumnState","description":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다."},{"path":"/ko/docs/methods/applyColumnState","title":"applyColumnState","description":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."},{"path":"/ko/docs/events/columnResized","title":"columnResized","description":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다."},{"path":"/ko/docs/events/columnReordered","title":"columnReordered","description":"열 순서가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"열 표시·숨김 상태가 바뀌었을 때 발생합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/column-operations","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/column-groups","id":"column-groups","kind":"feature","group":"columns","title":"다단 헤더","summary":"다단 헤더는 관련 열을 하나의 상위 제목 아래 배치합니다. 행을 묶는 그룹화와 달리 데이터 개수나 집계값은 바뀌지 않습니다.","examples":[{"title":"주문 정보와 금액 정보 분리","explanation":"제품·수량을 같은 헤더로 묶고 단가는 별도로 표시합니다.","source":"grid.columnDefs = [\n  { groupId: 'order', headerName: '주문 정보', children: [\n    { field: 'product', headerName: '제품' },\n    { field: 'quantity', headerName: '수량' }\n  ] },\n  { field: 'price', headerName: '단가' }\n];","result":"상위 주문 정보 아래 두 열이 나타납니다. 원본 주문 객체는 평평한 구조 그대로 사용할 수 있습니다."},{"title":"펼침 상태 제어","explanation":"공간이 부족한 화면에서는 일부 그룹을 접는 흐름을 구성합니다.","source":"await grid.setColumnGroupOpened('order', false);\n// 사용자가 자세히 보기를 선택한 뒤\nawait grid.setColumnGroupOpened('order', true);","result":"지정한 그룹의 펼침 상태가 바뀝니다. 실제 숨길 하위 열은 columnGroupShow 설정과 함께 결정됩니다."},{"title":"실행 중인 그룹 조회","explanation":"설정 화면에서 그룹 정보를 보여 주려면 연결된 그룹 객체를 조회합니다.","source":"const group = await grid.getColumnGroup('order');\nconst groups = await grid.getColumnGroups();\nconsole.log(group, groups);","result":"그룹이 없으면 null이 반환될 수 있습니다. 단순 저장용 JSON과 실행 중인 그룹 참조를 구분하세요."}],"featureId":"column-groups","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"상위 그룹에는 groupId와 children을 지정하고 실제 값을 읽는 하위 열에는 field 또는 colId를 둡니다. 그룹 ID와 열 ID가 겹치지 않게 정하면 저장과 제어가 명확해집니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 주문 정보와 금액 정보 분리","blocks":[{"kind":"paragraph","text":"제품·수량을 같은 헤더로 묶고 단가는 별도로 표시합니다."},{"kind":"code","source":"grid.columnDefs = [\n  { groupId: 'order', headerName: '주문 정보', children: [\n    { field: 'product', headerName: '제품' },\n    { field: 'quantity', headerName: '수량' }\n  ] },\n  { field: 'price', headerName: '단가' }\n];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 상위 주문 정보 아래 두 열이 나타납니다. 원본 주문 객체는 평평한 구조 그대로 사용할 수 있습니다."}]},{"id":"example-2","title":"예제 2. 펼침 상태 제어","blocks":[{"kind":"paragraph","text":"공간이 부족한 화면에서는 일부 그룹을 접는 흐름을 구성합니다."},{"kind":"code","source":"await grid.setColumnGroupOpened('order', false);\n// 사용자가 자세히 보기를 선택한 뒤\nawait grid.setColumnGroupOpened('order', true);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지정한 그룹의 펼침 상태가 바뀝니다. 실제 숨길 하위 열은 columnGroupShow 설정과 함께 결정됩니다."}]},{"id":"example-3","title":"예제 3. 실행 중인 그룹 조회","blocks":[{"kind":"paragraph","text":"설정 화면에서 그룹 정보를 보여 주려면 연결된 그룹 객체를 조회합니다."},{"kind":"code","source":"const group = await grid.getColumnGroup('order');\nconst groups = await grid.getColumnGroups();\nconsole.log(group, groups);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 그룹이 없으면 null이 반환될 수 있습니다. 단순 저장용 JSON과 실행 중인 그룹 참조를 구분하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"children을 가진 그룹 자체는 행 데이터를 읽는 셀이 아닙니다. 그룹 제목에 field를 지정하는 것만으로 계산 열이 생기지 않습니다."},{"kind":"paragraph","text":"열 고정과 숨김을 조합하면 화면에 보이는 그룹 모양이 달라집니다. 고정 영역과 일반 영역에서 헤더를 읽을 수 있는지 확인하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/columnGroupShow","title":"columnGroupShow","description":"부모 열 그룹이 펼쳐졌거나 접혔을 때 이 열을 보여 줄지 선택합니다."},{"path":"/ko/docs/methods/setColumnGroupOpened","title":"setColumnGroupOpened","description":"지정한 열 그룹 머리글을 펼치거나 접습니다."},{"path":"/ko/docs/events/columnGroupToggled","title":"columnGroupToggled","description":"열 그룹 머리글을 펼치거나 접었을 때 발생합니다. groupId와 open으로 현재 상태를 읽습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/column-groups","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/column-api","id":"column-api","kind":"feature","group":"columns","title":"실시간 열 API","tier":"free","summary":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다.","examples":[{"title":"한 열과 전체 열 비교","explanation":"제품 열 하나를 찾고 전체 열 목록도 조회합니다.","source":"const product = await grid.getColumn('product');\nconst columns = await grid.getColumns();\nconsole.log(product, columns);","result":"하나의 참조와 참조 배열을 얻습니다. title이 아닌 field 또는 colId를 조회 이름으로 사용합니다."},{"title":"API와 화면 상태 연결","explanation":"사용자가 드래그한 직후 현재 너비를 앱에 표시합니다.","source":"grid.addEventListener('columnResized', async () => {\n  console.log(await grid.getColumnWidth('product'));\n});","result":"처음 선언한 width가 아니라 현재 적용된 열 너비를 읽습니다. 이벤트 구독은 화면 해제 시 정리합니다."},{"title":"저장용 데이터 읽기","explanation":"실시간 객체를 직렬화하지 않고 전용 상태를 읽습니다.","source":"const state = await grid.getColumnState();\nconst json = JSON.stringify(state);\nawait grid.applyColumnState(JSON.parse(json));","result":"너비·순서·표시·고정 등의 상태를 저장 가능한 값으로 다룹니다. 전체 필터·선택 상태까지 필요하면 getState를 사용합니다."}],"featureId":"column-api","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"getColumn은 열의 고유 이름을 받으며 존재하지 않는 이름에는 null이 올 수 있습니다. 열이 교체되거나 화면이 제거된 뒤 이전 참조가 계속 유효하다고 가정하지 마세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 한 열과 전체 열 비교","blocks":[{"kind":"paragraph","text":"제품 열 하나를 찾고 전체 열 목록도 조회합니다."},{"kind":"code","source":"const product = await grid.getColumn('product');\nconst columns = await grid.getColumns();\nconsole.log(product, columns);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 하나의 참조와 참조 배열을 얻습니다. title이 아닌 field 또는 colId를 조회 이름으로 사용합니다."}]},{"id":"example-2","title":"예제 2. API와 화면 상태 연결","blocks":[{"kind":"paragraph","text":"사용자가 드래그한 직후 현재 너비를 앱에 표시합니다."},{"kind":"code","source":"grid.addEventListener('columnResized', async () => {\n  console.log(await grid.getColumnWidth('product'));\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 처음 선언한 width가 아니라 현재 적용된 열 너비를 읽습니다. 이벤트 구독은 화면 해제 시 정리합니다."}]},{"id":"example-3","title":"예제 3. 저장용 데이터 읽기","blocks":[{"kind":"paragraph","text":"실시간 객체를 직렬화하지 않고 전용 상태를 읽습니다."},{"kind":"code","source":"const state = await grid.getColumnState();\nconst json = JSON.stringify(state);\nawait grid.applyColumnState(JSON.parse(json));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 너비·순서·표시·고정 등의 상태를 저장 가능한 값으로 다룹니다. 전체 필터·선택 상태까지 필요하면 getState를 사용합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"컴포넌트 메서드가 Promise를 반환하므로 const column = grid.getColumn(...)만 쓰면 열이 아니라 Promise를 얻습니다. await를 사용하세요."},{"kind":"paragraph","text":"다중 Grid 화면에서는 어떤 요소에서 얻은 참조인지 유지하세요. 다른 Grid의 열 ID가 같아도 같은 열 객체가 아닙니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getColumn","title":"getColumn","description":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."},{"path":"/ko/docs/methods/getColumns","title":"getColumns","description":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."},{"path":"/ko/docs/methods/getColumnGroup","title":"getColumnGroup","description":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."},{"path":"/ko/docs/methods/getColumnGroups","title":"getColumnGroups","description":"현재 열 그룹 객체 목록을 읽습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/column-api","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/value-getter-formatter","id":"value-getter-formatter","kind":"feature","group":"columns","title":"계산과 표시 분리","tier":"free","summary":"valueGetter는 실제 계산값을 만들고 valueFormatter는 화면에 읽기 좋은 문자열을 만듭니다. 합계·정렬·비교에 숫자가 필요하면 getter는 숫자를 반환해야 합니다.","examples":[{"title":"수량과 단가로 합계 계산","explanation":"total 필드가 원본에 없어도 계산 열을 추가할 수 있습니다.","source":"grid.columnDefs = [...grid.columnDefs, {\n  field: 'amount', colId: 'amount', headerName: '합계', editable: false,\n  valueGetter: ({ data }) => Number(data.quantity) * Number(data.price)\n}];","result":"10 × 120은 숫자 1200입니다. 수량을 20으로 편집하면 계산 결과는 2400이 됩니다."},{"title":"통화 표시 추가","explanation":"실제 숫자는 유지하면서 금액을 사용자 언어에 맞게 표시합니다.","source":"grid.columnDefs = [{ field: 'price', headerName: '단가',\n  valueFormatter: ({ value }) => new Intl.NumberFormat('ko-KR', {\n    style: 'currency', currency: 'KRW'\n  }).format(Number(value))\n}];","result":"사용자는 통화 기호와 구분 기호를 보지만 원본 단가는 숫자입니다. 표시 형식이 원본 데이터의 통화를 변환하지는 않습니다."},{"title":"빈 값과 0 구분","explanation":"빈 단가를 0원으로 잘못 보여 주지 않도록 빈 값 표시를 따로 정합니다.","source":"grid.columnDefs = [{ field: 'price', headerName: '단가',\n  valueFormatter: ({ value }) => value == null ? '미입력' : Number(value).toLocaleString('ko-KR')\n}];","result":"null·undefined는 미입력, 숫자 0은 0으로 표시됩니다. 유효하지 않은 숫자는 검증 단계에서 처리해야 합니다."}],"featureId":"value-getter-formatter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"표시 문자열만 바꾸는 formatter와 실제 데이터를 바꾸는 valueParser·valueSetter를 구분하세요. 포맷된 글자를 다시 계산의 원본으로 쓰면 단위나 쉼표 때문에 결과가 달라질 수 있습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수량과 단가로 합계 계산","blocks":[{"kind":"paragraph","text":"total 필드가 원본에 없어도 계산 열을 추가할 수 있습니다."},{"kind":"code","source":"grid.columnDefs = [...grid.columnDefs, {\n  field: 'amount', colId: 'amount', headerName: '합계', editable: false,\n  valueGetter: ({ data }) => Number(data.quantity) * Number(data.price)\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 10 × 120은 숫자 1200입니다. 수량을 20으로 편집하면 계산 결과는 2400이 됩니다."}]},{"id":"example-2","title":"예제 2. 통화 표시 추가","blocks":[{"kind":"paragraph","text":"실제 숫자는 유지하면서 금액을 사용자 언어에 맞게 표시합니다."},{"kind":"code","source":"grid.columnDefs = [{ field: 'price', headerName: '단가',\n  valueFormatter: ({ value }) => new Intl.NumberFormat('ko-KR', {\n    style: 'currency', currency: 'KRW'\n  }).format(Number(value))\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자는 통화 기호와 구분 기호를 보지만 원본 단가는 숫자입니다. 표시 형식이 원본 데이터의 통화를 변환하지는 않습니다."}]},{"id":"example-3","title":"예제 3. 빈 값과 0 구분","blocks":[{"kind":"paragraph","text":"빈 단가를 0원으로 잘못 보여 주지 않도록 빈 값 표시를 따로 정합니다."},{"kind":"code","source":"grid.columnDefs = [{ field: 'price', headerName: '단가',\n  valueFormatter: ({ value }) => value == null ? '미입력' : Number(value).toLocaleString('ko-KR')\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: null·undefined는 미입력, 숫자 0은 0으로 표시됩니다. 유효하지 않은 숫자는 검증 단계에서 처리해야 합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"getter 안에서 네트워크 요청이나 rowData 변경을 수행하지 마세요. 스크롤·정렬·재계산 중 여러 번 호출되어도 같은 입력에 같은 결과가 나와야 합니다."},{"kind":"paragraph","text":"사용자가 직접 수식을 입력해야 한다면 valueGetter가 아니라 수식 기능을 검토합니다. 두 방식의 결과 저장과 편집 동작은 다릅니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueGetter","title":"valueGetter","description":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다."},{"path":"/ko/docs/columns/valueFormatter","title":"valueFormatter","description":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/value-getter-formatter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/data-updates","id":"data-updates","kind":"feature","group":"rows","title":"데이터 갱신","tier":"free","summary":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다.","examples":[{"title":"조회 결과 전체 교체","explanation":"다른 기간의 주문을 조회한 결과로 목록을 바꾸는 상황입니다. 앱의 조회 API가 응답한 배열을 한 번에 전달합니다.","source":"const response = await fetch('/api/orders?month=2026-10');\nif (!response.ok) throw new Error('조회 실패');\nconst rows = await response.json();\ngrid.rowData = rows;","result":"이번 조회 결과만 표시됩니다. /api/orders는 앱에서 준비할 예시 API이며 서버 응답이 객체라면 실제 rows 배열을 꺼내 전달해야 합니다."},{"title":"한 주문의 수량 증가","explanation":"첫 주문 수량 10을 20으로 바꿉니다. 나머지 필드도 포함한 새 행 객체를 전달합니다.","source":"const row = grid.rowData.find(row => row.id === 'ORD-0001');\nif (row) {\n  const result = await grid.applyTransaction({ update: [{ ...row, quantity: row.quantity + 10 }] });\n  console.log(result.updated, result.rejected);\n}","result":"동일 ID 주문의 수량이 10 증가합니다. 합계가 valueGetter로 계산되는 열이면 새 수량으로 다시 계산됩니다."},{"title":"추가·삭제를 하나의 변경으로 처리","explanation":"취소된 주문을 제거하면서 새 주문을 넣는 경우입니다. 제거 대상은 현재 데이터에서 찾아 전달합니다.","source":"const cancelled = grid.rowData.find(row => row.id === 'ORD-0002');\nconst result = await grid.applyTransaction({\n  add: [{ id: 'ORD-0004', product: 'Delta', quantity: 5, price: 100 }],\n  remove: cancelled ? [cancelled] : []\n});\nconsole.log(result.added, result.removed, result.rejected);","result":"추가와 삭제가 같은 반환 보고서에 포함됩니다. 고빈도 수신 데이터도 일정 간격으로 모아 전달하면 호출 수를 줄일 수 있습니다."}],"featureId":"data-updates","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"트랜잭션의 반환값은 실제 적용 결과입니다. 요청한 값만 보고 성공이라고 처리하지 말고 updated·rejected 등의 결과를 확인하세요. 브라우저 변경이 서버 저장을 의미하지는 않습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 조회 결과 전체 교체","blocks":[{"kind":"paragraph","text":"다른 기간의 주문을 조회한 결과로 목록을 바꾸는 상황입니다. 앱의 조회 API가 응답한 배열을 한 번에 전달합니다."},{"kind":"code","source":"const response = await fetch('/api/orders?month=2026-10');\nif (!response.ok) throw new Error('조회 실패');\nconst rows = await response.json();\ngrid.rowData = rows;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이번 조회 결과만 표시됩니다. /api/orders는 앱에서 준비할 예시 API이며 서버 응답이 객체라면 실제 rows 배열을 꺼내 전달해야 합니다."}]},{"id":"example-2","title":"예제 2. 한 주문의 수량 증가","blocks":[{"kind":"paragraph","text":"첫 주문 수량 10을 20으로 바꿉니다. 나머지 필드도 포함한 새 행 객체를 전달합니다."},{"kind":"code","source":"const row = grid.rowData.find(row => row.id === 'ORD-0001');\nif (row) {\n  const result = await grid.applyTransaction({ update: [{ ...row, quantity: row.quantity + 10 }] });\n  console.log(result.updated, result.rejected);\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 동일 ID 주문의 수량이 10 증가합니다. 합계가 valueGetter로 계산되는 열이면 새 수량으로 다시 계산됩니다."}]},{"id":"example-3","title":"예제 3. 추가·삭제를 하나의 변경으로 처리","blocks":[{"kind":"paragraph","text":"취소된 주문을 제거하면서 새 주문을 넣는 경우입니다. 제거 대상은 현재 데이터에서 찾아 전달합니다."},{"kind":"code","source":"const cancelled = grid.rowData.find(row => row.id === 'ORD-0002');\nconst result = await grid.applyTransaction({\n  add: [{ id: 'ORD-0004', product: 'Delta', quantity: 5, price: 100 }],\n  remove: cancelled ? [cancelled] : []\n});\nconsole.log(result.added, result.removed, result.rejected);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 추가와 삭제가 같은 반환 보고서에 포함됩니다. 고빈도 수신 데이터도 일정 간격으로 모아 전달하면 호출 수를 줄일 수 있습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"갱신 객체에서 누락한 필드가 어떻게 처리되는지 가정하지 말고 기존 행을 펼쳐 새 값만 덮어쓰세요. 조회 중 도착한 오래된 응답이 최신 편집을 덮어쓰지 않도록 요청 순서를 관리합니다."},{"kind":"paragraph","text":"대량 변경에서는 매 행마다 전체 rowData를 다시 할당하기보다 변경분을 모으세요. 서버 행 모델은 자체 트랜잭션 API를 사용하므로 클라이언트 트랜잭션과 구분합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowData","title":"rowData","description":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다."},{"path":"/ko/docs/options/columnDefs","title":"columnDefs","description":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."},{"path":"/ko/docs/options/defaultColDef","title":"defaultColDef","description":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다."},{"path":"/ko/docs/columns/field","title":"field","description":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다."},{"path":"/ko/docs/columns/colId","title":"colId","description":"열을 API·상태 저장에서 안정적으로 식별할 ID입니다. 제목 변경과 무관하게 유지하세요."},{"path":"/ko/docs/columns/headerName","title":"headerName","description":"사용자에게 보여 줄 열 제목입니다. 원본 데이터 키와 다르게 작성할 수 있습니다."},{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."},{"path":"/ko/docs/events/rowDataChanged","title":"rowDataChanged","description":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다."},{"path":"/ko/docs/events/cellValueChanged","title":"cellValueChanged","description":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/data-updates","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/infinite-row-model","id":"infinite-row-model","kind":"feature","group":"rows","title":"필요한 블록만 요청","tier":"free","summary":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다.","examples":[{"title":"구간 조회 API 연결","explanation":"아래 서버는 startRow 이상 endRow 미만의 행과 전체 개수 total을 반환한다고 가정합니다. 응답 실패도 반드시 Grid에 알립니다.","source":"grid.datasource = { getRows: async params => {\n  try {\n    const response = await fetch('/api/orders', { method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ startRow: params.startRow, endRow: params.endRow,\n        sortModel: params.sortModel, filterModel: params.filterModel, quickFilter: params.quickFilter }) });\n    if (!response.ok) throw new Error('조회 실패');\n    const { rows, total } = await response.json();\n    params.success(rows, total);\n  } catch { params.fail(); }\n}};","result":"사용자가 이동한 구간에 행이 채워집니다. 예시 URL은 앱에서 구현할 조회 API입니다."},{"title":"요청 크기와 캐시 조절","explanation":"서버 왕복 시간이 길면 작은 블록을 너무 자주 요청하지 않도록 크기를 조절합니다.","source":"grid.cacheBlockSize = 100;\ngrid.maxBlocksInCache = 5;","result":"한 번에 요청하는 행 묶음과 보관할 묶음 수를 제한합니다. 캐시를 줄이면 메모리는 줄지만 이전 구간 재방문 시 조회가 늘 수 있습니다."},{"title":"서버 데이터가 바뀐 뒤 갱신","explanation":"외부 화면에서 주문을 수정했으면 로드된 캐시가 오래된 상태일 수 있습니다.","source":"await grid.refreshInfiniteCache();","result":"갱신 요청이 진행된 뒤 서버의 최신 값을 읽습니다. 로컬 셀만 바꾸는 트랜잭션과 서버 재조회는 서로 다른 작업입니다."}],"featureId":"infinite-row-model","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"Grid는 요청을 만들고 앱은 서버 응답을 해석합니다. 마지막 데이터 위치 또는 전체 개수를 정확히 알려야 빈 구간을 반복 요청하거나 스크롤 길이가 잘못 표시되는 일을 막을 수 있습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 구간 조회 API 연결","blocks":[{"kind":"paragraph","text":"아래 서버는 startRow 이상 endRow 미만의 행과 전체 개수 total을 반환한다고 가정합니다. 응답 실패도 반드시 Grid에 알립니다."},{"kind":"code","source":"grid.datasource = { getRows: async params => {\n  try {\n    const response = await fetch('/api/orders', { method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ startRow: params.startRow, endRow: params.endRow,\n        sortModel: params.sortModel, filterModel: params.filterModel, quickFilter: params.quickFilter }) });\n    if (!response.ok) throw new Error('조회 실패');\n    const { rows, total } = await response.json();\n    params.success(rows, total);\n  } catch { params.fail(); }\n}};","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자가 이동한 구간에 행이 채워집니다. 예시 URL은 앱에서 구현할 조회 API입니다."}]},{"id":"example-2","title":"예제 2. 요청 크기와 캐시 조절","blocks":[{"kind":"paragraph","text":"서버 왕복 시간이 길면 작은 블록을 너무 자주 요청하지 않도록 크기를 조절합니다."},{"kind":"code","source":"grid.cacheBlockSize = 100;\ngrid.maxBlocksInCache = 5;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 한 번에 요청하는 행 묶음과 보관할 묶음 수를 제한합니다. 캐시를 줄이면 메모리는 줄지만 이전 구간 재방문 시 조회가 늘 수 있습니다."}]},{"id":"example-3","title":"예제 3. 서버 데이터가 바뀐 뒤 갱신","blocks":[{"kind":"paragraph","text":"외부 화면에서 주문을 수정했으면 로드된 캐시가 오래된 상태일 수 있습니다."},{"kind":"code","source":"await grid.refreshInfiniteCache();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 갱신 요청이 진행된 뒤 서버의 최신 값을 읽습니다. 로컬 셀만 바꾸는 트랜잭션과 서버 재조회는 서로 다른 작업입니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"성공과 실패 콜백은 요청마다 한 번만 호출합니다. 성공 콜백을 호출한 다음 예외를 다시 실패로 처리하지 않도록 응답 검증을 먼저 끝내세요."},{"kind":"paragraph","text":"서버 검색은 전체 데이터에 먼저 적용하고 그 결과에서 구간을 잘라야 합니다. 내려받은 100행에서만 검색하면 서버에 있는 다른 일치 행을 놓칩니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/datasource","title":"datasource","description":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다."},{"path":"/ko/docs/options/cacheBlockSize","title":"cacheBlockSize","description":"원격 행을 한 번에 요청하고 캐시할 블록 크기입니다."},{"path":"/ko/docs/options/maxBlocksInCache","title":"maxBlocksInCache","description":"무한 행 모델에서 유지할 캐시 블록 수를 제한합니다. 메모리와 재조회 비용의 균형을 정합니다."},{"path":"/ko/docs/methods/refreshInfiniteCache","title":"refreshInfiniteCache","description":"무한 행 모델의 캐시를 새로 조회합니다. 변경된 서버 조건과 데이터 공급자를 먼저 준비합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/infinite-row-model","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/server-query","id":"server-query","kind":"feature","group":"rows","title":"서버에서 정렬과 검색","tier":"free","summary":"서버 조회는 행 범위·정렬·필터를 하나의 조건으로 서버에 전달하는 방식입니다. 단순 목록 조회에는 Infinite 모델과 함께 사용하고 서버 그룹·피벗은 Server-Side 모델을 검토합니다.","examples":[{"title":"담당 팀별 정렬 요청","explanation":"정렬 모델은 field와 direction 배열입니다. 다중 정렬은 배열의 앞 조건이 우선합니다.","source":"await grid.setSortModel([\n  { field: 'team', direction: 'asc' },\n  { field: 'quantity', direction: 'desc' }\n]);","result":"원격 모델이 요청한 조건을 서버가 적용해야 모든 페이지의 순서가 일관됩니다. 한 페이지 안에서만 다시 정렬하면 전체 순서는 보장되지 않습니다."},{"title":"검색과 페이지를 함께 처리","explanation":"예를 들어 검색어 Platform, startRow 0, endRow 100 요청을 받으면 서버는 검색→정렬→구간 추출 순서로 처리합니다. 검색 후 전체 개수도 따로 계산합니다.","source":null,"result":"응답의 total은 필터 전 주문 수가 아니라 검색에 맞는 전체 주문 수입니다. 다음 페이지에서도 같은 조건을 유지합니다."},{"title":"늦게 도착한 요청 처리","explanation":"사용자가 A를 검색한 뒤 AB로 바꿨을 때 A 요청이 나중에 끝날 수 있습니다. 앱의 요청 ID·취소 신호로 새 조회가 오래된 응답에 덮이지 않게 합니다.","source":null,"result":"마지막 사용자 조건의 결과만 화면에 남아야 합니다. 취소된 요청과 실제 서버 오류를 같은 오류 메시지로 보여 주지 마세요."}],"featureId":"server-query","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"클라이언트가 보내는 필드 이름을 서버의 SQL에 그대로 붙이지 마세요. 앱이 허용한 필드와 연산자로 해석하고 동일한 조건으로 rows와 total을 계산합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 담당 팀별 정렬 요청","blocks":[{"kind":"paragraph","text":"정렬 모델은 field와 direction 배열입니다. 다중 정렬은 배열의 앞 조건이 우선합니다."},{"kind":"code","source":"await grid.setSortModel([\n  { field: 'team', direction: 'asc' },\n  { field: 'quantity', direction: 'desc' }\n]);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 원격 모델이 요청한 조건을 서버가 적용해야 모든 페이지의 순서가 일관됩니다. 한 페이지 안에서만 다시 정렬하면 전체 순서는 보장되지 않습니다."}]},{"id":"example-2","title":"예제 2. 검색과 페이지를 함께 처리","blocks":[{"kind":"paragraph","text":"예를 들어 검색어 Platform, startRow 0, endRow 100 요청을 받으면 서버는 검색→정렬→구간 추출 순서로 처리합니다. 검색 후 전체 개수도 따로 계산합니다."},{"kind":"paragraph","text":"결과 확인: 응답의 total은 필터 전 주문 수가 아니라 검색에 맞는 전체 주문 수입니다. 다음 페이지에서도 같은 조건을 유지합니다."}]},{"id":"example-3","title":"예제 3. 늦게 도착한 요청 처리","blocks":[{"kind":"paragraph","text":"사용자가 A를 검색한 뒤 AB로 바꿨을 때 A 요청이 나중에 끝날 수 있습니다. 앱의 요청 ID·취소 신호로 새 조회가 오래된 응답에 덮이지 않게 합니다."},{"kind":"paragraph","text":"결과 확인: 마지막 사용자 조건의 결과만 화면에 남아야 합니다. 취소된 요청과 실제 서버 오류를 같은 오류 메시지로 보여 주지 마세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"오프셋 기반 페이지에서 조회 사이 새 주문이 추가되면 중복이나 누락이 생길 수 있습니다. 서버에서 안정적인 보조 정렬 키나 스냅샷 기준을 사용하세요."},{"kind":"paragraph","text":"응답 행 수가 짧다는 이유만으로 오류라고 판단하지 마세요. 마지막 구간일 수 있으며 전체 개수와 함께 판정합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/server-query","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/server-side-row-model","id":"server-side-row-model","kind":"feature","group":"rows","title":"서버 측 행 모델","tier":"pro","summary":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다.","examples":[{"title":"그룹 요청 연결","explanation":"서버는 요청에 포함된 그룹 경로·필터·정렬을 해석해 rows와 rowCount를 반환하도록 준비합니다.","source":"grid.serverSideDatasource = { getRows: async (request, success, fail) => {\n  try {\n    const response = await fetch('/api/orders/groups', { method: 'POST',\n      headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(request) });\n    if (!response.ok) throw new Error('조회 실패');\n    success(await response.json());\n  } catch { fail(); }\n}};","result":"처음에는 최상위 데이터, 그룹을 펼치면 해당 경로의 데이터가 공급됩니다. API의 ServerSideGetRowsParams와 Result를 서버 계약으로 함께 검토하세요."},{"title":"일부 데이터만 로드된 선택","explanation":"아직 내려받지 않은 주문까지 선택 대상으로 삼으려면 서버 선택 상태를 사용합니다.","source":"console.log(await grid.getServerSideSelectionState());\nconsole.log(await grid.getServerGroupSelectionState());","result":"표시된 행 ID 목록과 서버 전체 선택 규칙을 구분할 수 있습니다. 앱의 일괄 처리 API도 이 선택 규칙을 이해해야 합니다."},{"title":"캐시와 처리 결과 조사","explanation":"그룹을 펼쳐도 비어 보일 때 어떤 저장소가 로드되었는지 확인합니다.","source":"console.log(await grid.getServerSideStoreState());\nconsole.log(await grid.getServerPivotResultColumns());","result":"그룹 저장소 상태와 서버가 공급한 피벗 열을 따로 확인합니다. 서버 집계 열 이름이 응답 데이터 키와 맞는지도 검사하세요."}],"featureId":"server-side-row-model","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"serverSideDatasource의 getRows는 요청과 성공·실패 콜백을 별도 인수로 받습니다. Infinite datasource의 params.success 형태와 혼동하지 마세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 그룹 요청 연결","blocks":[{"kind":"paragraph","text":"서버는 요청에 포함된 그룹 경로·필터·정렬을 해석해 rows와 rowCount를 반환하도록 준비합니다."},{"kind":"code","source":"grid.serverSideDatasource = { getRows: async (request, success, fail) => {\n  try {\n    const response = await fetch('/api/orders/groups', { method: 'POST',\n      headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(request) });\n    if (!response.ok) throw new Error('조회 실패');\n    success(await response.json());\n  } catch { fail(); }\n}};","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 처음에는 최상위 데이터, 그룹을 펼치면 해당 경로의 데이터가 공급됩니다. API의 ServerSideGetRowsParams와 Result를 서버 계약으로 함께 검토하세요."}]},{"id":"example-2","title":"예제 2. 일부 데이터만 로드된 선택","blocks":[{"kind":"paragraph","text":"아직 내려받지 않은 주문까지 선택 대상으로 삼으려면 서버 선택 상태를 사용합니다."},{"kind":"code","source":"console.log(await grid.getServerSideSelectionState());\nconsole.log(await grid.getServerGroupSelectionState());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표시된 행 ID 목록과 서버 전체 선택 규칙을 구분할 수 있습니다. 앱의 일괄 처리 API도 이 선택 규칙을 이해해야 합니다."}]},{"id":"example-3","title":"예제 3. 캐시와 처리 결과 조사","blocks":[{"kind":"paragraph","text":"그룹을 펼쳐도 비어 보일 때 어떤 저장소가 로드되었는지 확인합니다."},{"kind":"code","source":"console.log(await grid.getServerSideStoreState());\nconsole.log(await grid.getServerPivotResultColumns());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 그룹 저장소 상태와 서버가 공급한 피벗 열을 따로 확인합니다. 서버 집계 열 이름이 응답 데이터 키와 맞는지도 검사하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"일반 클라이언트 applyTransaction으로 아직 내려받지 않은 서버 행을 모두 바꾸려 하지 마세요. 서버 변경과 서버 전용 트랜잭션·재조회 흐름을 사용합니다."},{"kind":"paragraph","text":"그룹 수와 리프 주문 수, 피벗 결과 열과 원본 열을 구분해서 응답하세요. 펼침 경로의 잘못된 rowCount는 로딩과 선택에도 영향을 줍니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."},{"path":"/ko/docs/options/serverSideGroupCols","title":"serverSideGroupCols","description":"서버에서 그룹화할 열을 바깥 그룹부터 순서대로 지정합니다. 빈 배열은 평면 데이터입니다."},{"path":"/ko/docs/options/serverSideTransactionWaitMs","title":"serverSideTransactionWaitMs","description":"비동기 서버 행 트랜잭션을 모아 처리하기까지 기다릴 시간입니다."},{"path":"/ko/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다."},{"path":"/ko/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다."},{"path":"/ko/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다."},{"path":"/ko/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다."},{"path":"/ko/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다."},{"path":"/ko/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다."},{"path":"/ko/docs/methods/refreshServerSide","title":"refreshServerSide","description":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."},{"path":"/ko/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."},{"path":"/ko/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."},{"path":"/ko/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다."},{"path":"/ko/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다."},{"path":"/ko/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다."},{"path":"/ko/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다."},{"path":"/ko/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/server-side-row-model","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/viewport-row-model","id":"viewport-row-model","kind":"feature","group":"rows","title":"보이는 구간을 스트리밍","tier":"pro","summary":"전체 데이터 개수는 알지만 현재 보이는 행만 지속 갱신하려는 시세·모니터링 화면에 적합합니다. 스크롤 범위에 맞춰 구독 범위를 바꾸는 것이 핵심입니다.","examples":[{"title":"정적인 원격 구간 공급","explanation":"시작·끝 범위를 받는 앱 API의 반환 형식을 { rows }로 정한 예입니다.","source":"let callbacks;\nlet revision = 0;\ngrid.viewportDatasource = {\n  init(api) { callbacks = api; api.setRowCount(100000); },\n  async setViewportRange(first, last) {\n    const current = ++revision;\n    const response = await fetch('/api/quotes?first=' + first + '&last=' + last);\n    if (!response.ok) return;\n    const { rows } = await response.json();\n    if (current === revision) callbacks.setRowData(first, rows);\n  },\n  destroy() { revision++; }\n};","result":"최근 요청 범위에 대해서만 행이 채워집니다. 실패 상태 표시는 앱의 오류 UI와 함께 연결하세요."},{"title":"보이는 시세만 구독","explanation":"setViewportRange가 바뀔 때 이전 소켓 구독을 해제하고 새 범위의 상품 ID를 구독합니다. 서버 메시지를 받으면 해당 행 위치에 갱신 데이터를 공급합니다.","source":null,"result":"전체 시장 데이터를 브라우저에 계속 보내지 않아도 현재 보는 구간을 최신으로 유지할 수 있습니다."},{"title":"종료와 전체 개수 변경","explanation":"데이터셋이 달라지면 전체 행 수와 구간 데이터를 함께 갱신합니다. 화면을 닫을 때 destroy에서 소켓·타이머·진행 요청을 정리합니다.","source":null,"result":"이전 화면에서 도착한 메시지가 새 Grid를 덮어쓰지 않습니다. 행 개수가 줄면 현재 스크롤 위치가 유효한지도 확인합니다."}],"featureId":"viewport-row-model","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"init에서 받은 setRowCount와 setRowData를 보관하고 setViewportRange의 범위 요청에 응답합니다. 원격 응답에 대해서는 요청 순서와 화면 해제 상태를 함께 확인하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 정적인 원격 구간 공급","blocks":[{"kind":"paragraph","text":"시작·끝 범위를 받는 앱 API의 반환 형식을 { rows }로 정한 예입니다."},{"kind":"code","source":"let callbacks;\nlet revision = 0;\ngrid.viewportDatasource = {\n  init(api) { callbacks = api; api.setRowCount(100000); },\n  async setViewportRange(first, last) {\n    const current = ++revision;\n    const response = await fetch('/api/quotes?first=' + first + '&last=' + last);\n    if (!response.ok) return;\n    const { rows } = await response.json();\n    if (current === revision) callbacks.setRowData(first, rows);\n  },\n  destroy() { revision++; }\n};","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 최근 요청 범위에 대해서만 행이 채워집니다. 실패 상태 표시는 앱의 오류 UI와 함께 연결하세요."}]},{"id":"example-2","title":"예제 2. 보이는 시세만 구독","blocks":[{"kind":"paragraph","text":"setViewportRange가 바뀔 때 이전 소켓 구독을 해제하고 새 범위의 상품 ID를 구독합니다. 서버 메시지를 받으면 해당 행 위치에 갱신 데이터를 공급합니다."},{"kind":"paragraph","text":"결과 확인: 전체 시장 데이터를 브라우저에 계속 보내지 않아도 현재 보는 구간을 최신으로 유지할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 종료와 전체 개수 변경","blocks":[{"kind":"paragraph","text":"데이터셋이 달라지면 전체 행 수와 구간 데이터를 함께 갱신합니다. 화면을 닫을 때 destroy에서 소켓·타이머·진행 요청을 정리합니다."},{"kind":"paragraph","text":"결과 확인: 이전 화면에서 도착한 메시지가 새 Grid를 덮어쓰지 않습니다. 행 개수가 줄면 현재 스크롤 위치가 유효한지도 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"뷰포트의 행 위치는 업무 ID와 같지 않습니다. 정렬이 바뀌면 같은 위치에 다른 상품이 들어올 수 있으므로 서버 기준 순서를 함께 관리하세요."},{"kind":"paragraph","text":"숫자가 자주 바뀌는 화면에서는 변경 강조와 업데이트 빈도를 조절하세요. 보이지 않는 행까지 매번 DOM으로 만들 필요는 없습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/viewportDatasource","title":"viewportDatasource","description":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/viewport-row-model","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-layout","id":"row-layout","kind":"feature","group":"rows","title":"행 높이와 고정 행","summary":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다.","examples":[{"title":"아래쪽 요약 행 고정","explanation":"현재 데이터 전체의 수량 합계를 계산해 별도 행으로 표시합니다.","source":"const quantity = grid.rowData.reduce((sum, row) => sum + Number(row.quantity || 0), 0);\ngrid.pinnedBottomRowData = [{ id: 'SUMMARY', product: '전체 수량', quantity }];","result":"화면을 스크롤해도 요약 행이 남습니다. 이 계산은 필터 결과가 아닌 rowData 전체 기준입니다."},{"title":"읽기 좋은 행 높이","explanation":"사용자가 행 밀도를 바꾸는 설정을 앱에 제공할 수 있습니다.","source":"grid.rowHeight = 44;\nawait grid.refreshRowHeights();","result":"높이가 바뀐 행 배치가 반영됩니다. 자동 높이를 사용한다면 줄바꿈과 셀 내용도 함께 확인하세요."},{"title":"병합·전체 너비·고정 조합 진단","explanation":"같은 데이터에 여러 구조 기능을 겹칠 때는 실제 적용 결과를 조회해 확인합니다.","source":"console.log(await grid.getPinnedRows());\nconsole.log(await grid.getFullWidthRowInfo());","result":"전체 너비 행과 고정 영역이 어떤 데이터에 적용되었는지 확인할 수 있습니다. 세부 병합 판정은 getCellSpan·getSpanInteraction의 인수 계약을 따라 조회합니다."}],"featureId":"row-layout","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"고정 행은 별도의 데이터입니다. 자동 합계가 아니므로 필터나 편집에 맞춰 합계를 바꾸려면 앱이 계산한 값을 다시 전달해야 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 아래쪽 요약 행 고정","blocks":[{"kind":"paragraph","text":"현재 데이터 전체의 수량 합계를 계산해 별도 행으로 표시합니다."},{"kind":"code","source":"const quantity = grid.rowData.reduce((sum, row) => sum + Number(row.quantity || 0), 0);\ngrid.pinnedBottomRowData = [{ id: 'SUMMARY', product: '전체 수량', quantity }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 화면을 스크롤해도 요약 행이 남습니다. 이 계산은 필터 결과가 아닌 rowData 전체 기준입니다."}]},{"id":"example-2","title":"예제 2. 읽기 좋은 행 높이","blocks":[{"kind":"paragraph","text":"사용자가 행 밀도를 바꾸는 설정을 앱에 제공할 수 있습니다."},{"kind":"code","source":"grid.rowHeight = 44;\nawait grid.refreshRowHeights();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 높이가 바뀐 행 배치가 반영됩니다. 자동 높이를 사용한다면 줄바꿈과 셀 내용도 함께 확인하세요."}]},{"id":"example-3","title":"예제 3. 병합·전체 너비·고정 조합 진단","blocks":[{"kind":"paragraph","text":"같은 데이터에 여러 구조 기능을 겹칠 때는 실제 적용 결과를 조회해 확인합니다."},{"kind":"code","source":"console.log(await grid.getPinnedRows());\nconsole.log(await grid.getFullWidthRowInfo());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 전체 너비 행과 고정 영역이 어떤 데이터에 적용되었는지 확인할 수 있습니다. 세부 병합 판정은 getCellSpan·getSpanInteraction의 인수 계약을 따라 조회합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"병합 영역은 정렬과 필터에 따라 경계가 달라집니다. 표시된 셀 범위와 복사·내보내기의 병합 처리 규칙을 함께 검토하세요."},{"kind":"paragraph","text":"전체 너비 행에 일반 열 편집이 그대로 적용된다고 가정하지 마세요. 레이아웃이 거절되면 rowLayoutRefused 등의 보고를 읽고 이유를 해결합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/spanExportMode","title":"spanExportMode","description":"병합 셀을 복사·출력할 때 원점 값을 한 번만 쓸지 각 위치에 반복할지 선택합니다."},{"path":"/ko/docs/options/alignedGrids","title":"alignedGrids","description":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다."},{"path":"/ko/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다."},{"path":"/ko/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."},{"path":"/ko/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다."},{"path":"/ko/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다."},{"path":"/ko/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다."},{"path":"/ko/docs/columns/rowSpan","title":"rowSpan","description":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다."},{"path":"/ko/docs/columns/colSpan","title":"colSpan","description":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다."},{"path":"/ko/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."},{"path":"/ko/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다."},{"path":"/ko/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."},{"path":"/ko/docs/methods/setPinnedRows","title":"setPinnedRows","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."},{"path":"/ko/docs/methods/getPinnedRows","title":"getPinnedRows","description":"현재 고정 행 데이터를 보고서로 읽습니다."},{"path":"/ko/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"지정한 고정 행의 세부 정보를 읽습니다."},{"path":"/ko/docs/methods/getRowSpan","title":"getRowSpan","description":"세로 병합 범위의 계산 결과를 읽습니다."},{"path":"/ko/docs/methods/getCellSpan","title":"getCellSpan","description":"특정 셀의 가로·세로 병합 정보를 읽습니다."},{"path":"/ko/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."},{"path":"/ko/docs/events/spanConflict","title":"spanConflict","description":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다."},{"path":"/ko/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-layout","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-drag","id":"row-drag","kind":"feature","group":"rows","title":"행 드래그","tier":"free","summary":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다.","examples":[{"title":"드래그 손잡이 제공","explanation":"제품 열에서 행을 잡을 수 있도록 설정합니다.","source":"grid.rowDragManaged = true;\ngrid.columnDefs = grid.columnDefs.map(col => ({ ...col, rowDrag: col.field === 'product' }));\nawait grid.setSortModel([]);\nawait grid.setFilterModel(null);","result":"정렬·필터가 없는 목록에서 수동 순서를 시험할 수 있습니다. 헤더 이동 손잡이와 행 이동 손잡이는 다릅니다."},{"title":"이동 결과를 저장 흐름에 연결","explanation":"앱은 rowMoved 이벤트를 받아 변경된 순서를 서버에 보관하는 업무 처리를 구현합니다.","source":"grid.addEventListener('rowMoved', event => console.log(event.detail));\nconsole.log(await grid.getDragSafetyReport());","result":"이동 전 허용 상태와 이동 후 결과를 각각 확인합니다. 화면에서 성공한 이동이 서버에 자동 저장되지는 않습니다."},{"title":"두 표 사이에 주문 분배","explanation":"미배정 표와 담당자 표 사이에 이동하려면 대상의 드롭 영역을 등록하고 rowsTransferred 보고서를 확인합니다.","source":"console.log(await grid.getDropZones());\ngrid.addEventListener('rowsTransferred', event => console.log(event.detail));","result":"복사와 이동 중 어떤 동작을 허용할지 앱이 정합니다. 양쪽에 동일 ID가 이미 있을 때 처리도 확인하세요."}],"featureId":"row-drag","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"드래그 시작 전 데이터 모델과 그룹·피벗 상태의 허용 범위를 확인하세요. 다른 Grid로 이동하려면 드롭 대상 등록과 전송 결과 처리가 추가로 필요합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 드래그 손잡이 제공","blocks":[{"kind":"paragraph","text":"제품 열에서 행을 잡을 수 있도록 설정합니다."},{"kind":"code","source":"grid.rowDragManaged = true;\ngrid.columnDefs = grid.columnDefs.map(col => ({ ...col, rowDrag: col.field === 'product' }));\nawait grid.setSortModel([]);\nawait grid.setFilterModel(null);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 정렬·필터가 없는 목록에서 수동 순서를 시험할 수 있습니다. 헤더 이동 손잡이와 행 이동 손잡이는 다릅니다."}]},{"id":"example-2","title":"예제 2. 이동 결과를 저장 흐름에 연결","blocks":[{"kind":"paragraph","text":"앱은 rowMoved 이벤트를 받아 변경된 순서를 서버에 보관하는 업무 처리를 구현합니다."},{"kind":"code","source":"grid.addEventListener('rowMoved', event => console.log(event.detail));\nconsole.log(await grid.getDragSafetyReport());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이동 전 허용 상태와 이동 후 결과를 각각 확인합니다. 화면에서 성공한 이동이 서버에 자동 저장되지는 않습니다."}]},{"id":"example-3","title":"예제 3. 두 표 사이에 주문 분배","blocks":[{"kind":"paragraph","text":"미배정 표와 담당자 표 사이에 이동하려면 대상의 드롭 영역을 등록하고 rowsTransferred 보고서를 확인합니다."},{"kind":"code","source":"console.log(await grid.getDropZones());\ngrid.addEventListener('rowsTransferred', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 복사와 이동 중 어떤 동작을 허용할지 앱이 정합니다. 양쪽에 동일 ID가 이미 있을 때 처리도 확인하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"필터로 일부 행만 보이는 상태에서 드래그한 결과를 전체 원본 순서로 오해하지 마세요. getDragSafetyReport와 rowDragCancel 사유로 거절 원인을 읽습니다."},{"kind":"paragraph","text":"계층 구조의 부모를 바꾸는 작업은 평면 순서 변경보다 많은 조건이 필요합니다. treeReparented와 reparentRows의 결과를 확인하고 순환 관계를 만들지 않습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowDragManaged","title":"rowDragManaged","description":"Grid가 행 드래그 결과의 순서 변경을 관리하게 합니다. 정렬·필터·다른 행 모델과의 조합 제한을 확인합니다."},{"path":"/ko/docs/options/rowDragMultiRow","title":"rowDragMultiRow","description":"여러 선택 행을 함께 드래그할 수 있게 합니다. 개별 열의 rowDrag와 행 선택 설정도 준비합니다."},{"path":"/ko/docs/options/rowDragText","title":"rowDragText","description":"드래그 중 표시할 문구를 행 수와 기본 라벨로 구성합니다."},{"path":"/ko/docs/columns/rowDrag","title":"rowDrag","description":"이 열에 행 드래그 핸들을 제공합니다. Grid의 드래그 정책과 함께 사용합니다."},{"path":"/ko/docs/methods/startRowDrag","title":"startRowDrag","description":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."},{"path":"/ko/docs/methods/getRowDragSession","title":"getRowDragSession","description":"현재 행 드래그 세션의 진행 상태를 읽습니다."},{"path":"/ko/docs/methods/registerDropZone","title":"registerDropZone","description":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."},{"path":"/ko/docs/methods/unregisterDropZone","title":"unregisterDropZone","description":"등록한 드롭 영역을 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getDropZones","title":"getDropZones","description":"현재 드롭 영역 등록 상태를 읽습니다."},{"path":"/ko/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다."},{"path":"/ko/docs/events/rowMoved","title":"rowMoved","description":"행 순서가 이동되었을 때 발생합니다. 이동 전후 인덱스와 해당 행을 읽습니다."},{"path":"/ko/docs/events/rowDragEnter","title":"rowDragEnter","description":"행 드래그가 대상 영역에 진입했을 때 발생합니다."},{"path":"/ko/docs/events/rowDragMove","title":"rowDragMove","description":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요."},{"path":"/ko/docs/events/rowDragLeave","title":"rowDragLeave","description":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다."},{"path":"/ko/docs/events/rowDragEnd","title":"rowDragEnd","description":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다."},{"path":"/ko/docs/events/rowDragCancel","title":"rowDragCancel","description":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요."},{"path":"/ko/docs/events/rowsTransferred","title":"rowsTransferred","description":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-drag","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/pagination","id":"pagination","kind":"feature","group":"rows","title":"페이지 단위 탐색","tier":"free","summary":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다.","examples":[{"title":"20개씩 보여 주기","explanation":"표 아래에서 사용자가 페이지 크기를 바꿀 수 있도록 선택지를 제공합니다.","source":"grid.pagination = true;\ngrid.pageSize = 20;\ngrid.pageSizeOptions = [20, 50, 100];","result":"행이 120개라면 20개씩 6페이지로 탐색할 수 있습니다. 선택지를 바꾸면 표시 범위도 다시 계산됩니다."},{"title":"전체 스크롤 목록","explanation":"행이 많고 연속적인 탐색이 중요하다면 페이지를 끄고 가상 스크롤을 활용합니다.","source":"grid.pagination = false;\ngrid.virtualScroll = true;","result":"페이지 번호 대신 Grid 내부 스크롤로 행을 탐색합니다. 내려받는 데이터 양은 원격 행 모델 여부에 달려 있습니다."},{"title":"이동 결과를 다른 UI에 표시","explanation":"페이지 변경 이벤트로 앱의 안내 문구나 분석 로그를 갱신합니다.","source":"grid.addEventListener('paginationChanged', event => console.log(event.detail));","result":"사용자가 바꾼 페이지 정보가 전달됩니다. 전체 개수는 필터와 그룹화 후의 표시 결과 기준인지 함께 확인하세요."}],"featureId":"pagination","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"브라우저에 모든 행이 있는 클라이언트 페이지와 서버에서 한 구간씩 가져오는 조회를 구분하세요. pagination을 켠 것만으로 서버 조회 API가 만들어지지는 않습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 20개씩 보여 주기","blocks":[{"kind":"paragraph","text":"표 아래에서 사용자가 페이지 크기를 바꿀 수 있도록 선택지를 제공합니다."},{"kind":"code","source":"grid.pagination = true;\ngrid.pageSize = 20;\ngrid.pageSizeOptions = [20, 50, 100];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행이 120개라면 20개씩 6페이지로 탐색할 수 있습니다. 선택지를 바꾸면 표시 범위도 다시 계산됩니다."}]},{"id":"example-2","title":"예제 2. 전체 스크롤 목록","blocks":[{"kind":"paragraph","text":"행이 많고 연속적인 탐색이 중요하다면 페이지를 끄고 가상 스크롤을 활용합니다."},{"kind":"code","source":"grid.pagination = false;\ngrid.virtualScroll = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 페이지 번호 대신 Grid 내부 스크롤로 행을 탐색합니다. 내려받는 데이터 양은 원격 행 모델 여부에 달려 있습니다."}]},{"id":"example-3","title":"예제 3. 이동 결과를 다른 UI에 표시","blocks":[{"kind":"paragraph","text":"페이지 변경 이벤트로 앱의 안내 문구나 분석 로그를 갱신합니다."},{"kind":"code","source":"grid.addEventListener('paginationChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자가 바꾼 페이지 정보가 전달됩니다. 전체 개수는 필터와 그룹화 후의 표시 결과 기준인지 함께 확인하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"검색으로 결과가 줄면 기존 페이지가 더 이상 유효하지 않을 수 있습니다. 현재 페이지 번호만 따로 유지하지 말고 Grid가 전달한 상태를 따르세요."},{"kind":"paragraph","text":"그룹 행과 원본 주문 행의 개수가 다를 수 있으므로 페이지 표시를 원본 주문 수와 무조건 비교하지 않습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/pagination","title":"pagination","description":"표를 여러 페이지로 나눠 표시합니다. 서버 데이터 조회 방식 자체를 바꾸는 옵션은 아닙니다."},{"path":"/ko/docs/options/pageSize","title":"pageSize","description":"한 페이지에 표시할 행 수입니다. 그룹 행을 포함하는 표시 행 모델과 원본 데이터 개수를 구분하세요."},{"path":"/ko/docs/options/pageSizeOptions","title":"pageSizeOptions","description":"사용자가 페이지 크기 선택기에서 고를 수 있는 숫자 목록입니다."},{"path":"/ko/docs/events/paginationChanged","title":"paginationChanged","description":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/pagination","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/sorting","id":"sorting","kind":"feature","group":"sort-filter","title":"단일·다중 정렬","tier":"free","summary":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다.","examples":[{"title":"수량이 많은 주문부터","explanation":"수량 열에 내림차순 정렬을 명시적으로 적용합니다.","source":"await grid.sortBy('quantity', 'desc');\nconsole.log(await grid.getSortModel());","result":"quantity 내림차순 모델이 적용됩니다. direction을 생략한 순환 동작과 명시적인 desc 설정을 구분합니다."},{"title":"팀 안에서 수량 비교","explanation":"팀을 우선으로 묶고 같은 팀 안에서 수량을 비교합니다.","source":"grid.multiSort = true;\nawait grid.setSortModel([{ field: 'team', direction: 'asc' }, { field: 'quantity', direction: 'desc' }]);","result":"배열 첫 조건이 우선합니다. 원본 행 ID와 값은 유지되고 표시 위치만 달라집니다."},{"title":"정렬 해제와 사용자 변경 구독","explanation":"원래 순서로 돌아가고 이후 사용자가 헤더를 눌렀을 때 모델을 읽습니다.","source":"await grid.setSortModel([]);\ngrid.addEventListener('sortChanged', event => console.log(event.detail));","result":"빈 모델은 정렬 해제입니다. 여러 조건 중 하나만 제거하려면 sortBy의 null 동작과 전체 모델 교체를 구분합니다."}],"featureId":"sorting","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"숫자를 문자열로 저장하면 기대한 숫자 순서와 다를 수 있습니다. 표시 포맷은 formatter에서 처리하고 정렬 기준은 실제 타입에 맞게 준비하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수량이 많은 주문부터","blocks":[{"kind":"paragraph","text":"수량 열에 내림차순 정렬을 명시적으로 적용합니다."},{"kind":"code","source":"await grid.sortBy('quantity', 'desc');\nconsole.log(await grid.getSortModel());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: quantity 내림차순 모델이 적용됩니다. direction을 생략한 순환 동작과 명시적인 desc 설정을 구분합니다."}]},{"id":"example-2","title":"예제 2. 팀 안에서 수량 비교","blocks":[{"kind":"paragraph","text":"팀을 우선으로 묶고 같은 팀 안에서 수량을 비교합니다."},{"kind":"code","source":"grid.multiSort = true;\nawait grid.setSortModel([{ field: 'team', direction: 'asc' }, { field: 'quantity', direction: 'desc' }]);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 배열 첫 조건이 우선합니다. 원본 행 ID와 값은 유지되고 표시 위치만 달라집니다."}]},{"id":"example-3","title":"예제 3. 정렬 해제와 사용자 변경 구독","blocks":[{"kind":"paragraph","text":"원래 순서로 돌아가고 이후 사용자가 헤더를 눌렀을 때 모델을 읽습니다."},{"kind":"code","source":"await grid.setSortModel([]);\ngrid.addEventListener('sortChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 빈 모델은 정렬 해제입니다. 여러 조건 중 하나만 제거하려면 sortBy의 null 동작과 전체 모델 교체를 구분합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"원격 모델에서는 서버가 같은 정렬 규칙을 적용해야 합니다. 페이지마다 브라우저에서만 정렬하면 페이지 사이의 순서는 틀릴 수 있습니다."},{"kind":"paragraph","text":"여러 값이 같은 경우에도 결과가 안정적이어야 한다면 앱의 데이터 순서나 서버의 보조 키를 관리하세요. 정렬 후 rowIndex로 업무 대상을 저장하지 않습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/multiSort","title":"multiSort","description":"여러 열의 정렬 기준을 함께 사용합니다. 우선순위는 정렬 모델의 순서로 확인합니다."},{"path":"/ko/docs/options/enableMultiSort","title":"enableMultiSort","description":"다중 정렬의 호환 이름입니다. multiSort와 모순되지 않게 설정합니다."},{"path":"/ko/docs/columns/sortable","title":"sortable","description":"이 열을 사용자 정렬 대상으로 허용할지 정합니다."},{"path":"/ko/docs/columns/sort","title":"sort","description":"열의 초기 오름차순·내림차순 정렬 또는 정렬 해제를 지정합니다."},{"path":"/ko/docs/columns/sortIndex","title":"sortIndex","description":"여러 초기 정렬 기준 중 이 열의 우선순위를 지정합니다."},{"path":"/ko/docs/columns/comparator","title":"comparator","description":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다."},{"path":"/ko/docs/methods/sortBy","title":"sortBy","description":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다."},{"path":"/ko/docs/methods/setSortModel","title":"setSortModel","description":"정렬 기준 목록과 우선순위를 한 번에 교체합니다. 빈 배열로 전체 정렬을 해제합니다."},{"path":"/ko/docs/methods/getSortModel","title":"getSortModel","description":"현재 정렬 열·방향·우선순위 목록을 읽습니다."},{"path":"/ko/docs/events/sortChanged","title":"sortChanged","description":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/sorting","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/column-filters","id":"column-filters","kind":"feature","group":"sort-filter","title":"열마다 다른 조건","tier":"free","summary":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다.","examples":[{"title":"제품명과 수량 입력칸","explanation":"열 종류에 맞는 기본 필터를 켭니다.","source":"grid.headerFilterRow = true;\ngrid.columnDefs = [{ field: 'product', headerName: '제품', filter: 'text' },\n  { field: 'quantity', headerName: '수량', filter: 'number' }];","result":"제품명은 텍스트, 수량은 숫자 조건으로 검색합니다. 문자열 100과 숫자 100의 의미가 다르지 않도록 원본 타입을 확인합니다."},{"title":"사용자 필터 보관","explanation":"적용된 모델을 보관했다가 같은 열 정의에서 복원합니다.","source":"const saved = await grid.getFilterModel();\nconst report = await grid.setFilterModel(saved);\nconsole.log(report);","result":"복원은 모델 구조와 열 종류가 맞아야 합니다. 반환 보고서에서 적용되지 않은 항목을 확인하세요."},{"title":"조건 초기화","explanation":"검색 결과가 없을 때 모든 필터 계열을 해제하는 동작입니다.","source":"await grid.setFilterModel(null);\ngrid.addEventListener('filterChanged', event => console.log(event.detail));","result":"null은 전역 필터 모델 해제입니다. 특정 열 하나만 지우려면 setColumnFilterModel 계약을 사용하고 다른 조건을 유지합니다."}],"featureId":"column-filters","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"필터 UI의 작성 중 상태와 실제 적용된 모델을 구분하세요. 사용자 정의 필터처럼 비동기 처리가 있는 경우 setFilterModel의 반환 보고서를 기다려야 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 제품명과 수량 입력칸","blocks":[{"kind":"paragraph","text":"열 종류에 맞는 기본 필터를 켭니다."},{"kind":"code","source":"grid.headerFilterRow = true;\ngrid.columnDefs = [{ field: 'product', headerName: '제품', filter: 'text' },\n  { field: 'quantity', headerName: '수량', filter: 'number' }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 제품명은 텍스트, 수량은 숫자 조건으로 검색합니다. 문자열 100과 숫자 100의 의미가 다르지 않도록 원본 타입을 확인합니다."}]},{"id":"example-2","title":"예제 2. 사용자 필터 보관","blocks":[{"kind":"paragraph","text":"적용된 모델을 보관했다가 같은 열 정의에서 복원합니다."},{"kind":"code","source":"const saved = await grid.getFilterModel();\nconst report = await grid.setFilterModel(saved);\nconsole.log(report);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 복원은 모델 구조와 열 종류가 맞아야 합니다. 반환 보고서에서 적용되지 않은 항목을 확인하세요."}]},{"id":"example-3","title":"예제 3. 조건 초기화","blocks":[{"kind":"paragraph","text":"검색 결과가 없을 때 모든 필터 계열을 해제하는 동작입니다."},{"kind":"code","source":"await grid.setFilterModel(null);\ngrid.addEventListener('filterChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: null은 전역 필터 모델 해제입니다. 특정 열 하나만 지우려면 setColumnFilterModel 계약을 사용하고 다른 조건을 유지합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"빈칸·null·문자열 숫자의 처리 정책을 테스트하세요. 날짜는 시간대와 저장 형식까지 맞아야 같은 날짜 조건이 일관되게 동작합니다."},{"kind":"paragraph","text":"열 필터, 빠른 검색, 외부 필터, 고급 조건이 겹칠 수 있습니다. 결과가 적을 때는 어느 조건이 남아 있는지 각각 읽어보세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/headerFilterRow","title":"headerFilterRow","description":"머리글 아래에서 열별 필터를 조작하는 행을 표시합니다."},{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."},{"path":"/ko/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다."},{"path":"/ko/docs/methods/getFilterModel","title":"getFilterModel","description":"현재 필터 계열을 통합한 상태를 읽습니다."},{"path":"/ko/docs/methods/setFilterModel","title":"setFilterModel","description":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."},{"path":"/ko/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."},{"path":"/ko/docs/methods/getColumnFilterModel","title":"getColumnFilterModel","description":"한 열의 현재 필터 모델을 읽습니다."},{"path":"/ko/docs/methods/setColumnFilterModel","title":"setColumnFilterModel","description":"한 열의 필터 모델을 설정하고 결과를 반환합니다. 전체 필터 상태를 바꾸는 setFilterModel과 구분합니다."},{"path":"/ko/docs/methods/onFilterChanged","title":"onFilterChanged","description":"필터 조건이 변경되었음을 알려 현재 행 필터 결과를 다시 계산하게 합니다."},{"path":"/ko/docs/methods/destroyColumnFilter","title":"destroyColumnFilter","description":"특정 열의 필터 인스턴스를 해제합니다."},{"path":"/ko/docs/methods/recreateColumnFilter","title":"recreateColumnFilter","description":"특정 열의 필터 인스턴스를 다시 생성합니다."},{"path":"/ko/docs/events/filterChanged","title":"filterChanged","description":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다."},{"path":"/ko/docs/events/filterModified","title":"filterModified","description":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/column-filters","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/quick-filter","id":"quick-filter","kind":"feature","group":"sort-filter","title":"모든 열에서 빠르게 찾기","tier":"free","summary":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다.","examples":[{"title":"통합 검색어 전달","explanation":"앱의 검색 입력값을 quickFilterText에 연결합니다.","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';","result":"현재 데이터에서 검색어와 맞는 행만 남습니다. 서버에 아직 없는 데이터까지 찾으려면 원격 요청에 검색어를 전달합니다."},{"title":"여러 단어 조건","explanation":"두 단어를 모두 만족해야 하는 검색과 하나만 만족해도 되는 검색을 비교합니다.","source":"grid.quickFilterMode = 'and';\ngrid.quickFilterText = 'Platform APAC';\n// 둘 중 하나만 맞아도 표시하려면\n// grid.quickFilterMode = 'or';","result":"단어 조합에 따라 결과가 달라집니다. 사용자가 이해할 수 있도록 검색창의 안내에 조건 관계를 표시하세요."},{"title":"입력 빈도와 해제","explanation":"입력할 때마다 무거운 계산이나 서버 요청이 발생하지 않도록 지연을 조절합니다.","source":"grid.quickFilterDebounce = 200;\ngrid.quickFilterText = '';","result":"빈 문자열은 검색어 해제입니다. 정규식 검색을 켜는 앱은 잘못된 패턴과 과도하게 넓은 패턴도 확인해야 합니다."}],"featureId":"quick-filter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"Find는 일치 셀로 이동하고 Quick filter는 일치하지 않는 행을 숨깁니다. 목적에 따라 두 기능을 구분해 제공하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 통합 검색어 전달","blocks":[{"kind":"paragraph","text":"앱의 검색 입력값을 quickFilterText에 연결합니다."},{"kind":"code","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 현재 데이터에서 검색어와 맞는 행만 남습니다. 서버에 아직 없는 데이터까지 찾으려면 원격 요청에 검색어를 전달합니다."}]},{"id":"example-2","title":"예제 2. 여러 단어 조건","blocks":[{"kind":"paragraph","text":"두 단어를 모두 만족해야 하는 검색과 하나만 만족해도 되는 검색을 비교합니다."},{"kind":"code","source":"grid.quickFilterMode = 'and';\ngrid.quickFilterText = 'Platform APAC';\n// 둘 중 하나만 맞아도 표시하려면\n// grid.quickFilterMode = 'or';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 단어 조합에 따라 결과가 달라집니다. 사용자가 이해할 수 있도록 검색창의 안내에 조건 관계를 표시하세요."}]},{"id":"example-3","title":"예제 3. 입력 빈도와 해제","blocks":[{"kind":"paragraph","text":"입력할 때마다 무거운 계산이나 서버 요청이 발생하지 않도록 지연을 조절합니다."},{"kind":"code","source":"grid.quickFilterDebounce = 200;\ngrid.quickFilterText = '';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 빈 문자열은 검색어 해제입니다. 정규식 검색을 켜는 앱은 잘못된 패턴과 과도하게 넓은 패턴도 확인해야 합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"검색 대상에 원본 객체 전체가 무조건 포함된다고 가정하지 마세요. 열 구성과 표시·접근 규칙을 함께 확인합니다."},{"kind":"paragraph","text":"검색어 변경과 서버 응답의 시간차 때문에 이전 결과가 잠시 남을 수 있습니다. 로딩과 결과 없음 안내를 구분하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/quickFilter","title":"quickFilter","description":"표 전체 검색 입력을 표시합니다. 초기 검색어나 외부 입력 연결에는 quickFilterText를 사용합니다."},{"path":"/ko/docs/options/quickFilterText","title":"quickFilterText","description":"빠른 검색에 적용할 문자열입니다. 앱의 외부 검색창에서도 새 문자열을 지정할 수 있습니다."},{"path":"/ko/docs/options/quickFilterPlaceholder","title":"quickFilterPlaceholder","description":"빠른 검색 입력의 안내 문구입니다. 검색할 수 있는 데이터 범위를 구체적으로 설명하세요."},{"path":"/ko/docs/options/quickFilterMode","title":"quickFilterMode","description":"여러 검색어를 모두 만족해야 하는 and 또는 하나라도 만족하면 되는 or로 연결합니다."},{"path":"/ko/docs/options/quickFilterRegex","title":"quickFilterRegex","description":"빠른 검색 문자열을 정규식으로 해석하도록 설정합니다. 일반 텍스트 검색과 입력 의미가 달라집니다."},{"path":"/ko/docs/options/quickFilterDebounce","title":"quickFilterDebounce","description":"빠른 검색 입력 후 필터를 적용하기까지 기다릴 시간입니다. 연속 입력의 처리량과 반응 속도를 조절합니다."},{"path":"/ko/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/quick-filter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/external-filter","id":"external-filter","kind":"feature","group":"sort-filter","title":"업무 조건으로 필터링","tier":"free","summary":"Grid 밖의 업무 조건을 행 판정 함수로 연결합니다. 미완료만 보기, 내 담당 건만 보기처럼 외부 UI에 있는 선택이 표의 결과를 제어할 때 사용합니다.","examples":[{"title":"수량이 큰 주문만 보기","explanation":"100 이상만 보여 주는 업무 스위치를 연결합니다.","source":"let largeOnly = true;\ngrid.externalFilter = {\n  isExternalFilterPresent: () => largeOnly,\n  doesExternalFilterPass: row => Number(row.quantity) >= 100\n};\nawait grid.refreshExternalFilter();","result":"스위치가 켜졌을 때만 판정 함수를 적용합니다. 함수는 원본 행을 수정하지 않고 boolean을 반환해야 합니다."},{"title":"외부 조건 해제","explanation":"같은 필터 객체를 두고 외부 변수만 바꿉니다.","source":"largeOnly = false;\nawait grid.refreshExternalFilter();","result":"외부 필터는 해제되지만 열 필터와 빠른 검색이 있으면 그 조건은 남을 수 있습니다."},{"title":"앱 컨텍스트 변경","explanation":"로그인 사용자가 바뀌면 외부 필터가 읽는 사용자 정보도 바꾸고 새로 계산합니다. 수명주기 인스턴스를 사용하면 refresh와 destroy로 자원을 정리할 수 있습니다.","source":null,"result":"이전 사용자의 조건이 남지 않습니다. 권한상 볼 수 없는 원본 값은 서버에서도 내려주지 않아야 합니다."}],"featureId":"external-filter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"조건을 가진 외부 변수가 바뀌어도 Grid가 자동으로 알 수 없으므로 refreshExternalFilter로 다시 계산하게 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수량이 큰 주문만 보기","blocks":[{"kind":"paragraph","text":"100 이상만 보여 주는 업무 스위치를 연결합니다."},{"kind":"code","source":"let largeOnly = true;\ngrid.externalFilter = {\n  isExternalFilterPresent: () => largeOnly,\n  doesExternalFilterPass: row => Number(row.quantity) >= 100\n};\nawait grid.refreshExternalFilter();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 스위치가 켜졌을 때만 판정 함수를 적용합니다. 함수는 원본 행을 수정하지 않고 boolean을 반환해야 합니다."}]},{"id":"example-2","title":"예제 2. 외부 조건 해제","blocks":[{"kind":"paragraph","text":"같은 필터 객체를 두고 외부 변수만 바꿉니다."},{"kind":"code","source":"largeOnly = false;\nawait grid.refreshExternalFilter();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 외부 필터는 해제되지만 열 필터와 빠른 검색이 있으면 그 조건은 남을 수 있습니다."}]},{"id":"example-3","title":"예제 3. 앱 컨텍스트 변경","blocks":[{"kind":"paragraph","text":"로그인 사용자가 바뀌면 외부 필터가 읽는 사용자 정보도 바꾸고 새로 계산합니다. 수명주기 인스턴스를 사용하면 refresh와 destroy로 자원을 정리할 수 있습니다."},{"kind":"paragraph","text":"결과 확인: 이전 사용자의 조건이 남지 않습니다. 권한상 볼 수 없는 원본 값은 서버에서도 내려주지 않아야 합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"판정 함수 안에서 비동기 네트워크 응답을 boolean처럼 반환하지 마세요. 필요한 정보를 미리 준비한 뒤 필터를 다시 계산합니다."},{"kind":"paragraph","text":"서버 전체 검색이 필요한 조건은 서버에도 전달해야 합니다. 외부 필터는 클라이언트에 로드된 행만으로 전체 데이터의 결과를 만들 수 없습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/externalFilter","title":"externalFilter","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."},{"path":"/ko/docs/methods/refreshExternalFilter","title":"refreshExternalFilter","description":"외부 필터의 갱신 수명 주기를 실행하고 성공 여부를 반환합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/external-filter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/set-filter","id":"set-filter","kind":"feature","group":"sort-filter","title":"목록에서 값 선택","tier":"pro","summary":"지역·상태처럼 반복되는 고유 값에서 포함할 항목을 고르게 하는 필터입니다. 이름 일부를 입력하는 Text filter보다 가능한 선택지를 한눈에 보여 주기 좋습니다.","examples":[{"title":"지역 선택 목록","explanation":"지역 열을 Set filter로 선언하고 필터 UI를 표시합니다.","source":"grid.headerFilterRow = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'region' ? { ...col, filter: 'set' } : col);","result":"지역별 값을 선택할 수 있습니다. 빈 값과 문자열 공백도 같은 값으로 취급할지 확인하세요."},{"title":"즐겨 쓰는 선택 복원","explanation":"사용자가 APAC과 EMEA를 선택한 모델을 보관했다가 복원합니다.","source":"const saved = await grid.getFilterModel();\nconsole.log(saved);\nawait grid.setFilterModel(saved);","result":"다시 같은 열과 데이터 구성을 준비하면 선택 조건을 복원할 수 있습니다. 전체 선택과 아무것도 선택하지 않음은 의미가 다를 수 있습니다."},{"title":"목록 값이 바뀌는 데이터","explanation":"새 지역이 추가되거나 기존 지역이 없어지면 저장된 선택 조건과 현재 값 목록의 교집합을 확인합니다. 없는 값을 선택한 모델 때문에 결과가 비어 있는지 살펴봅니다.","source":null,"result":"사용자가 왜 결과를 못 보는지 설명할 수 있습니다. 데이터 갱신 후 선택 상태를 자동 해제할지 유지할지도 앱에서 일관되게 정하세요."}],"featureId":"set-filter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"필터의 고유 값 목록과 필터가 적용될 전체 데이터 범위는 별개입니다. 원격 데이터에서는 로드되지 않은 값까지 목록에 포함할지 데이터 공급 설계에서 정해야 합니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 지역 선택 목록","blocks":[{"kind":"paragraph","text":"지역 열을 Set filter로 선언하고 필터 UI를 표시합니다."},{"kind":"code","source":"grid.headerFilterRow = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'region' ? { ...col, filter: 'set' } : col);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지역별 값을 선택할 수 있습니다. 빈 값과 문자열 공백도 같은 값으로 취급할지 확인하세요."}]},{"id":"example-2","title":"예제 2. 즐겨 쓰는 선택 복원","blocks":[{"kind":"paragraph","text":"사용자가 APAC과 EMEA를 선택한 모델을 보관했다가 복원합니다."},{"kind":"code","source":"const saved = await grid.getFilterModel();\nconsole.log(saved);\nawait grid.setFilterModel(saved);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 다시 같은 열과 데이터 구성을 준비하면 선택 조건을 복원할 수 있습니다. 전체 선택과 아무것도 선택하지 않음은 의미가 다를 수 있습니다."}]},{"id":"example-3","title":"예제 3. 목록 값이 바뀌는 데이터","blocks":[{"kind":"paragraph","text":"새 지역이 추가되거나 기존 지역이 없어지면 저장된 선택 조건과 현재 값 목록의 교집합을 확인합니다. 없는 값을 선택한 모델 때문에 결과가 비어 있는지 살펴봅니다."},{"kind":"paragraph","text":"결과 확인: 사용자가 왜 결과를 못 보는지 설명할 수 있습니다. 데이터 갱신 후 선택 상태를 자동 해제할지 유지할지도 앱에서 일관되게 정하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"Set filter와 rowSelection의 체크박스는 별개입니다. 필터 체크는 표시 대상을 고르고 행 체크는 업무 처리 대상을 고릅니다."},{"kind":"paragraph","text":"서버 필터는 클라이언트의 조건을 서버가 같은 문자열·빈 값 규칙으로 해석해야 결과 수가 일치합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/set-filter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/multi-filter","id":"multi-filter","kind":"feature","group":"sort-filter","title":"여러 필터 조합","tier":"pro","summary":"한 열 안에 텍스트 검색과 값 목록 같은 여러 필터를 함께 구성합니다. 서로 다른 열에 각각 필터를 켜는 방식과 다릅니다.","examples":[{"title":"이름 검색과 허용 목록 결합","explanation":"제품 열에 이름 일부를 입력하는 조건과 상품 목록 중 선택하는 조건을 함께 둡니다. ColumnFilterDecl의 multi 선언과 parts 구조를 확인해 구성합니다.","source":null,"result":"Sensor를 포함하면서 선택한 상품에 속하는 행을 찾을 수 있습니다. 하나의 조건을 해제해도 다른 하위 조건은 남습니다."},{"title":"필터 모델 확인과 재사용","explanation":"사용자가 UI에서 만든 복합 조건을 직접 읽어 구조를 확인한 뒤 저장합니다.","source":"const model = await grid.getFilterModel();\nconsole.log(model);\nconst report = await grid.setFilterModel(model);\nconsole.log(report);","result":"유효한 같은 구성의 모델이 재적용됩니다. 입력 모델을 임의 문자열로 조립하지 말고 타입 계약을 따라 다루세요."},{"title":"점진적으로 조건 진단","explanation":"조건이 예상보다 좁아졌다면 각 하위 필터를 하나씩 지우고 결과 수를 비교합니다. 전체 초기화는 모든 필터 계열을 해제하는 setFilterModel(null)과 구분합니다.","source":null,"result":"어느 조건이 행을 제외했는지 찾을 수 있습니다. 저장 모델과 실제 적용 모델도 비교해 보세요."}],"featureId":"multi-filter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"하위 필터의 선언 순서와 저장 모델의 구조를 함께 관리하세요. 열 정의를 바꾼 뒤 예전 모델을 그대로 복원하면 일부 조건이 맞지 않을 수 있습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 이름 검색과 허용 목록 결합","blocks":[{"kind":"paragraph","text":"제품 열에 이름 일부를 입력하는 조건과 상품 목록 중 선택하는 조건을 함께 둡니다. ColumnFilterDecl의 multi 선언과 parts 구조를 확인해 구성합니다."},{"kind":"paragraph","text":"결과 확인: Sensor를 포함하면서 선택한 상품에 속하는 행을 찾을 수 있습니다. 하나의 조건을 해제해도 다른 하위 조건은 남습니다."}]},{"id":"example-2","title":"예제 2. 필터 모델 확인과 재사용","blocks":[{"kind":"paragraph","text":"사용자가 UI에서 만든 복합 조건을 직접 읽어 구조를 확인한 뒤 저장합니다."},{"kind":"code","source":"const model = await grid.getFilterModel();\nconsole.log(model);\nconst report = await grid.setFilterModel(model);\nconsole.log(report);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 유효한 같은 구성의 모델이 재적용됩니다. 입력 모델을 임의 문자열로 조립하지 말고 타입 계약을 따라 다루세요."}]},{"id":"example-3","title":"예제 3. 점진적으로 조건 진단","blocks":[{"kind":"paragraph","text":"조건이 예상보다 좁아졌다면 각 하위 필터를 하나씩 지우고 결과 수를 비교합니다. 전체 초기화는 모든 필터 계열을 해제하는 setFilterModel(null)과 구분합니다."},{"kind":"paragraph","text":"결과 확인: 어느 조건이 행을 제외했는지 찾을 수 있습니다. 저장 모델과 실제 적용 모델도 비교해 보세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"하위 필터의 AND/OR 관계와 고급 조건 트리의 AND/OR를 혼동하지 마세요. 실제 허용되는 조합은 해당 필터 타입을 따릅니다."},{"kind":"paragraph","text":"한 열에 너무 많은 조건을 숨겨 놓으면 사용자가 현재 결과를 이해하기 어렵습니다. 활성 조건을 요약해서 보여 주세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/multi-filter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/advanced-filter","id":"advanced-filter","kind":"feature","group":"sort-filter","title":"조건 트리","tier":"pro","summary":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다.","examples":[{"title":"조건 작성 도구 제공","explanation":"코드를 직접 입력하지 않아도 사용자가 열과 비교 연산을 고를 수 있도록 도구를 켭니다.","source":"grid.conditionBuilder = true;","result":"조건 빌더가 나타납니다. 일반 열 필터·빠른 검색도 함께 적용될 수 있으므로 현재 활성 조건을 확인하세요."},{"title":"조건 저장과 재적용","explanation":"사용자가 만든 조건 트리를 읽어 같은 구조로 복원합니다.","source":"const condition = await grid.getConditionFilter();\nconsole.log(condition);\nawait grid.setConditionFilter(condition);","result":"AND·OR의 괄호 구조까지 유지합니다. (A AND B) OR C와 A AND (B OR C)는 다른 결과를 만듭니다."},{"title":"고급 조건만 해제","explanation":"전체 필터를 없애지 않고 고급 조건 트리만 지웁니다.","source":"await grid.setConditionFilter(null);\ngrid.addEventListener('conditionFilterChanged', event => console.log(event.detail));","result":"고급 조건이 해제되지만 다른 검색 조건은 남아 있을 수 있습니다. 결과 없음 상태에서 남은 조건을 함께 보여 주세요."}],"featureId":"advanced-filter","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"조건 트리는 UI 입력값과 다른 구조입니다. ConditionGroup은 op와 children을 가지고 말단 조건은 종류에 맞는 필터 규칙을 가집니다. 잘못된 모델은 적용되지 않을 수 있습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 조건 작성 도구 제공","blocks":[{"kind":"paragraph","text":"코드를 직접 입력하지 않아도 사용자가 열과 비교 연산을 고를 수 있도록 도구를 켭니다."},{"kind":"code","source":"grid.conditionBuilder = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 조건 빌더가 나타납니다. 일반 열 필터·빠른 검색도 함께 적용될 수 있으므로 현재 활성 조건을 확인하세요."}]},{"id":"example-2","title":"예제 2. 조건 저장과 재적용","blocks":[{"kind":"paragraph","text":"사용자가 만든 조건 트리를 읽어 같은 구조로 복원합니다."},{"kind":"code","source":"const condition = await grid.getConditionFilter();\nconsole.log(condition);\nawait grid.setConditionFilter(condition);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: AND·OR의 괄호 구조까지 유지합니다. (A AND B) OR C와 A AND (B OR C)는 다른 결과를 만듭니다."}]},{"id":"example-3","title":"예제 3. 고급 조건만 해제","blocks":[{"kind":"paragraph","text":"전체 필터를 없애지 않고 고급 조건 트리만 지웁니다."},{"kind":"code","source":"await grid.setConditionFilter(null);\ngrid.addEventListener('conditionFilterChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 고급 조건이 해제되지만 다른 검색 조건은 남아 있을 수 있습니다. 결과 없음 상태에서 남은 조건을 함께 보여 주세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"서버 조회에서는 조건 트리를 서버가 같은 의미로 해석해야 합니다. 클라이언트 콜백을 서버에 직렬화해서 전달하는 방식은 사용할 수 없습니다."},{"kind":"paragraph","text":"조건을 저장할 때 사용자에게 읽을 수 있는 이름을 붙이면 재사용하기 쉽습니다. 저장된 조건이 삭제된 열을 참조하는 경우 복원 결과를 검사하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/conditionBuilder","title":"conditionBuilder","description":"여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다."},{"path":"/ko/docs/methods/setConditionFilter","title":"setConditionFilter","description":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다."},{"path":"/ko/docs/methods/getConditionFilter","title":"getConditionFilter","description":"현재 고급 조건 트리 또는 null을 읽습니다."},{"path":"/ko/docs/methods/setConditionPresets","title":"setConditionPresets","description":"이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다."},{"path":"/ko/docs/methods/getConditionPresets","title":"getConditionPresets","description":"저장된 고급 조건 프리셋 목록을 읽습니다."},{"path":"/ko/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다."},{"path":"/ko/docs/events/conditionPresetsChanged","title":"conditionPresetsChanged","description":"고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/advanced-filter","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/find","id":"find","kind":"feature","group":"sort-filter","title":"셀 내용 찾기","tier":"pro","summary":"Find는 목록을 줄이지 않고 일치하는 셀을 강조하며 다음·이전 결과로 이동합니다. 검색 결과 주변의 다른 행을 계속 읽어야 하는 업무에 적합합니다.","examples":[{"title":"찾기 도구 켜기","explanation":"Grid 안에 찾기 입력과 이동 도구를 제공합니다.","source":"grid.find = true;","result":"Atlas를 입력하면 일치 셀을 따라 이동하면서 주변 행을 유지합니다. 빠른 검색과 달리 전체 목록이 필터링되는 동작은 아닙니다."},{"title":"필터 결과 안에서 찾기","explanation":"담당 팀을 먼저 필터링한 뒤 찾기를 이용해 특정 제품의 위치를 확인합니다.","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';\ngrid.find = true;","result":"필터가 데이터 범위를 좁히고 Find가 그 안의 위치 탐색을 돕습니다. 두 입력창의 목적을 라벨로 구분하세요."},{"title":"접근 제한 열 검사","explanation":"앱에서 민감한 열을 숨기거나 canReadCell 정책을 적용한 뒤 그 값을 검색해 봅니다. 결과의 강조·개수·툴팁이 숨긴 값을 드러내지 않는지 확인합니다.","source":null,"result":"사용자가 읽을 수 있는 값의 범위 안에서만 찾기가 동작해야 합니다. 원격에서 미로드된 행은 서버 검색을 별도로 제공합니다."}],"featureId":"find","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"검색 대상은 로드된 행과 읽을 수 있는 표시 열입니다. 숨긴 열이나 서버에만 있는 데이터까지 모두 찾는 전역 검색과 구분하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 찾기 도구 켜기","blocks":[{"kind":"paragraph","text":"Grid 안에 찾기 입력과 이동 도구를 제공합니다."},{"kind":"code","source":"grid.find = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: Atlas를 입력하면 일치 셀을 따라 이동하면서 주변 행을 유지합니다. 빠른 검색과 달리 전체 목록이 필터링되는 동작은 아닙니다."}]},{"id":"example-2","title":"예제 2. 필터 결과 안에서 찾기","blocks":[{"kind":"paragraph","text":"담당 팀을 먼저 필터링한 뒤 찾기를 이용해 특정 제품의 위치를 확인합니다."},{"kind":"code","source":"grid.quickFilter = true;\ngrid.quickFilterText = 'Platform';\ngrid.find = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 필터가 데이터 범위를 좁히고 Find가 그 안의 위치 탐색을 돕습니다. 두 입력창의 목적을 라벨로 구분하세요."}]},{"id":"example-3","title":"예제 3. 접근 제한 열 검사","blocks":[{"kind":"paragraph","text":"앱에서 민감한 열을 숨기거나 canReadCell 정책을 적용한 뒤 그 값을 검색해 봅니다. 결과의 강조·개수·툴팁이 숨긴 값을 드러내지 않는지 확인합니다."},{"kind":"paragraph","text":"결과 확인: 사용자가 읽을 수 있는 값의 범위 안에서만 찾기가 동작해야 합니다. 원격에서 미로드된 행은 서버 검색을 별도로 제공합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"찾기 결과가 없다는 것은 전체 데이터에 값이 없다는 뜻이 아닐 수 있습니다. 로드 범위와 필터 상태를 안내하세요."},{"kind":"paragraph","text":"강조 색만으로 결과를 구분하지 말고 키보드 포커스와 이전·다음 이동도 사용할 수 있어야 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/find","title":"find","description":"로드된 읽기 가능한 셀에서 일치 위치를 찾고 이동하는 찾기 기능을 제공합니다. 서버 전체 검색과는 다릅니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/find","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-selection","id":"row-selection","kind":"feature","group":"selection","title":"행 단위 선택","tier":"free","summary":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다.","examples":[{"title":"여러 주문 체크","explanation":"체크박스로 여러 주문을 동시에 선택하도록 구성합니다.","source":"grid.rowSelection = 'multi';\ngrid.selectionCheckbox = true;\nawait grid.selectRows(['ORD-0001', 'ORD-0003']);","result":"두 주문이 선택됩니다. 헤더 체크박스가 적용되는 표시 범위와 서버 전체 선택을 구분하세요."},{"title":"일괄 작업 대상 읽기","explanation":"선택된 ID를 읽어 앱의 확인 화면에 전달합니다.","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","result":"정렬 후에도 같은 ID의 주문을 업무 대상으로 식별합니다. 선택이 비어 있으면 처리 버튼을 비활성화하는 식으로 앱 UI를 연결합니다."},{"title":"선택 변화에 반응","explanation":"체크할 때마다 선택 개수와 상세 패널을 갱신합니다.","source":"grid.addEventListener('selectionChanged', event => console.log(event.detail));\n// 선택 해제\nawait grid.selectRows([]);","result":"체크 해제 후 결과가 비는지 확인합니다. 서버에 없는 ID 또는 삭제된 주문을 계속 처리 대상으로 보관하지 마세요."}],"featureId":"row-selection","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"선택 결과는 표시 순서가 아닌 ID 목록으로 저장합니다. 선택하는 것 자체가 주문 삭제나 서버 처리를 실행하지는 않습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 여러 주문 체크","blocks":[{"kind":"paragraph","text":"체크박스로 여러 주문을 동시에 선택하도록 구성합니다."},{"kind":"code","source":"grid.rowSelection = 'multi';\ngrid.selectionCheckbox = true;\nawait grid.selectRows(['ORD-0001', 'ORD-0003']);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 두 주문이 선택됩니다. 헤더 체크박스가 적용되는 표시 범위와 서버 전체 선택을 구분하세요."}]},{"id":"example-2","title":"예제 2. 일괄 작업 대상 읽기","blocks":[{"kind":"paragraph","text":"선택된 ID를 읽어 앱의 확인 화면에 전달합니다."},{"kind":"code","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 정렬 후에도 같은 ID의 주문을 업무 대상으로 식별합니다. 선택이 비어 있으면 처리 버튼을 비활성화하는 식으로 앱 UI를 연결합니다."}]},{"id":"example-3","title":"예제 3. 선택 변화에 반응","blocks":[{"kind":"paragraph","text":"체크할 때마다 선택 개수와 상세 패널을 갱신합니다."},{"kind":"code","source":"grid.addEventListener('selectionChanged', event => console.log(event.detail));\n// 선택 해제\nawait grid.selectRows([]);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 체크 해제 후 결과가 비는지 확인합니다. 서버에 없는 ID 또는 삭제된 주문을 계속 처리 대상으로 보관하지 마세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"현재 로드된 행 선택만으로 서버 전체 데이터 선택을 표현할 수는 없습니다. 서버 행 모델의 선택 상태 API를 사용해야 하는 경우를 구분합니다."},{"kind":"paragraph","text":"읽기 권한과 선택 가능 상태는 같은 정책이 아닙니다. 선택된 ID로 업무 요청을 보낼 때 서버에서 다시 권한을 검사하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowSelection","title":"rowSelection","description":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다."},{"path":"/ko/docs/options/getRowId","title":"getRowId","description":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."},{"path":"/ko/docs/options/selectionCheckbox","title":"selectionCheckbox","description":"행 선택을 위한 체크박스를 표시합니다."},{"path":"/ko/docs/options/showSelectionCheckbox","title":"showSelectionCheckbox","description":"행 선택 체크박스를 설정하는 호환 이름입니다. selectionCheckbox와 함께 사용할 때 충돌을 피하세요."},{"path":"/ko/docs/options/shiftClickAdditive","title":"shiftClickAdditive","description":"Shift 클릭으로 범위를 선택할 때 기존 선택을 유지해 추가할지 정합니다."},{"path":"/ko/docs/methods/selectRows","title":"selectRows","description":"지정한 행 ID의 선택 상태를 설정합니다. 현재 표시 인덱스가 아닌 안정적인 ID를 사용합니다."},{"path":"/ko/docs/methods/getSelectedRowIds","title":"getSelectedRowIds","description":"현재 선택한 행 ID 목록을 읽습니다. 서버 전체 선택은 전용 서버 선택 상태 API를 사용합니다."},{"path":"/ko/docs/events/selectionChanged","title":"selectionChanged","description":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-selection","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/range-selection","id":"range-selection","kind":"feature","group":"selection","title":"셀 범위 선택","tier":"pro","summary":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다.","examples":[{"title":"프로그램에서 범위 선택","explanation":"현재 보이는 첫 두 행과 첫 두 열을 선택하는 예입니다.","source":"grid.rangeSelection = true;\nconsole.log(await grid.setCanonicalRanges([{ anchorRow: 0, anchorCol: 0, focusRow: 1, focusCol: 1 }]));","result":"지정한 직사각형에 선택 표시가 생깁니다. 실행할 업무에 맞는 열이 실제 그 위치에 있는지 확인하세요."},{"title":"현재 범위 읽기","explanation":"사용자가 드래그한 뒤 정규화된 범위와 기존 범위를 비교해 읽습니다.","source":"console.log(await grid.getCanonicalRanges());\nconsole.log(await grid.getCellRanges());","result":"앵커와 끝점의 방향이 달라도 범위 의미를 해석할 수 있습니다. 사용하는 API의 좌표와 ID 계약을 따르세요."},{"title":"작업 후 범위 초기화","explanation":"선택 범위가 더 이상 유효하지 않은 데이터셋으로 전환할 때 지웁니다.","source":"await grid.clearCellRanges();\ngrid.addEventListener('rangeSelectionChanged', event => console.log(event.detail));","result":"이전 주문의 범위가 새 데이터의 편집 대상으로 남지 않습니다. 행 체크박스 선택은 별도의 상태입니다."}],"featureId":"range-selection","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"범위 API의 행·열 인덱스는 표시 좌표입니다. 정렬이나 열 숨김 후 좌표가 같은 데이터를 가리킨다고 가정하지 마세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 프로그램에서 범위 선택","blocks":[{"kind":"paragraph","text":"현재 보이는 첫 두 행과 첫 두 열을 선택하는 예입니다."},{"kind":"code","source":"grid.rangeSelection = true;\nconsole.log(await grid.setCanonicalRanges([{ anchorRow: 0, anchorCol: 0, focusRow: 1, focusCol: 1 }]));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지정한 직사각형에 선택 표시가 생깁니다. 실행할 업무에 맞는 열이 실제 그 위치에 있는지 확인하세요."}]},{"id":"example-2","title":"예제 2. 현재 범위 읽기","blocks":[{"kind":"paragraph","text":"사용자가 드래그한 뒤 정규화된 범위와 기존 범위를 비교해 읽습니다."},{"kind":"code","source":"console.log(await grid.getCanonicalRanges());\nconsole.log(await grid.getCellRanges());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 앵커와 끝점의 방향이 달라도 범위 의미를 해석할 수 있습니다. 사용하는 API의 좌표와 ID 계약을 따르세요."}]},{"id":"example-3","title":"예제 3. 작업 후 범위 초기화","blocks":[{"kind":"paragraph","text":"선택 범위가 더 이상 유효하지 않은 데이터셋으로 전환할 때 지웁니다."},{"kind":"code","source":"await grid.clearCellRanges();\ngrid.addEventListener('rangeSelectionChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이전 주문의 범위가 새 데이터의 편집 대상으로 남지 않습니다. 행 체크박스 선택은 별도의 상태입니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"병합 셀·그룹 행·고정 행이 포함된 범위는 일반 데이터 셀과 적용 규칙이 다를 수 있습니다. 결과 보고서에서 제외된 대상을 확인하세요."},{"kind":"paragraph","text":"상태 저장 후 데이터 순서가 바뀌면 표시 좌표만 저장한 범위는 잘못된 대상을 가리킬 수 있습니다. 복원 보고서를 확인합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rangeSelection","title":"rangeSelection","description":"셀 사각 범위를 선택할 수 있게 합니다. 행 선택과 독립적이며 복사·채우기·차트 연동의 입력이 됩니다."},{"path":"/ko/docs/methods/getCellRanges","title":"getCellRanges","description":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요."},{"path":"/ko/docs/methods/clearCellRanges","title":"clearCellRanges","description":"셀 선택 범위를 모두 지웁니다. 행 선택은 별도 상태입니다."},{"path":"/ko/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다."},{"path":"/ko/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."},{"path":"/ko/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/range-selection","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/fill-handle","id":"fill-handle","kind":"feature","group":"selection","title":"값 채우기","tier":"pro","summary":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다.","examples":[{"title":"사용자 채우기 활성화","explanation":"범위 선택과 편집 가능한 수량 열에 채우기 핸들을 제공합니다.","source":"grid.rangeSelection = true;\ngrid.enableFillHandle = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'quantity' ? { ...col, editable: true } : col);","result":"선택 가장자리 손잡이를 드래그해 값을 채울 수 있습니다. 숫자·문자열과 fillHandleMode에 따라 복사·연속값 결과가 달라집니다."},{"title":"수량 반복 입력","explanation":"수량 5인 셀 하나를 기준으로 아래 세 셀까지 채웁니다. 같은 값을 반복하는 동작인지 숫자 규칙 확장인지 결과를 먼저 확인합니다.","source":null,"result":"각 대상 수량과 합계가 함께 바뀌어야 합니다. 잘못 채웠다면 실행 취소로 되돌립니다."},{"title":"금지된 셀이 섞인 범위","explanation":"편집 불가 열 또는 검증을 통과하지 못하는 대상이 섞일 때 처리 결과를 확인합니다.","source":"grid.addEventListener('fillStart', event => console.log('시작', event.detail));\ngrid.addEventListener('fillEnd', event => console.log('종료', event.detail));","result":"시작 이벤트만으로 성공이라 판단하지 않습니다. 종료 보고서와 실제 변경 셀을 보고 취소·제외·거절을 구분합니다."}],"featureId":"fill-handle","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"한 숫자를 아래로 복사하는 경우와 두 숫자의 차이를 따라 연속값을 만드는 경우를 구분해서 사용자에게 보여 주세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 사용자 채우기 활성화","blocks":[{"kind":"paragraph","text":"범위 선택과 편집 가능한 수량 열에 채우기 핸들을 제공합니다."},{"kind":"code","source":"grid.rangeSelection = true;\ngrid.enableFillHandle = true;\ngrid.columnDefs = grid.columnDefs.map(col => col.field === 'quantity' ? { ...col, editable: true } : col);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 선택 가장자리 손잡이를 드래그해 값을 채울 수 있습니다. 숫자·문자열과 fillHandleMode에 따라 복사·연속값 결과가 달라집니다."}]},{"id":"example-2","title":"예제 2. 수량 반복 입력","blocks":[{"kind":"paragraph","text":"수량 5인 셀 하나를 기준으로 아래 세 셀까지 채웁니다. 같은 값을 반복하는 동작인지 숫자 규칙 확장인지 결과를 먼저 확인합니다."},{"kind":"paragraph","text":"결과 확인: 각 대상 수량과 합계가 함께 바뀌어야 합니다. 잘못 채웠다면 실행 취소로 되돌립니다."}]},{"id":"example-3","title":"예제 3. 금지된 셀이 섞인 범위","blocks":[{"kind":"paragraph","text":"편집 불가 열 또는 검증을 통과하지 못하는 대상이 섞일 때 처리 결과를 확인합니다."},{"kind":"code","source":"grid.addEventListener('fillStart', event => console.log('시작', event.detail));\ngrid.addEventListener('fillEnd', event => console.log('종료', event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 시작 이벤트만으로 성공이라 판단하지 않습니다. 종료 보고서와 실제 변경 셀을 보고 취소·제외·거절을 구분합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"그룹 제목·상세 패널·미로드 자리표시자는 안정적인 데이터 행이 아니므로 쓰기 대상이 될 수 없습니다. 전체 범위가 그대로 쓰였다고 가정하지 마세요."},{"kind":"paragraph","text":"자동 채우기가 서버 저장까지 처리하지는 않습니다. 하나의 채우기로 많은 변경 이벤트가 발생할 수 있으므로 저장 요청을 묶는 전략을 정합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/enableFillHandle","title":"enableFillHandle","description":"선택 범위 모서리의 채우기 핸들을 활성화합니다."},{"path":"/ko/docs/options/fillHandleAxes","title":"fillHandleAxes","description":"채우기를 가로·세로·양방향 중 어디로 허용할지 정합니다."},{"path":"/ko/docs/options/fillHandleMode","title":"fillHandleMode","description":"채우기에서 기존 값을 복사할지 연속 패턴으로 확장할지 선택합니다."},{"path":"/ko/docs/methods/fillRange","title":"fillRange","description":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."},{"path":"/ko/docs/events/fillStart","title":"fillStart","description":"범위 채우기가 시작되었을 때 발생합니다."},{"path":"/ko/docs/events/fillEnd","title":"fillEnd","description":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/fill-handle","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/single-cell-copy","id":"single-cell-copy","kind":"feature","group":"selection","title":"셀 복사","tier":"free","summary":"셀 하나의 표시 텍스트를 시스템 클립보드로 복사합니다. 셀 안 편집기의 텍스트를 선택한 상태와 Grid 셀에 포커스가 있는 상태는 서로 다른 복사 대상입니다.","examples":[{"title":"첫 표시 제품 복사","explanation":"사용자의 복사 버튼 클릭에 아래 호출을 연결합니다.","source":"const copied = await grid.copyCellAt(0, 'product');\nconsole.log(copied);","result":"true면 복사 처리 성공입니다. 표가 정렬되었다면 현재 첫 번째 표시 행의 제품이 대상입니다."},{"title":"계산·포맷된 셀 복사","explanation":"금액에 통화 표시를 적용한 뒤 복사한 텍스트를 확인합니다. 복사값과 원본 숫자가 같아야 한다고 가정하지 않습니다.","source":null,"result":"대상 입력창에 붙여 넣었을 때 의도한 표현인지 검토합니다. 기계 처리용 숫자는 원본 데이터 API로 읽는 편이 적합할 수 있습니다."},{"title":"권한과 실패 처리","explanation":"읽기 제한 셀과 일반 셀을 각각 복사해 보고 거절된 동작에 적절한 안내를 표시합니다.","source":"grid.clipboardEscapeFormulae = true;","result":"스프레드시트가 수식으로 해석할 수 있는 문자열의 보호 설정도 함께 검토합니다. 실제 업무 값의 뜻을 바꾸는 처리와 구분하세요."}],"featureId":"single-cell-copy","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"클립보드 접근은 브라우저 환경과 사용자 동작 조건의 영향을 받습니다. 버튼 클릭이나 키보드 입력에서 복사를 요청하고 반환값을 확인하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 첫 표시 제품 복사","blocks":[{"kind":"paragraph","text":"사용자의 복사 버튼 클릭에 아래 호출을 연결합니다."},{"kind":"code","source":"const copied = await grid.copyCellAt(0, 'product');\nconsole.log(copied);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: true면 복사 처리 성공입니다. 표가 정렬되었다면 현재 첫 번째 표시 행의 제품이 대상입니다."}]},{"id":"example-2","title":"예제 2. 계산·포맷된 셀 복사","blocks":[{"kind":"paragraph","text":"금액에 통화 표시를 적용한 뒤 복사한 텍스트를 확인합니다. 복사값과 원본 숫자가 같아야 한다고 가정하지 않습니다."},{"kind":"paragraph","text":"결과 확인: 대상 입력창에 붙여 넣었을 때 의도한 표현인지 검토합니다. 기계 처리용 숫자는 원본 데이터 API로 읽는 편이 적합할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 권한과 실패 처리","blocks":[{"kind":"paragraph","text":"읽기 제한 셀과 일반 셀을 각각 복사해 보고 거절된 동작에 적절한 안내를 표시합니다."},{"kind":"code","source":"grid.clipboardEscapeFormulae = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 스프레드시트가 수식으로 해석할 수 있는 문자열의 보호 설정도 함께 검토합니다. 실제 업무 값의 뜻을 바꾸는 처리와 구분하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"비동기 타이머에서 사용자의 동작과 무관하게 복사를 요청하면 브라우저가 거절할 수 있습니다. 클립보드 권한 오류를 Grid 데이터 오류로 표시하지 마세요."},{"kind":"paragraph","text":"원본 값을 가렸다면 툴팁·복사·내보내기도 같은 접근 정책을 따라야 합니다. 화면 글자만 지우는 방식은 충분하지 않습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/clipboardEscapeFormulae","title":"clipboardEscapeFormulae","description":"클립보드로 나가는 텍스트의 스프레드시트 수식 접두사를 이스케이프합니다."},{"path":"/ko/docs/methods/copyCellAt","title":"copyCellAt","description":"지정한 표시 행과 필드의 값을 복사하고 성공 여부를 반환합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/single-cell-copy","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-copy","id":"row-copy","kind":"feature","group":"selection","title":"행 복사","tier":"free","summary":"한 행의 표시 열을 탭으로 구분해 복사합니다. 스프레드시트에 붙여 넣으면 각 열이 셀로 나뉘므로 한 주문의 여러 값을 옮길 때 유용합니다.","examples":[{"title":"현재 첫 행 복사","explanation":"사용자의 버튼 클릭에 행 복사를 연결합니다.","source":"console.log(await grid.copyRowAt(0));","result":"표시 열의 값이 TSV로 복사됩니다. 숨긴 열은 표시 열 기반 복사에 포함되지 않습니다."},{"title":"간단 보기에서 복사","explanation":"단가 열을 숨긴 뒤 같은 행을 복사합니다.","source":"await grid.hideColumn('price');\n// 사용자 복사 버튼에서 호출\nconsole.log(await grid.copyRowAt(0));","result":"스프레드시트에 붙여 넣었을 때 표시 중인 열 순서와 개수를 비교할 수 있습니다."},{"title":"여러 행과 비교","explanation":"주문 여러 건을 옮겨야 한다면 한 행 복사를 반복하기보다 범위 복사나 CSV 내보내기를 선택합니다.","source":null,"result":"행 하나의 일회성 전달과 파일 기반 일괄 전달을 사용자에게 구분해서 제공합니다."}],"featureId":"row-copy","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"copyRowAt은 현재 표시 위치를 받습니다. 업무 ID로 행을 선택한 앱은 그 ID가 화면에서 어디에 있는지 확인한 뒤 복사해야 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 현재 첫 행 복사","blocks":[{"kind":"paragraph","text":"사용자의 버튼 클릭에 행 복사를 연결합니다."},{"kind":"code","source":"console.log(await grid.copyRowAt(0));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표시 열의 값이 TSV로 복사됩니다. 숨긴 열은 표시 열 기반 복사에 포함되지 않습니다."}]},{"id":"example-2","title":"예제 2. 간단 보기에서 복사","blocks":[{"kind":"paragraph","text":"단가 열을 숨긴 뒤 같은 행을 복사합니다."},{"kind":"code","source":"await grid.hideColumn('price');\n// 사용자 복사 버튼에서 호출\nconsole.log(await grid.copyRowAt(0));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 스프레드시트에 붙여 넣었을 때 표시 중인 열 순서와 개수를 비교할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 여러 행과 비교","blocks":[{"kind":"paragraph","text":"주문 여러 건을 옮겨야 한다면 한 행 복사를 반복하기보다 범위 복사나 CSV 내보내기를 선택합니다."},{"kind":"paragraph","text":"결과 확인: 행 하나의 일회성 전달과 파일 기반 일괄 전달을 사용자에게 구분해서 제공합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"셀 안의 탭·줄바꿈·수식처럼 보이는 텍스트는 붙여넣는 앱에서 다르게 해석될 수 있습니다. 실제 대상 앱으로 확인하세요."},{"kind":"paragraph","text":"선택 체크박스가 있다고 해서 copyRowAt이 선택된 행을 자동 선택하지 않습니다. 인수의 표시 행 위치를 명시해야 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/copyRowAt","title":"copyRowAt","description":"지정한 표시 행을 복사하고 성공 여부를 반환합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-copy","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/range-clipboard","id":"range-clipboard","kind":"feature","group":"selection","title":"범위 복사와 붙여넣기","tier":"pro","summary":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다.","examples":[{"title":"선택 범위 복사","explanation":"범위를 선택한 뒤 사용자 버튼에서 복사합니다.","source":"grid.rangeSelection = true;\nconsole.log(await grid.copyRangeToClipboard());","result":"선택된 셀 배치가 클립보드에 들어갑니다. 범위가 없거나 브라우저가 거절한 경우도 결과로 확인합니다."},{"title":"스프레드시트의 수량 붙여넣기","explanation":"복사한 숫자 두세 개를 수량 열 시작점에 붙여 넣습니다.","source":"// 사용자 붙여넣기 버튼에서 호출\nconsole.log(await grid.pasteFromClipboard());","result":"대상 수량과 계산 열이 갱신됩니다. 형식이 틀리거나 편집 불가인 대상은 모두 같은 방식으로 적용되지 않을 수 있습니다."},{"title":"붙여넣기 후 되돌리기","explanation":"처리 결과를 읽고 잘못된 변경은 실행 취소로 되돌립니다.","source":"grid.addEventListener('clipboardPasted', event => console.log(event.detail));\n// 사용자가 실행 취소를 요청했을 때\nawait grid.undo();","result":"실제로 바뀐 셀과 제외된 셀을 구분합니다. 서버로 이미 저장했다면 서버 되돌리기는 앱에서 따로 처리해야 합니다."}],"featureId":"range-clipboard","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"복사 형식이 같아도 대상 열의 숫자·날짜·선택값 계약에 따라 붙여넣기 결과가 달라질 수 있습니다. 작은 범위부터 확인하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 선택 범위 복사","blocks":[{"kind":"paragraph","text":"범위를 선택한 뒤 사용자 버튼에서 복사합니다."},{"kind":"code","source":"grid.rangeSelection = true;\nconsole.log(await grid.copyRangeToClipboard());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 선택된 셀 배치가 클립보드에 들어갑니다. 범위가 없거나 브라우저가 거절한 경우도 결과로 확인합니다."}]},{"id":"example-2","title":"예제 2. 스프레드시트의 수량 붙여넣기","blocks":[{"kind":"paragraph","text":"복사한 숫자 두세 개를 수량 열 시작점에 붙여 넣습니다."},{"kind":"code","source":"// 사용자 붙여넣기 버튼에서 호출\nconsole.log(await grid.pasteFromClipboard());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 대상 수량과 계산 열이 갱신됩니다. 형식이 틀리거나 편집 불가인 대상은 모두 같은 방식으로 적용되지 않을 수 있습니다."}]},{"id":"example-3","title":"예제 3. 붙여넣기 후 되돌리기","blocks":[{"kind":"paragraph","text":"처리 결과를 읽고 잘못된 변경은 실행 취소로 되돌립니다."},{"kind":"code","source":"grid.addEventListener('clipboardPasted', event => console.log(event.detail));\n// 사용자가 실행 취소를 요청했을 때\nawait grid.undo();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 실제로 바뀐 셀과 제외된 셀을 구분합니다. 서버로 이미 저장했다면 서버 되돌리기는 앱에서 따로 처리해야 합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"병합 셀과 고정 행이 있는 범위는 일반 영역과 다를 수 있습니다. 범위 크기만으로 적용한 행 수를 계산하지 말고 반환 보고서를 사용하세요."},{"kind":"paragraph","text":"보호된 열에 대한 복사·붙여넣기는 UI뿐 아니라 API 경로에서도 동일하게 거절되는지 확인합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/copyRangeToClipboard","title":"copyRangeToClipboard","description":"현재 선택 범위를 클립보드에 복사하고 성공 여부를 반환합니다. 브라우저 권한과 사용자 동작 조건을 확인합니다."},{"path":"/ko/docs/methods/pasteFromClipboard","title":"pasteFromClipboard","description":"클립보드 내용을 현재 대상에 붙여넣습니다. 결과 이벤트에서 적용·건너뛴 셀을 확인합니다."},{"path":"/ko/docs/events/clipboardCopied","title":"clipboardCopied","description":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다."},{"path":"/ko/docs/events/clipboardPasted","title":"clipboardPasted","description":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/range-clipboard","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/cell-editing","id":"cell-editing","kind":"feature","group":"editing","title":"셀과 행 편집","tier":"free","summary":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다.","examples":[{"title":"숫자와 기본 Select 편집","explanation":"수량은 음수가 아닌 숫자, 상태는 정해진 목록으로 입력합니다.","source":"grid.columnDefs = [\n  { field: 'quantity', editable: true, editor: 'number', min: 0, step: 1 },\n  { field: 'status', editable: true, editor: 'select', options: [\n    { value: 'open', label: '진행 중' }, { value: 'done', label: '완료' }\n  ] }\n];","result":"화면 라벨과 저장값을 구분합니다. 완료를 선택하면 원본에는 done이 저장되는 구성입니다."},{"title":"행 단위 확정","explanation":"표시 중인 주문의 편집을 시작한 뒤 수량을 임시로 바꾸고 확정합니다.","source":"const started = await grid.startRowEdit('ORD-0001');\nif (started) {\n  await grid.stageRowEditCell('quantity', 25);\n  console.log(await grid.stopRowEdit('commit'));\n}","result":"행 편집 시작이 거절되면 다음 작업을 진행하지 않습니다. 확정 보고서를 통해 실제 적용 결과를 읽습니다."},{"title":"편집 취소와 결과 구독","explanation":"사용자가 취소하면 미확정 값을 버리고 실제 변경 결과만 저장 처리에 사용합니다.","source":"await grid.stopRowEdit('cancel');\ngrid.addEventListener('cellValueChanged', event => console.log(event.detail));\ngrid.addEventListener('rowValueChanged', event => console.log(event.detail));","result":"셀별 변경과 행 전체 확정 이벤트를 중복 서버 저장으로 처리하지 않도록 앱에서 역할을 정합니다."}],"featureId":"cell-editing","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"숫자·날짜·목록·체크박스 편집기마다 저장값의 타입을 정하세요. 파서는 입력을 값으로 바꾸고 검증은 허용 범위를 검사합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 숫자와 기본 Select 편집","blocks":[{"kind":"paragraph","text":"수량은 음수가 아닌 숫자, 상태는 정해진 목록으로 입력합니다."},{"kind":"code","source":"grid.columnDefs = [\n  { field: 'quantity', editable: true, editor: 'number', min: 0, step: 1 },\n  { field: 'status', editable: true, editor: 'select', options: [\n    { value: 'open', label: '진행 중' }, { value: 'done', label: '완료' }\n  ] }\n];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 화면 라벨과 저장값을 구분합니다. 완료를 선택하면 원본에는 done이 저장되는 구성입니다."}]},{"id":"example-2","title":"예제 2. 행 단위 확정","blocks":[{"kind":"paragraph","text":"표시 중인 주문의 편집을 시작한 뒤 수량을 임시로 바꾸고 확정합니다."},{"kind":"code","source":"const started = await grid.startRowEdit('ORD-0001');\nif (started) {\n  await grid.stageRowEditCell('quantity', 25);\n  console.log(await grid.stopRowEdit('commit'));\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행 편집 시작이 거절되면 다음 작업을 진행하지 않습니다. 확정 보고서를 통해 실제 적용 결과를 읽습니다."}]},{"id":"example-3","title":"예제 3. 편집 취소와 결과 구독","blocks":[{"kind":"paragraph","text":"사용자가 취소하면 미확정 값을 버리고 실제 변경 결과만 저장 처리에 사용합니다."},{"kind":"code","source":"await grid.stopRowEdit('cancel');\ngrid.addEventListener('cellValueChanged', event => console.log(event.detail));\ngrid.addEventListener('rowValueChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 셀별 변경과 행 전체 확정 이벤트를 중복 서버 저장으로 처리하지 않도록 앱에서 역할을 정합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"표시된 그룹 제목·상세 행·미로드 자리표시자는 일반 데이터 행 편집과 다릅니다. 안정적인 ID와 편집 가능한 열이 필요합니다."},{"kind":"paragraph","text":"검증 실패 시 편집 세션이 유지될 수 있습니다. 확정 버튼을 눌렀다는 사실만으로 성공 메시지를 표시하지 마세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/editType","title":"editType","description":"한 셀씩 편집할지 한 행의 여러 셀을 묶어 편집할지 선택합니다."},{"path":"/ko/docs/columns/cellEditor","title":"cellEditor","description":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다."},{"path":"/ko/docs/columns/editable","title":"editable","description":"이 열의 편집을 허용합니다. 행별 권한·검증 정책은 추가로 적용됩니다."},{"path":"/ko/docs/columns/editor","title":"editor","description":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다."},{"path":"/ko/docs/columns/valueParser","title":"valueParser","description":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다."},{"path":"/ko/docs/columns/valueSetter","title":"valueSetter","description":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요."},{"path":"/ko/docs/columns/options","title":"options","description":"선택형 편집기의 값과 표시 라벨 목록입니다. 일부 선택지를 disabled로 막을 수 있습니다."},{"path":"/ko/docs/columns/min","title":"min","description":"숫자·날짜 편집에서 허용하는 최솟값입니다."},{"path":"/ko/docs/columns/max","title":"max","description":"숫자·날짜 편집에서 허용하는 최댓값입니다."},{"path":"/ko/docs/columns/step","title":"step","description":"숫자 입력의 증가·감소 단위입니다."},{"path":"/ko/docs/columns/decimals","title":"decimals","description":"숫자 편집의 소수 자릿수를 정합니다."},{"path":"/ko/docs/columns/nullable","title":"nullable","description":"편집 값으로 null을 허용할지 지정합니다."},{"path":"/ko/docs/columns/allowEmpty","title":"allowEmpty","description":"편집 중 빈 값을 허용할지 지정합니다. 필수 입력 검증과 함께 확인합니다."},{"path":"/ko/docs/columns/storeAs","title":"storeAs","description":"날짜 편집 결과를 Date 객체 또는 ISO 문자열 중 어떤 형태로 저장할지 정합니다."},{"path":"/ko/docs/columns/rows","title":"rows","description":"여러 줄 텍스트 편집기의 기본 표시 줄 수입니다."},{"path":"/ko/docs/columns/maxRows","title":"maxRows","description":"여러 줄 편집기가 늘어날 수 있는 최대 줄 수입니다."},{"path":"/ko/docs/columns/cols","title":"cols","description":"여러 줄 텍스트 편집기의 표시 폭 기준입니다."},{"path":"/ko/docs/columns/maxLength","title":"maxLength","description":"텍스트 편집에 허용할 최대 길이입니다."},{"path":"/ko/docs/methods/startRowEdit","title":"startRowEdit","description":"지정한 행 ID의 전체 행 편집을 시작합니다."},{"path":"/ko/docs/methods/stopRowEdit","title":"stopRowEdit","description":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다."},{"path":"/ko/docs/methods/stageRowEditCell","title":"stageRowEditCell","description":"현재 편집 중인 행의 열에 대기 값을 설정합니다."},{"path":"/ko/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다."},{"path":"/ko/docs/methods/commitActiveEdit","title":"commitActiveEdit","description":"현재 셀 편집을 확정하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/cancelActiveEdit","title":"cancelActiveEdit","description":"현재 셀 편집을 취소하고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."},{"path":"/ko/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다."},{"path":"/ko/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요."},{"path":"/ko/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다."},{"path":"/ko/docs/events/rowValueChanged","title":"rowValueChanged","description":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다."},{"path":"/ko/docs/events/rowEditStart","title":"rowEditStart","description":"전체 행 편집이 시작되었을 때 발생합니다."},{"path":"/ko/docs/events/rowEditStop","title":"rowEditStop","description":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/cell-editing","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/batch-editing","id":"batch-editing","kind":"feature","group":"editing","title":"일괄 편집","tier":"pro","summary":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다.","examples":[{"title":"두 주문 수정 모으기","explanation":"사용자가 저장을 누르기 전까지 변경을 준비합니다.","source":"await grid.startBatchEdit();\nawait grid.stageBatchCell('ORD-0001', 'quantity', 25);\nawait grid.stageBatchCell('ORD-0002', 'quantity', 50);\nconsole.log(await grid.getPendingBatchCells());","result":"임시 변경 목록을 읽을 수 있습니다. 준비 작업 자체를 서버 저장 완료로 표시하지 않습니다."},{"title":"검토 후 확정","explanation":"저장 동작에서 배치 결과를 확인합니다.","source":"console.log(await grid.commitBatchEdit());\nconsole.log(await grid.isBatchEditing());","result":"검증·권한에 따른 적용 보고서를 확인한 뒤 서버 저장을 이어갑니다. 아직 세션이 남았는지도 확인하세요."},{"title":"전체 취소와 내장 도구","explanation":"사용자가 취소하면 배치에 모인 변경을 버립니다. 내장 도구를 표시할 수도 있습니다.","source":"await grid.cancelBatchEdit();\ngrid.batchEditToolbar = true;","result":"미확정 변경이 취소되고 확정 전 값이 유지됩니다. 이전에 확정한 작업까지 지우는 동작은 아닙니다."}],"featureId":"batch-editing","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"배치 편집을 시작한 뒤 stageBatchCell에 행 ID·열 ID·새 값을 전달합니다. 존재하지 않는 대상과 편집 불가 열은 적용되지 않을 수 있습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 두 주문 수정 모으기","blocks":[{"kind":"paragraph","text":"사용자가 저장을 누르기 전까지 변경을 준비합니다."},{"kind":"code","source":"await grid.startBatchEdit();\nawait grid.stageBatchCell('ORD-0001', 'quantity', 25);\nawait grid.stageBatchCell('ORD-0002', 'quantity', 50);\nconsole.log(await grid.getPendingBatchCells());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 임시 변경 목록을 읽을 수 있습니다. 준비 작업 자체를 서버 저장 완료로 표시하지 않습니다."}]},{"id":"example-2","title":"예제 2. 검토 후 확정","blocks":[{"kind":"paragraph","text":"저장 동작에서 배치 결과를 확인합니다."},{"kind":"code","source":"console.log(await grid.commitBatchEdit());\nconsole.log(await grid.isBatchEditing());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 검증·권한에 따른 적용 보고서를 확인한 뒤 서버 저장을 이어갑니다. 아직 세션이 남았는지도 확인하세요."}]},{"id":"example-3","title":"예제 3. 전체 취소와 내장 도구","blocks":[{"kind":"paragraph","text":"사용자가 취소하면 배치에 모인 변경을 버립니다. 내장 도구를 표시할 수도 있습니다."},{"kind":"code","source":"await grid.cancelBatchEdit();\ngrid.batchEditToolbar = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 미확정 변경이 취소되고 확정 전 값이 유지됩니다. 이전에 확정한 작업까지 지우는 동작은 아닙니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"배치 중 서버에서 새 데이터가 도착하면 편집 기준과 충돌할 수 있습니다. 갱신을 잠시 모으거나 충돌 안내를 제공하는 정책이 필요합니다."},{"kind":"paragraph","text":"배치 확정과 서버 트랜잭션은 같은 것이 아닙니다. 서버 저장이 실패하면 사용자에게 재시도·되돌리기 선택을 제공하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/batchEditToolbar","title":"batchEditToolbar","description":"일괄 편집의 시작·확정·취소를 위한 도구를 표시합니다."},{"path":"/ko/docs/methods/startBatchEdit","title":"startBatchEdit","description":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다."},{"path":"/ko/docs/methods/isBatchEditing","title":"isBatchEditing","description":"현재 일괄 편집이 진행 중인지 확인합니다."},{"path":"/ko/docs/methods/stageBatchCell","title":"stageBatchCell","description":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다."},{"path":"/ko/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다."},{"path":"/ko/docs/methods/cancelBatchEdit","title":"cancelBatchEdit","description":"대기 중인 일괄 편집을 취소하고 취소한 항목 수를 반환합니다."},{"path":"/ko/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."},{"path":"/ko/docs/events/batchEditStart","title":"batchEditStart","description":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다."},{"path":"/ko/docs/events/batchEditEnd","title":"batchEditEnd","description":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/batch-editing","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/rich-select","id":"rich-select","kind":"feature","group":"editing","title":"검색 가능한 선택 편집기","tier":"pro","summary":"후보가 많은 열에서 검색으로 목록을 좁혀 선택하는 Pro 편집기입니다. 기본 Select는 짧은 고정 목록에 적합하고 Rich Select는 많은 후보에서 빠르게 찾을 때 유용합니다.","examples":[{"title":"제품 검색형 편집기","explanation":"코드와 이름이 다른 제품 목록을 제공합니다.","source":"grid.columnDefs = [{ field: 'product', editable: true, editor: 'autocomplete', options: [\n  { value: 'P-001', label: 'Atlas Sensor' },\n  { value: 'P-002', label: 'Beacon Lite' },\n  { value: 'P-003', label: 'Cipher Pro', disabled: true }\n] }];","result":"이름을 검색해 선택하지만 저장되는 값은 P-001 같은 제품 코드입니다. 데이터와 라벨의 표시 정책을 맞추세요."},{"title":"선택 취소와 기존 값","explanation":"편집을 시작한 뒤 다른 후보를 탐색하고 Escape로 취소합니다. 확정되지 않은 후보가 원본 데이터에 남지 않는지 확인합니다.","source":null,"result":"사용자가 마지막으로 확정한 값이 유지되어야 합니다. 포커스 이동과 Enter 확정도 함께 확인하세요."},{"title":"후보 목록 갱신","explanation":"상품이 품절되어 후보를 비활성화할 때 새 options를 가진 columnDefs를 전달합니다. 기존 주문의 과거 상품 코드를 지울지 표시만 유지할지도 정합니다.","source":null,"result":"신규 입력 가능 상태와 과거 데이터 표시를 따로 다룰 수 있습니다. 후보에서 사라진 값의 라벨도 읽을 수 있게 준비합니다."}],"featureId":"rich-select","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"options의 label은 읽는 이름, value는 실제 저장값입니다. 비활성 후보와 빈 값의 처리도 함께 정하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 제품 검색형 편집기","blocks":[{"kind":"paragraph","text":"코드와 이름이 다른 제품 목록을 제공합니다."},{"kind":"code","source":"grid.columnDefs = [{ field: 'product', editable: true, editor: 'autocomplete', options: [\n  { value: 'P-001', label: 'Atlas Sensor' },\n  { value: 'P-002', label: 'Beacon Lite' },\n  { value: 'P-003', label: 'Cipher Pro', disabled: true }\n] }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이름을 검색해 선택하지만 저장되는 값은 P-001 같은 제품 코드입니다. 데이터와 라벨의 표시 정책을 맞추세요."}]},{"id":"example-2","title":"예제 2. 선택 취소와 기존 값","blocks":[{"kind":"paragraph","text":"편집을 시작한 뒤 다른 후보를 탐색하고 Escape로 취소합니다. 확정되지 않은 후보가 원본 데이터에 남지 않는지 확인합니다."},{"kind":"paragraph","text":"결과 확인: 사용자가 마지막으로 확정한 값이 유지되어야 합니다. 포커스 이동과 Enter 확정도 함께 확인하세요."}]},{"id":"example-3","title":"예제 3. 후보 목록 갱신","blocks":[{"kind":"paragraph","text":"상품이 품절되어 후보를 비활성화할 때 새 options를 가진 columnDefs를 전달합니다. 기존 주문의 과거 상품 코드를 지울지 표시만 유지할지도 정합니다."},{"kind":"paragraph","text":"결과 확인: 신규 입력 가능 상태와 과거 데이터 표시를 따로 다룰 수 있습니다. 후보에서 사라진 값의 라벨도 읽을 수 있게 준비합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"현재 Features의 상태 열은 기본 Select일 수 있습니다. editor: autocomplete 또는 해당 사용자 편집기를 명시해야 검색형 편집기를 사용합니다."},{"kind":"paragraph","text":"사용자가 후보를 입력할 때마다 서버를 조회한다면 취소·늦은 응답·목록 없음 처리를 앱의 편집기 계약에 맞춰 구현하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/cellEditor","title":"cellEditor","description":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다."},{"path":"/ko/docs/columns/editor","title":"editor","description":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/rich-select","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/undo-redo","id":"undo-redo","kind":"feature","group":"editing","title":"편집 이력","tier":"free","summary":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요.","examples":[{"title":"실수로 바꾼 값 되돌리기","explanation":"수량을 편집하고 확정한 뒤 이전 값으로 되돌립니다.","source":"console.log(await grid.getUndoRedoDepth());\nconsole.log(await grid.undo());","result":"직전 기록 작업이 이전 값으로 돌아갑니다. 되돌릴 작업이 없을 때는 버튼을 비활성화합니다."},{"title":"되돌린 작업 다시 적용","explanation":"다시 실행 가능한 이력이 있을 때 호출합니다.","source":"console.log(await grid.redo());","result":"같은 작업이 재적용됩니다. undo 직후 새 편집을 했다면 기존 redo 가능 여부를 다시 읽어야 합니다."},{"title":"업무 대상 전환 시 이력 정리","explanation":"다른 주문 데이터셋을 열기 전에 이전 화면의 이력을 제거하는 정책입니다.","source":"await grid.clearHistory();\ngrid.addEventListener('historyChanged', event => console.log(event.detail));","result":"이전 업무의 변경을 새 데이터에 되돌리지 않도록 합니다. 이것은 데이터 스냅샷 삭제나 서버 기록 삭제가 아닙니다."}],"featureId":"undo-redo","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"새 편집을 수행하면 되돌린 뒤의 다시 실행 경로가 달라질 수 있습니다. 화면 초기화·데이터 교체와 이력 유지 정책도 함께 결정합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 실수로 바꾼 값 되돌리기","blocks":[{"kind":"paragraph","text":"수량을 편집하고 확정한 뒤 이전 값으로 되돌립니다."},{"kind":"code","source":"console.log(await grid.getUndoRedoDepth());\nconsole.log(await grid.undo());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 직전 기록 작업이 이전 값으로 돌아갑니다. 되돌릴 작업이 없을 때는 버튼을 비활성화합니다."}]},{"id":"example-2","title":"예제 2. 되돌린 작업 다시 적용","blocks":[{"kind":"paragraph","text":"다시 실행 가능한 이력이 있을 때 호출합니다."},{"kind":"code","source":"console.log(await grid.redo());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 같은 작업이 재적용됩니다. undo 직후 새 편집을 했다면 기존 redo 가능 여부를 다시 읽어야 합니다."}]},{"id":"example-3","title":"예제 3. 업무 대상 전환 시 이력 정리","blocks":[{"kind":"paragraph","text":"다른 주문 데이터셋을 열기 전에 이전 화면의 이력을 제거하는 정책입니다."},{"kind":"code","source":"await grid.clearHistory();\ngrid.addEventListener('historyChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이전 업무의 변경을 새 데이터에 되돌리지 않도록 합니다. 이것은 데이터 스냅샷 삭제나 서버 기록 삭제가 아닙니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"undo가 브라우저에서 값을 되돌렸다고 서버도 자동으로 돌아가는 것은 아닙니다. 되돌림을 서버에 저장할지 별도의 보상 작업으로 처리할지 정하세요."},{"kind":"paragraph","text":"이력 개수와 실제 버튼 상태를 동기화하고, 배치 편집·채우기처럼 다중 변경을 포함한 작업도 검증하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/undo","title":"undo","description":"이전 편집 이력 한 단계를 되돌리고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/redo","title":"redo","description":"실행 취소한 이력 한 단계를 다시 적용하고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/clearHistory","title":"clearHistory","description":"실행 취소·다시 실행 이력을 비웁니다. 현재 데이터 값을 초기값으로 바꾸지는 않습니다."},{"path":"/ko/docs/methods/getUndoRedoDepth","title":"getUndoRedoDepth","description":"실행 취소와 다시 실행으로 이동할 수 있는 이력 수를 읽습니다."},{"path":"/ko/docs/events/historyChanged","title":"historyChanged","description":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/undo-redo","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/validation-rules","id":"validation-rules","kind":"feature","group":"editing","title":"데이터 검증","summary":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다.","examples":[{"title":"필수 양의 정수 수량","explanation":"빈 값·소수·음수를 각각 제한합니다.","source":"grid.validationRules = [\n  { field: 'quantity', type: 'required', message: '수량을 입력하세요.' },\n  { field: 'quantity', type: 'integer', message: '정수로 입력하세요.' },\n  { field: 'quantity', type: 'min', value: 0, message: '0 이상이어야 합니다.' }\n];\ngrid.invalidEditMode = 'block';","result":"잘못된 입력의 확정을 막습니다. 브라우저 숫자 편집기의 min 제한과 업무 검증은 서로 다른 단계일 수 있습니다."},{"title":"저장 전 오류 요약","explanation":"표 전체 오류 목록을 앱의 검토 영역에 표시합니다.","source":"const errors = await grid.getValidationErrors();\nconsole.log(errors);\nif (errors.length) console.warn('수정할 셀이 남아 있습니다.');","result":"행 ID·열·값·오류 메시지를 읽을 수 있습니다. 눈에 보이는 빨간 표시만으로 전체 데이터의 검증 결과를 판단하지 마세요."},{"title":"실패 입력 추적","explanation":"검증 거절을 안내하고 같은 값이 서버에서도 거절되는지 확인합니다.","source":"grid.addEventListener('cellValidationFailed', event => console.log(event.detail));","result":"어떤 셀의 어떤 입력이 문제였는지 알 수 있습니다. 사용자의 입력을 저장해 오류를 재현할 때 민감한 값의 노출은 피하세요."}],"featureId":"validation-rules","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"빈 값은 required 이외 규칙을 통과할 수 있습니다. 반드시 필요한 수량은 required와 숫자 규칙을 함께 설정하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 필수 양의 정수 수량","blocks":[{"kind":"paragraph","text":"빈 값·소수·음수를 각각 제한합니다."},{"kind":"code","source":"grid.validationRules = [\n  { field: 'quantity', type: 'required', message: '수량을 입력하세요.' },\n  { field: 'quantity', type: 'integer', message: '정수로 입력하세요.' },\n  { field: 'quantity', type: 'min', value: 0, message: '0 이상이어야 합니다.' }\n];\ngrid.invalidEditMode = 'block';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 잘못된 입력의 확정을 막습니다. 브라우저 숫자 편집기의 min 제한과 업무 검증은 서로 다른 단계일 수 있습니다."}]},{"id":"example-2","title":"예제 2. 저장 전 오류 요약","blocks":[{"kind":"paragraph","text":"표 전체 오류 목록을 앱의 검토 영역에 표시합니다."},{"kind":"code","source":"const errors = await grid.getValidationErrors();\nconsole.log(errors);\nif (errors.length) console.warn('수정할 셀이 남아 있습니다.');","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행 ID·열·값·오류 메시지를 읽을 수 있습니다. 눈에 보이는 빨간 표시만으로 전체 데이터의 검증 결과를 판단하지 마세요."}]},{"id":"example-3","title":"예제 3. 실패 입력 추적","blocks":[{"kind":"paragraph","text":"검증 거절을 안내하고 같은 값이 서버에서도 거절되는지 확인합니다."},{"kind":"code","source":"grid.addEventListener('cellValidationFailed', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 어떤 셀의 어떤 입력이 문제였는지 알 수 있습니다. 사용자의 입력을 저장해 오류를 재현할 때 민감한 값의 노출은 피하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"검증 모드를 allow·block·revert 중 어떤 정책으로 쓰는지 명확히 하세요. allow는 오류를 표시하면서 값을 반영하므로 오류 값이 데이터에 남을 수 있습니다."},{"kind":"paragraph","text":"원본 서버 데이터가 이미 잘못된 경우와 사용자가 새로 입력한 오류를 구분하세요. 서버 저장 API에서도 업무 규칙을 검사해야 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/validationRules","title":"validationRules","description":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다."},{"path":"/ko/docs/options/invalidEditMode","title":"invalidEditMode","description":"검증 실패 시 오류를 표시하고 반영하는 allow, 기존 값으로 되돌리는 revert, 확정을 막는 block 중 선택합니다."},{"path":"/ko/docs/methods/getValidationErrors","title":"getValidationErrors","description":"현재 입력 검증 오류의 대상 행·필드·값·메시지를 읽습니다. 저장 안내나 오류 목록에 연결합니다."},{"path":"/ko/docs/events/cellValidationFailed","title":"cellValidationFailed","description":"입력 검증이 실패했을 때 발생합니다. 대상 셀·입력값·메시지를 읽어 수정할 위치를 안내합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/validation-rules","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/cell-notes","id":"cell-notes","kind":"feature","group":"editing","title":"셀 메모","tier":"pro","summary":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다.","examples":[{"title":"독립 메모 저장소 연결","explanation":"서버 연동 어댑터는 load(cell)과 save(cell,text,expectedRevision)를 구현합니다. load는 메모 또는 null, save는 GridNoteSaveResult 계약을 반환해야 합니다.","source":null,"result":"cellNotes를 켜기 전에 어댑터를 지정하고 getRowId를 설정합니다. 서버는 예상 revision이 일치할 때만 원자적으로 저장해 다른 사용자의 수정이 사라지지 않게 합니다."},{"title":"협업 댓글 추가","explanation":"이미 collaborationRoom에 참여한 Grid에서 기존 주문의 셀에 댓글을 남깁니다.","source":"const commentId = await grid.addCellComment('ORD-0001', 'quantity', '수량 확인 부탁드립니다.');\nif (commentId) {\n  await grid.openCellCommentPanel('ORD-0001', 'quantity');\n}","result":"활성 협업 세션이 없으면 댓글 API가 독립 메모 저장소를 대신하지 않습니다. 반환 ID가 있는지 확인하세요."},{"title":"댓글 읽기와 해결 처리","explanation":"협업 댓글 목록의 실제 ID를 사용해 스레드 상태를 바꿉니다.","source":"const comments = await grid.getCellComments('ORD-0001', 'quantity');\nconsole.log(comments);\n// 선택한 실제 commentId를 사용해\n// setCellCommentResolved(rowId, field, commentId, true)를 호출합니다.","result":"메모 삭제·댓글 해결·원본 셀 값 변경은 각각 다른 작업입니다. 읽기 권한이 없는 셀의 메모를 앱에서 따로 노출하지 않도록 처리합니다."}],"featureId":"cell-notes","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"cellNotes는 안정적으로 식별되고 읽기 권한이 있는 셀에 사용하는 Pro 기능입니다. cellNotesAdapter에 영속 저장을 연결해야 하며, 브라우저 내부 저장이나 협업 방으로 자동 대체되지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 독립 메모 저장소 연결","blocks":[{"kind":"paragraph","text":"서버 연동 어댑터는 load(cell)과 save(cell,text,expectedRevision)를 구현합니다. load는 메모 또는 null, save는 GridNoteSaveResult 계약을 반환해야 합니다."},{"kind":"paragraph","text":"결과 확인: cellNotes를 켜기 전에 어댑터를 지정하고 getRowId를 설정합니다. 서버는 예상 revision이 일치할 때만 원자적으로 저장해 다른 사용자의 수정이 사라지지 않게 합니다."}]},{"id":"example-2","title":"예제 2. 협업 댓글 추가","blocks":[{"kind":"paragraph","text":"이미 collaborationRoom에 참여한 Grid에서 기존 주문의 셀에 댓글을 남깁니다."},{"kind":"code","source":"const commentId = await grid.addCellComment('ORD-0001', 'quantity', '수량 확인 부탁드립니다.');\nif (commentId) {\n  await grid.openCellCommentPanel('ORD-0001', 'quantity');\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 활성 협업 세션이 없으면 댓글 API가 독립 메모 저장소를 대신하지 않습니다. 반환 ID가 있는지 확인하세요."}]},{"id":"example-3","title":"예제 3. 댓글 읽기와 해결 처리","blocks":[{"kind":"paragraph","text":"협업 댓글 목록의 실제 ID를 사용해 스레드 상태를 바꿉니다."},{"kind":"code","source":"const comments = await grid.getCellComments('ORD-0001', 'quantity');\nconsole.log(comments);\n// 선택한 실제 commentId를 사용해\n// setCellCommentResolved(rowId, field, commentId, true)를 호출합니다.","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 메모 삭제·댓글 해결·원본 셀 값 변경은 각각 다른 작업입니다. 읽기 권한이 없는 셀의 메모를 앱에서 따로 노출하지 않도록 처리합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"행 인덱스는 정렬·필터 후 바뀔 수 있으므로 메모 저장 키로 사용하지 마세요. 안정적인 rowId와 열 식별자를 사용합니다."},{"kind":"paragraph","text":"저장 충돌을 단순 재시도로 덮어쓰지 마세요. 서버의 최신 revision을 읽고 사용자가 내용을 비교하게 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/cellNotes","title":"cellNotes","description":"안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다."},{"path":"/ko/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다."},{"path":"/ko/docs/methods/openCellCommentPanel","title":"openCellCommentPanel","description":"행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다."},{"path":"/ko/docs/methods/closeCellCommentPanel","title":"closeCellCommentPanel","description":"열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다."},{"path":"/ko/docs/methods/addCellComment","title":"addCellComment","description":"협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다."},{"path":"/ko/docs/methods/getCellComments","title":"getCellComments","description":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다."},{"path":"/ko/docs/methods/setCellCommentResolved","title":"setCellCommentResolved","description":"지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/deleteCellComment","title":"deleteCellComment","description":"지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다."},{"path":"/ko/docs/events/commentMentioned","title":"commentMentioned","description":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/cell-notes","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-grouping","id":"row-grouping","kind":"feature","group":"analysis","title":"그룹과 집계","tier":"pro","summary":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다.","examples":[{"title":"지역별 수량 합계","explanation":"지역을 기준으로 주문을 묶고 수량 열에 합계를 표시합니다.","source":"grid.columnDefs = [\n  { field: 'region', headerName: '지역' },\n  { field: 'quantity', headerName: '수량', aggFunc: 'sum' },\n];\ngrid.groupBy = 'region';","result":"지역 그룹을 접어 요약을 읽고 펼쳐 개별 주문을 확인합니다."},{"title":"지역 안에서 팀별로 분류","explanation":"그룹 패널을 열어 사용자가 기준을 살펴보고 변경하게 합니다.","source":"grid.groupBy = ['region', 'team'];\ngrid.groupPanel = true;\nawait grid.collapseAllRowGroups();","result":"지역 → 팀의 두 단계가 생깁니다. expandAllRowGroups()로 전체 상세 행을 다시 펼칠 수 있습니다."},{"title":"필터와 페이지를 함께 사용","explanation":"먼저 상태 필터로 완료 주문만 남긴 뒤 그룹을 펼쳐 봅니다. 페이지 크기를 작게 바꾸어 그룹 제목도 표시 행 수에 포함되는지 확인합니다.","source":null,"result":"집계 대상과 원본 전체 주문 수를 혼동하지 않도록 화면에 현재 필터 조건을 함께 표시하세요. 그룹 선택 상태는 getGroupCheckStates()의 거절 사유까지 확인합니다."}],"featureId":"row-grouping","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"원본 데이터에는 그룹 행을 직접 추가하지 않습니다. groupBy에 기준 필드를 지정하고 숫자 열의 aggFunc로 합계·평균 등을 구성합니다. 그룹 기준이 여러 개이면 배열의 앞 항목이 바깥 그룹입니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 지역별 수량 합계","blocks":[{"kind":"paragraph","text":"지역을 기준으로 주문을 묶고 수량 열에 합계를 표시합니다."},{"kind":"code","source":"grid.columnDefs = [\n  { field: 'region', headerName: '지역' },\n  { field: 'quantity', headerName: '수량', aggFunc: 'sum' },\n];\ngrid.groupBy = 'region';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지역 그룹을 접어 요약을 읽고 펼쳐 개별 주문을 확인합니다."}]},{"id":"example-2","title":"예제 2. 지역 안에서 팀별로 분류","blocks":[{"kind":"paragraph","text":"그룹 패널을 열어 사용자가 기준을 살펴보고 변경하게 합니다."},{"kind":"code","source":"grid.groupBy = ['region', 'team'];\ngrid.groupPanel = true;\nawait grid.collapseAllRowGroups();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지역 → 팀의 두 단계가 생깁니다. expandAllRowGroups()로 전체 상세 행을 다시 펼칠 수 있습니다."}]},{"id":"example-3","title":"예제 3. 필터와 페이지를 함께 사용","blocks":[{"kind":"paragraph","text":"먼저 상태 필터로 완료 주문만 남긴 뒤 그룹을 펼쳐 봅니다. 페이지 크기를 작게 바꾸어 그룹 제목도 표시 행 수에 포함되는지 확인합니다."},{"kind":"paragraph","text":"결과 확인: 집계 대상과 원본 전체 주문 수를 혼동하지 않도록 화면에 현재 필터 조건을 함께 표시하세요. 그룹 선택 상태는 getGroupCheckStates()의 거절 사유까지 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"다단계 그룹의 키를 표시 라벨을 이어 붙여 만들지 마세요. 이벤트가 제공한 실제 키로 setRowGroupExpanded()를 호출합니다."},{"kind":"paragraph","text":"피벗·트리와 동시에 설정했을 때는 같은 행 목록을 모두 만들 수 없습니다. 원하는 분석 방식을 하나 선택하고 조합 보고서를 확인하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/groupBy","title":"groupBy","description":"같은 값의 행을 그룹으로 묶습니다. 문자열 배열은 앞 항목부터 다단계 그룹을 만듭니다."},{"path":"/ko/docs/options/groupPanel","title":"groupPanel","description":"열을 끌어 넣어 행 그룹 기준을 구성하는 패널을 표시합니다."},{"path":"/ko/docs/columns/aggFunc","title":"aggFunc","description":"행 그룹·분석에서 사용할 기본 또는 등록된 사용자 집계 함수 이름입니다."},{"path":"/ko/docs/methods/registerAggFunc","title":"registerAggFunc","description":"이름으로 사용자 집계 함수를 등록합니다. 같은 이름의 기존 함수를 덮어쓸 수 있으므로 고유한 이름을 사용하세요."},{"path":"/ko/docs/methods/unregisterAggFunc","title":"unregisterAggFunc","description":"등록한 사용자 집계 함수를 제거합니다. 사용 중인 열의 aggFunc 설정도 함께 정리합니다."},{"path":"/ko/docs/methods/getRegisteredAggFuncNames","title":"getRegisteredAggFuncNames","description":"현재 등록된 집계 함수 이름을 확인합니다."},{"path":"/ko/docs/methods/setRowGroupExpanded","title":"setRowGroupExpanded","description":"실제 그룹 키에 해당하는 행 그룹을 펼치거나 접습니다. 없는 그룹이나 이미 같은 상태이면 변경하지 않습니다."},{"path":"/ko/docs/methods/expandAllRowGroups","title":"expandAllRowGroups","description":"현재 행 그룹을 모두 펼칩니다. 실제로 바뀐 그룹마다 토글 이벤트가 발생합니다."},{"path":"/ko/docs/methods/collapseAllRowGroups","title":"collapseAllRowGroups","description":"현재 데이터에서 접을 수 있는 행 그룹을 모두 접습니다."},{"path":"/ko/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다."},{"path":"/ko/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."},{"path":"/ko/docs/events/rowGroupToggled","title":"rowGroupToggled","description":"행 그룹을 펼치거나 접었을 때 발생합니다. 표시 라벨 대신 detail의 실제 key를 재사용합니다."},{"path":"/ko/docs/events/rowGroupChanged","title":"rowGroupChanged","description":"행 그룹 기준이 바뀌었을 때 발생합니다. 기준 필드와 그룹 해제 상태를 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-grouping","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/pivot","id":"pivot","kind":"feature","group":"analysis","title":"피벗 분석","tier":"pro","summary":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다.","examples":[{"title":"팀 × 지역의 수량","explanation":"원본 데이터에 team, region, quantity가 있는 표에 적용합니다.","source":"grid.pivotRowGroupColumns = ['team'];\ngrid.pivotColumns = ['region'];\ngrid.pivotValueColumns = ['quantity'];\ngrid.pivotAggFuncs = { quantity: 'sum' };\ngrid.pivotMode = true;","result":"지역마다 결과 열이 생기고 각 팀의 수량 합계가 채워집니다. 원본 주문 행 자체가 수정되는 것은 아닙니다."},{"title":"소계와 총계 배치","explanation":"여러 단계의 행 축을 사용하면서 중간 합계와 전체 합계의 위치를 정합니다.","source":"grid.pivotRowGroupColumns = ['region', 'team'];\ngrid.pivotSubtotals = 'bottom';\ngrid.pivotGrandTotal = 'top';\ngrid.pivotPanelShow = 'always';","result":"하위 그룹을 펼쳤을 때 소계를 아래에서 읽고, 전체 합계는 위에서 먼저 확인합니다."},{"title":"생성된 결과 열 확인","explanation":"차트나 내보내기를 연결하기 전에 결과 열의 실제 식별자와 현재 조합 상태를 읽습니다.","source":"console.log(await grid.getPivotSecondaryColumns());\nconsole.log(await grid.getPivotCombinationReport());","result":"지역 라벨을 임의로 열 ID로 쓰지 않고 반환된 식별자를 사용합니다. 서버 피벗은 getServerPivotResultColumns()와 별도의 서버 응답 계약을 사용합니다."}],"featureId":"pivot","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"예를 들어 팀은 왼쪽 행, 지역은 위쪽 열, 수량은 합산할 값입니다. 세 축이 모두 준비된 상태에서 pivotMode를 켜고 숫자 필드마다 집계 방식을 선택합니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 팀 × 지역의 수량","blocks":[{"kind":"paragraph","text":"원본 데이터에 team, region, quantity가 있는 표에 적용합니다."},{"kind":"code","source":"grid.pivotRowGroupColumns = ['team'];\ngrid.pivotColumns = ['region'];\ngrid.pivotValueColumns = ['quantity'];\ngrid.pivotAggFuncs = { quantity: 'sum' };\ngrid.pivotMode = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지역마다 결과 열이 생기고 각 팀의 수량 합계가 채워집니다. 원본 주문 행 자체가 수정되는 것은 아닙니다."}]},{"id":"example-2","title":"예제 2. 소계와 총계 배치","blocks":[{"kind":"paragraph","text":"여러 단계의 행 축을 사용하면서 중간 합계와 전체 합계의 위치를 정합니다."},{"kind":"code","source":"grid.pivotRowGroupColumns = ['region', 'team'];\ngrid.pivotSubtotals = 'bottom';\ngrid.pivotGrandTotal = 'top';\ngrid.pivotPanelShow = 'always';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 하위 그룹을 펼쳤을 때 소계를 아래에서 읽고, 전체 합계는 위에서 먼저 확인합니다."}]},{"id":"example-3","title":"예제 3. 생성된 결과 열 확인","blocks":[{"kind":"paragraph","text":"차트나 내보내기를 연결하기 전에 결과 열의 실제 식별자와 현재 조합 상태를 읽습니다."},{"kind":"code","source":"console.log(await grid.getPivotSecondaryColumns());\nconsole.log(await grid.getPivotCombinationReport());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 지역 라벨을 임의로 열 ID로 쓰지 않고 반환된 식별자를 사용합니다. 서버 피벗은 getServerPivotResultColumns()와 별도의 서버 응답 계약을 사용합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"행 그룹·트리·피벗의 우선순위를 추측하지 마세요. 조합 보고서에 표시된 활성 기능과 제한을 먼저 확인합니다."},{"kind":"paragraph","text":"원본 필터가 피벗 집계에 자동으로 같은 방식으로 적용된다고 가정하지 마세요. 현재 집계 대상과 결과를 확인하고 필요하면 피벗에 공급할 데이터를 먼저 준비합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/pivotMode","title":"pivotMode","description":"행 축·열 축·값 축으로 데이터를 교차 집계하는 피벗 표시를 켭니다. 세 축 설정을 함께 준비합니다."},{"path":"/ko/docs/options/pivotRowGroupColumns","title":"pivotRowGroupColumns","description":"피벗 결과의 왼쪽 행 축을 구성하는 필드 목록입니다."},{"path":"/ko/docs/options/pivotColumns","title":"pivotColumns","description":"고유 값이 피벗의 상단 결과 열로 펼쳐질 필드 목록입니다."},{"path":"/ko/docs/options/pivotValueColumns","title":"pivotValueColumns","description":"피벗 각 교차 셀에서 집계할 값 필드 목록입니다."},{"path":"/ko/docs/options/pivotAggFuncs","title":"pivotAggFuncs","description":"값 필드마다 사용할 집계 함수 이름을 지정합니다. 기본 집계와 등록한 사용자 함수를 사용할 수 있습니다."},{"path":"/ko/docs/options/pivotSubtotals","title":"pivotSubtotals","description":"다단계 피벗 소계를 숨기거나 펼친 그룹의 위·아래에 배치합니다."},{"path":"/ko/docs/options/pivotGrandTotal","title":"pivotGrandTotal","description":"피벗 전체 합계를 숨기거나 결과의 맨 위·아래에 배치합니다."},{"path":"/ko/docs/options/pivotPanelShow","title":"pivotPanelShow","description":"피벗 패널을 항상 표시할지, 피벗 모드일 때만 표시할지, 숨길지 선택합니다."},{"path":"/ko/docs/options/pivotPanel","title":"pivotPanel","description":"피벗 패널의 호환 boolean 설정입니다. true는 pivotPanelShow의 always에 해당합니다."},{"path":"/ko/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다."},{"path":"/ko/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다."},{"path":"/ko/docs/methods/setPivotColumns","title":"setPivotColumns","description":"검증된 변경 경로로 피벗 열 축을 교체하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/setValueColumns","title":"setValueColumns","description":"검증된 변경 경로로 피벗 값 축을 교체하고 성공 여부를 반환합니다."},{"path":"/ko/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다."},{"path":"/ko/docs/events/pivotChanged","title":"pivotChanged","description":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요."},{"path":"/ko/docs/events/pivotModeChanged","title":"pivotModeChanged","description":"피벗 모드의 켜짐·꺼짐이 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다."},{"path":"/ko/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/pivot","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/tree-data","id":"tree-data","kind":"feature","group":"analysis","title":"트리 데이터","tier":"pro","summary":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다.","examples":[{"title":"경로 배열로 조직 표시","explanation":"각 행의 path 배열에 루트부터 현재 항목까지의 경로를 넣습니다.","source":"grid.rowData = [\n  { id: 'eng', name: '개발', path: ['회사', '개발'] },\n  { id: 'web', name: '웹', path: ['회사', '개발', '웹'] },\n];\ngrid.getRowId = row => row.id;\ngrid.columnDefs = [{ field: 'name', headerName: '조직' }];\ngrid.getDataPath = row => row.path;","result":"개발 아래에 웹이 나타납니다. 경로 라벨 변경과 안정적인 행 ID 변경은 서로 다른 작업입니다."},{"title":"부모 ID로 연결","explanation":"서버가 평면 목록을 반환하면 경로 배열로 변환하는 대신 연결 필드를 지정할 수 있습니다.","source":"grid.getDataPath = undefined;\ngrid.rowData = [\n  { id: 'root', parentId: null, name: '본사' },\n  { id: 'sales', parentId: 'root', name: '영업' },\n];\ngrid.treeIdField = 'id';\ngrid.treeParentField = 'parentId';\ngrid.treeLabelField = 'name';","result":"id와 parentId의 관계로 트리가 구성됩니다. 중복 ID·순환 부모·없는 부모는 데이터를 공급하기 전에 검사하세요."},{"title":"처음에는 요약만 표시","explanation":"초기 데이터를 반영한 뒤 모든 가지를 접고 필요한 경로만 펼칩니다.","source":"await grid.collapseAllTreeNodes();\n// 경로 방식 예제에 적용할 때:\nawait grid.setTreeNodeExpanded(['회사', '개발'], true);","result":"자식이 없는 잎 노드는 펼칠 대상이 아닙니다. 실제 존재하는 경로인지 확인하고 호출합니다."}],"featureId":"tree-data","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"경로 배열을 반환하는 getDataPath 또는 ID와 부모 ID 필드를 사용합니다. 둘을 함께 설정하면 경로 방식이 우선하므로 한 화면에서는 하나의 규칙을 정하는 것이 좋습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 경로 배열로 조직 표시","blocks":[{"kind":"paragraph","text":"각 행의 path 배열에 루트부터 현재 항목까지의 경로를 넣습니다."},{"kind":"code","source":"grid.rowData = [\n  { id: 'eng', name: '개발', path: ['회사', '개발'] },\n  { id: 'web', name: '웹', path: ['회사', '개발', '웹'] },\n];\ngrid.getRowId = row => row.id;\ngrid.columnDefs = [{ field: 'name', headerName: '조직' }];\ngrid.getDataPath = row => row.path;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 개발 아래에 웹이 나타납니다. 경로 라벨 변경과 안정적인 행 ID 변경은 서로 다른 작업입니다."}]},{"id":"example-2","title":"예제 2. 부모 ID로 연결","blocks":[{"kind":"paragraph","text":"서버가 평면 목록을 반환하면 경로 배열로 변환하는 대신 연결 필드를 지정할 수 있습니다."},{"kind":"code","source":"grid.getDataPath = undefined;\ngrid.rowData = [\n  { id: 'root', parentId: null, name: '본사' },\n  { id: 'sales', parentId: 'root', name: '영업' },\n];\ngrid.treeIdField = 'id';\ngrid.treeParentField = 'parentId';\ngrid.treeLabelField = 'name';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: id와 parentId의 관계로 트리가 구성됩니다. 중복 ID·순환 부모·없는 부모는 데이터를 공급하기 전에 검사하세요."}]},{"id":"example-3","title":"예제 3. 처음에는 요약만 표시","blocks":[{"kind":"paragraph","text":"초기 데이터를 반영한 뒤 모든 가지를 접고 필요한 경로만 펼칩니다."},{"kind":"code","source":"await grid.collapseAllTreeNodes();\n// 경로 방식 예제에 적용할 때:\nawait grid.setTreeNodeExpanded(['회사', '개발'], true);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 자식이 없는 잎 노드는 펼칠 대상이 아닙니다. 실제 존재하는 경로인지 확인하고 호출합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"트리의 표시 순서나 들여쓰기를 이용해 서버의 부모 ID를 역으로 만들지 마세요. 원본 관계를 별도로 유지합니다."},{"kind":"paragraph","text":"트리를 사용하지 않는 화면으로 전환할 때는 getDataPath와 연결 필드를 함께 정리해 이전 계층 설정이 남지 않게 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/getDataPath","title":"getDataPath","description":"행의 루트부터 현재 노드까지 경로 배열을 반환해 트리를 만듭니다. ID 기반 트리 설정보다 우선합니다."},{"path":"/ko/docs/options/treeIdField","title":"treeIdField","description":"부모 ID 방식 트리에서 각 노드의 ID를 담은 필드입니다. treeParentField와 함께 지정합니다."},{"path":"/ko/docs/options/treeParentField","title":"treeParentField","description":"부모 ID 방식 트리에서 부모 노드의 ID를 담은 필드입니다."},{"path":"/ko/docs/options/treeLabelField","title":"treeLabelField","description":"부모 ID 방식 트리에서 표시할 라벨 필드입니다. 지정하지 않으면 ID를 사용합니다."},{"path":"/ko/docs/methods/setTreeNodeExpanded","title":"setTreeNodeExpanded","description":"경로로 지정한 트리 노드를 펼치거나 접습니다. 잎 노드나 존재하지 않는 경로는 펼칠 수 없습니다."},{"path":"/ko/docs/methods/expandAllTreeNodes","title":"expandAllTreeNodes","description":"현재 트리의 접을 수 있는 노드를 모두 펼칩니다."},{"path":"/ko/docs/methods/collapseAllTreeNodes","title":"collapseAllTreeNodes","description":"현재 트리의 가지 노드를 모두 접습니다."},{"path":"/ko/docs/methods/reparentRows","title":"reparentRows","description":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."},{"path":"/ko/docs/events/treeNodeToggled","title":"treeNodeToggled","description":"트리 노드의 펼침 상태가 바뀌었을 때 발생합니다. 경로와 expanded를 확인합니다."},{"path":"/ko/docs/events/treeReparented","title":"treeReparented","description":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/tree-data","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/master-detail","id":"master-detail","kind":"feature","group":"analysis","title":"행 상세","tier":"pro","summary":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다.","examples":[{"title":"문자 설명 패널","explanation":"품목 표가 필요 없는 간단한 메모는 안전한 텍스트 출력으로 구성합니다.","source":"grid.masterDetail = true;\ngrid.detailRowHeight = 120;\ngrid.detailCellRenderer = ({ row }) => ({\n  kind: 'text', text: String(row.memo ?? '등록된 메모가 없습니다.'),\n});","result":"주문을 펼치면 해당 행의 메모가 표시됩니다. 패널은 별도 원본 주문이나 페이지 행 수로 취급하지 않습니다."},{"title":"주문 품목을 하위 표로 표시","explanation":"각 원본 행에 items 배열이 있는 경우입니다. 사용자 정의 렌더러를 해제한 뒤 하위 표 옵션을 지정합니다.","source":"grid.detailCellRenderer = undefined;\ngrid.detailGridOptions = {\n  columnDefs: [\n    { field: 'product', headerName: '품목' },\n    { field: 'quantity', headerName: '수량' },\n  ], height: '180px',\n};\ngrid.getDetailRowData = ({ row }) => row.items ?? [];\ngrid.detailRowHeight = 200;","result":"부모 주문마다 해당 items만 하위 Grid에 전달됩니다. 부모의 모든 설정이 자식에게 자동으로 복사되지는 않습니다."},{"title":"펼칠 때 서버에서 읽기","explanation":"getDetailRowData에서 Promise를 반환하면 요청 동안 하위 표가 로딩 상태를 보여 줍니다. 앱 서버가 제공하는 상세 조회 함수와 연결하고, 실패 메시지와 재시도를 앱에서 설계합니다.","source":null,"result":"한 번 펼치는 동안 결과를 재사용하고 접으면 캐시가 해제됩니다. 전체 펼치기는 많은 상세 요청을 발생시킬 수 있으므로 데이터 양을 고려하세요."}],"featureId":"master-detail","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"단순 설명은 detailCellRenderer, 별도의 표가 필요하면 detailGridOptions와 getDetailRowData를 사용합니다. 펼침 상태를 유지하려면 getRowId로 안정적인 ID를 제공하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 문자 설명 패널","blocks":[{"kind":"paragraph","text":"품목 표가 필요 없는 간단한 메모는 안전한 텍스트 출력으로 구성합니다."},{"kind":"code","source":"grid.masterDetail = true;\ngrid.detailRowHeight = 120;\ngrid.detailCellRenderer = ({ row }) => ({\n  kind: 'text', text: String(row.memo ?? '등록된 메모가 없습니다.'),\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 주문을 펼치면 해당 행의 메모가 표시됩니다. 패널은 별도 원본 주문이나 페이지 행 수로 취급하지 않습니다."}]},{"id":"example-2","title":"예제 2. 주문 품목을 하위 표로 표시","blocks":[{"kind":"paragraph","text":"각 원본 행에 items 배열이 있는 경우입니다. 사용자 정의 렌더러를 해제한 뒤 하위 표 옵션을 지정합니다."},{"kind":"code","source":"grid.detailCellRenderer = undefined;\ngrid.detailGridOptions = {\n  columnDefs: [\n    { field: 'product', headerName: '품목' },\n    { field: 'quantity', headerName: '수량' },\n  ], height: '180px',\n};\ngrid.getDetailRowData = ({ row }) => row.items ?? [];\ngrid.detailRowHeight = 200;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 부모 주문마다 해당 items만 하위 Grid에 전달됩니다. 부모의 모든 설정이 자식에게 자동으로 복사되지는 않습니다."}]},{"id":"example-3","title":"예제 3. 펼칠 때 서버에서 읽기","blocks":[{"kind":"paragraph","text":"getDetailRowData에서 Promise를 반환하면 요청 동안 하위 표가 로딩 상태를 보여 줍니다. 앱 서버가 제공하는 상세 조회 함수와 연결하고, 실패 메시지와 재시도를 앱에서 설계합니다."},{"kind":"paragraph","text":"결과 확인: 한 번 펼치는 동안 결과를 재사용하고 접으면 캐시가 해제됩니다. 전체 펼치기는 많은 상세 요청을 발생시킬 수 있으므로 데이터 양을 고려하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"detailCellRenderer가 있으면 선언형 하위 Grid보다 우선합니다. 두 방식을 동시에 켜 놓고 하위 표가 생기기를 기대하지 마세요."},{"kind":"paragraph","text":"중첩 상세는 깊이 제한이 있습니다. 재귀적인 자기 참조 옵션을 만들지 말고 실제 업무에 필요한 단계까지만 구성합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/masterDetail","title":"masterDetail","description":"주문 아래 품목처럼 원본 행을 펼쳐 전체 폭의 상세 패널을 표시합니다."},{"path":"/ko/docs/options/detailRowHeight","title":"detailRowHeight","description":"펼친 상세 패널의 높이를 픽셀로 정합니다."},{"path":"/ko/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다."},{"path":"/ko/docs/options/detailGridOptions","title":"detailGridOptions","description":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다."},{"path":"/ko/docs/options/getDetailRowData","title":"getDetailRowData","description":"펼친 부모 행에 해당하는 상세 행을 배열 또는 Promise로 반환합니다. 한 번 펼치는 동안 결과를 재사용합니다."},{"path":"/ko/docs/options/detailNestingLevel","title":"detailNestingLevel","description":"중첩 상세 Grid의 깊이입니다. 자동 생성된 하위 Grid는 부모가 설정하며 재귀 깊이 제한에 사용됩니다."},{"path":"/ko/docs/methods/setDetailRowExpanded","title":"setDetailRowExpanded","description":"안정적인 부모 행 ID로 상세 패널을 펼치거나 접습니다."},{"path":"/ko/docs/methods/expandAllDetailRows","title":"expandAllDetailRows","description":"현재 필터를 통과한 전체 페이지의 상세 행을 펼칩니다. 지연 조회를 사용하는 경우 요청량을 고려하세요."},{"path":"/ko/docs/methods/collapseAllDetailRows","title":"collapseAllDetailRows","description":"열린 상세 행을 모두 접고 해당 패널의 자원을 정리합니다."},{"path":"/ko/docs/events/detailRowToggled","title":"detailRowToggled","description":"부모 행의 상세 패널 펼침 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/detailRowCreated","title":"detailRowCreated","description":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다."},{"path":"/ko/docs/events/detailRowDestroyed","title":"detailRowDestroyed","description":"상세 패널이 해제되었을 때 발생합니다. 앱에서 연결한 자원도 해당 rowId 기준으로 정리합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/master-detail","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/formulas","id":"formulas","kind":"feature","group":"analysis","title":"수식 계산","tier":"pro","summary":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다.","examples":[{"title":"단가와 수량으로 금액 계산","explanation":"수식 위치를 이해하기 쉬운 세 개의 열로 시작합니다.","source":"grid.columnDefs = [\n  { field: 'quantity', headerName: '수량', editable: true, editor: 'number' },\n  { field: 'price', headerName: '단가', editable: true, editor: 'number' },\n  { field: 'amount', headerName: '금액' },\n];\ngrid.rowData = [{ id: 'a', quantity: 3, price: 100, amount: '=A1*B1' }];\ngrid.formulas = true;","result":"금액에 300이 보입니다. 수량을 수정하면 의존하는 금액이 다시 계산됩니다."},{"title":"결과와 수식 원문 비교","explanation":"계산이 예상과 다를 때 수식 원문과 편집 바를 표시합니다.","source":"grid.showFormulas = true;\ngrid.formulaBar = true;","result":"수식 셀에 =A1*B1이 보입니다. 검토가 끝나면 showFormulas를 false로 돌려 결과를 표시합니다."},{"title":"여러 시트와 동적 배열 검토","explanation":"여러 Grid를 워크북으로 연결한 경우 getWorkbookPropagationState()와 getWorkbookSnapshotReport()로 연결 및 전파 상태를 확인합니다. 동적 배열은 applySpillFormula()의 전용 입력 계약과 충돌 결과를 확인한 뒤 사용합니다.","source":null,"result":"배열 결과가 차지할 영역에 기존 값이 있으면 전체 결과를 억지로 덮어쓰지 않습니다. 거절·충돌·그려지지 않은 셀 보고서를 구분해 사용자에게 안내합니다."}],"featureId":"formulas","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"A1 좌표는 정렬 후 화면 순서가 아닙니다. 사용자가 표를 정렬하거나 열을 이동하더라도 원본 데이터 순서와 columnDefs 순서를 기준으로 수식을 해석한다는 점을 구분하세요."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 단가와 수량으로 금액 계산","blocks":[{"kind":"paragraph","text":"수식 위치를 이해하기 쉬운 세 개의 열로 시작합니다."},{"kind":"code","source":"grid.columnDefs = [\n  { field: 'quantity', headerName: '수량', editable: true, editor: 'number' },\n  { field: 'price', headerName: '단가', editable: true, editor: 'number' },\n  { field: 'amount', headerName: '금액' },\n];\ngrid.rowData = [{ id: 'a', quantity: 3, price: 100, amount: '=A1*B1' }];\ngrid.formulas = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 금액에 300이 보입니다. 수량을 수정하면 의존하는 금액이 다시 계산됩니다."}]},{"id":"example-2","title":"예제 2. 결과와 수식 원문 비교","blocks":[{"kind":"paragraph","text":"계산이 예상과 다를 때 수식 원문과 편집 바를 표시합니다."},{"kind":"code","source":"grid.showFormulas = true;\ngrid.formulaBar = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 수식 셀에 =A1*B1이 보입니다. 검토가 끝나면 showFormulas를 false로 돌려 결과를 표시합니다."}]},{"id":"example-3","title":"예제 3. 여러 시트와 동적 배열 검토","blocks":[{"kind":"paragraph","text":"여러 Grid를 워크북으로 연결한 경우 getWorkbookPropagationState()와 getWorkbookSnapshotReport()로 연결 및 전파 상태를 확인합니다. 동적 배열은 applySpillFormula()의 전용 입력 계약과 충돌 결과를 확인한 뒤 사용합니다."},{"kind":"paragraph","text":"결과 확인: 배열 결과가 차지할 영역에 기존 값이 있으면 전체 결과를 억지로 덮어쓰지 않습니다. 거절·충돌·그려지지 않은 셀 보고서를 구분해 사용자에게 안내합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"수식 문자열과 계산 결과는 별개입니다. 저장·복사·파일 출력 시 어느 쪽이 필요한지 먼저 정하고 결과를 확인하세요."},{"kind":"paragraph","text":"모든 Excel 함수가 지원된다고 가정하지 마세요. 함수명과 오류 결과를 실제 사용하는 수식으로 확인하고 순환 참조를 피합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/formulas","title":"formulas","description":"=로 시작하는 셀 문자열을 수식으로 계산합니다. A1 참조는 화면 정렬 순서가 아닌 원본 열·행 순서를 기준으로 합니다."},{"path":"/ko/docs/options/showFormulas","title":"showFormulas","description":"수식 셀에 계산 결과 대신 수식 원문을 보여 줍니다. formulas를 켠 표에서 검토 용도로 사용합니다."},{"path":"/ko/docs/options/formulaBar","title":"formulaBar","description":"활성 셀의 원본 값이나 수식을 확인하고 편집하는 수식 바를 표시합니다. Enter로 확정하고 Escape로 취소합니다."},{"path":"/ko/docs/options/workbookId","title":"workbookId","description":"여러 Grid 시트를 같은 워크북에 연결할 식별자입니다. 시트 간 참조를 사용할 때 sheetName과 함께 설정합니다."},{"path":"/ko/docs/options/sheetName","title":"sheetName","description":"워크북 안에서 이 Grid 시트를 구분할 이름입니다. 다른 시트의 수식이 참조하므로 이름 변경 영향을 확인하세요."},{"path":"/ko/docs/columns/formula","title":"formula","description":"이 열에 적용할 수식 문자열입니다. 수식 기능과 원본 좌표 규칙을 함께 확인합니다."},{"path":"/ko/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다."},{"path":"/ko/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다."},{"path":"/ko/docs/methods/disconnectWorkbook","title":"disconnectWorkbook","description":"워크북 연결을 해제합니다. 다른 시트와 수식 값을 전파하는 흐름에 미치는 영향을 확인하세요."},{"path":"/ko/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다."},{"path":"/ko/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다."},{"path":"/ko/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요."},{"path":"/ko/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다."},{"path":"/ko/docs/methods/applySpillFormula","title":"applySpillFormula","description":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."},{"path":"/ko/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."},{"path":"/ko/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."},{"path":"/ko/docs/methods/getSpillReport","title":"getSpillReport","description":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다."},{"path":"/ko/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다."},{"path":"/ko/docs/events/formulaError","title":"formulaError","description":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다."},{"path":"/ko/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/workbookBindingError","title":"workbookBindingError","description":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다."},{"path":"/ko/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/formulas","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/integrated-charts","id":"integrated-charts","kind":"feature","group":"analysis","title":"선택 데이터를 차트로","tier":"pro","summary":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다.","examples":[{"title":"선택한 범위로 막대 차트 만들기","explanation":"범주 열과 숫자 열을 포함하는 범위를 먼저 선택합니다.","source":"grid.rangeSelection = true;\nconst result = await grid.createRangeChart({ chartType: 'column' });\nif (result.status === 'created') {\n  console.log(result.chart.chartId);\n} else {\n  console.log(result.reason, result.detail);\n}","result":"성공하면 Grid가 관리하는 패널에 차트가 생성됩니다. 선택이 없거나 지원하지 않는 데이터 조합이면 거절 사유를 읽습니다."},{"title":"현재 표와 다시 맞추기","explanation":"필터나 데이터 변경 뒤 살아 있는 차트를 확인하고 동기화 결과를 읽습니다.","source":"console.log(await grid.getChartRefs());\nconsole.log(await grid.syncCharts());","result":"현재 뷰를 기준으로 차트 데이터가 다시 구성됩니다. 불필요하게 같은 차트를 계속 새로 만들지 않습니다."},{"title":"화면 복원과 정리","explanation":"사용자가 만든 차트 설정을 저장하고 나중에 같은 데이터 계약을 가진 Grid에서 복원합니다.","source":"const saved = await grid.getChartModels();\nconsole.log(saved);\n// 저장한 envelope를 복원할 때:\nconsole.log(await grid.restoreChartModels(saved.envelope));","result":"캡처 결과의 issues도 확인하고 envelope만 복원에 전달합니다. 복원 결과에서 적용·거절을 확인합니다. 개별 차트를 닫을 때는 destroyChart(chartId)를 호출하고 앱이 만든 외부 컨테이너도 정리합니다."}],"featureId":"integrated-charts","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"생성 결과는 성공과 거절을 구분하는 보고서입니다. 성공 여부를 확인한 뒤 chartId로 수정·내보내기·해제를 연결합니다. 차트 컴포넌트 등록과 Pro 설정도 먼저 준비합니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 선택한 범위로 막대 차트 만들기","blocks":[{"kind":"paragraph","text":"범주 열과 숫자 열을 포함하는 범위를 먼저 선택합니다."},{"kind":"code","source":"grid.rangeSelection = true;\nconst result = await grid.createRangeChart({ chartType: 'column' });\nif (result.status === 'created') {\n  console.log(result.chart.chartId);\n} else {\n  console.log(result.reason, result.detail);\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 성공하면 Grid가 관리하는 패널에 차트가 생성됩니다. 선택이 없거나 지원하지 않는 데이터 조합이면 거절 사유를 읽습니다."}]},{"id":"example-2","title":"예제 2. 현재 표와 다시 맞추기","blocks":[{"kind":"paragraph","text":"필터나 데이터 변경 뒤 살아 있는 차트를 확인하고 동기화 결과를 읽습니다."},{"kind":"code","source":"console.log(await grid.getChartRefs());\nconsole.log(await grid.syncCharts());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 현재 뷰를 기준으로 차트 데이터가 다시 구성됩니다. 불필요하게 같은 차트를 계속 새로 만들지 않습니다."}]},{"id":"example-3","title":"예제 3. 화면 복원과 정리","blocks":[{"kind":"paragraph","text":"사용자가 만든 차트 설정을 저장하고 나중에 같은 데이터 계약을 가진 Grid에서 복원합니다."},{"kind":"code","source":"const saved = await grid.getChartModels();\nconsole.log(saved);\n// 저장한 envelope를 복원할 때:\nconsole.log(await grid.restoreChartModels(saved.envelope));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 캡처 결과의 issues도 확인하고 envelope만 복원에 전달합니다. 복원 결과에서 적용·거절을 확인합니다. 개별 차트를 닫을 때는 destroyChart(chartId)를 호출하고 앱이 만든 외부 컨테이너도 정리합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"그룹·피벗 결과 열은 원본 열과 식별자가 다릅니다. 현재 결과 열 모델을 확인하고 지원되는 차트 투영을 사용하세요."},{"kind":"paragraph","text":"차트 교차 필터와 앱이 건 외부 필터의 소유권을 구분하세요. resetChartCrossFilter()는 차트가 관리하는 필터를 해제하는 용도입니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/createRangeChart","title":"createRangeChart","description":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."},{"path":"/ko/docs/methods/updateChart","title":"updateChart","description":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."},{"path":"/ko/docs/methods/destroyChart","title":"destroyChart","description":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다."},{"path":"/ko/docs/methods/getChartRefs","title":"getChartRefs","description":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다."},{"path":"/ko/docs/methods/syncCharts","title":"syncCharts","description":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."},{"path":"/ko/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."},{"path":"/ko/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."},{"path":"/ko/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다."},{"path":"/ko/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다."},{"path":"/ko/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다."},{"path":"/ko/docs/methods/getChartModels","title":"getChartModels","description":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다."},{"path":"/ko/docs/methods/restoreChartModels","title":"restoreChartModels","description":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다."},{"path":"/ko/docs/methods/exportChartImage","title":"exportChartImage","description":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."},{"path":"/ko/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."},{"path":"/ko/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다."},{"path":"/ko/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다."},{"path":"/ko/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다."},{"path":"/ko/docs/events/chartCreated","title":"chartCreated","description":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다."},{"path":"/ko/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다."},{"path":"/ko/docs/events/chartDestroyed","title":"chartDestroyed","description":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/integrated-charts","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/custom-cells","id":"custom-cells","kind":"feature","group":"appearance","title":"셀 표현 바꾸기","tier":"free","summary":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다.","examples":[{"title":"안전한 텍스트와 보조 설명","explanation":"문자열을 HTML로 해석하지 않고 표시합니다.","source":"grid.columnDefs = [{\n  field: 'status', headerName: '상태',\n  cellRenderer: params => ({ kind: 'text', text: String(params.value ?? '-'), title: '주문의 현재 처리 상태' }),\n}];","result":"사용자 입력에 꺾쇠가 있어도 실행되는 HTML이 아닌 문자로 표시됩니다."},{"title":"표시와 편집 분리","explanation":"통화 표시에는 valueFormatter, 금액 수정에는 number 편집기를 설정합니다. 렌더러를 붙였다는 이유만으로 편집기를 직접 구현할 필요는 없습니다.","source":null,"result":"보기 상태의 통화 기호와 실제 저장 숫자를 분리합니다. 편집 완료 뒤 정렬과 합계가 숫자를 기준으로 동작하는지 확인하세요."},{"title":"액션이 있는 셀","explanation":"프레임워크에서 vnode 렌더러를 사용해 상세 보기 버튼을 만듭니다. 버튼의 accessible name에는 행을 식별할 수 있는 설명을 붙이고, 클릭 시 앱의 상세 화면을 엽니다.","source":null,"result":"가상 스크롤로 셀이 재사용될 수 있으므로 현재 params의 행을 참조합니다. 이벤트 리스너와 외부 자원은 렌더러 수명에 맞춰 정리합니다."}],"featureId":"custom-cells","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"단순 숫자 포맷은 valueFormatter가 더 간단합니다. 구조나 상호작용이 필요할 때 cellRenderer를 선택하고 반환값은 text·html·vnode 중 하나의 계약을 지킵니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 안전한 텍스트와 보조 설명","blocks":[{"kind":"paragraph","text":"문자열을 HTML로 해석하지 않고 표시합니다."},{"kind":"code","source":"grid.columnDefs = [{\n  field: 'status', headerName: '상태',\n  cellRenderer: params => ({ kind: 'text', text: String(params.value ?? '-'), title: '주문의 현재 처리 상태' }),\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자 입력에 꺾쇠가 있어도 실행되는 HTML이 아닌 문자로 표시됩니다."}]},{"id":"example-2","title":"예제 2. 표시와 편집 분리","blocks":[{"kind":"paragraph","text":"통화 표시에는 valueFormatter, 금액 수정에는 number 편집기를 설정합니다. 렌더러를 붙였다는 이유만으로 편집기를 직접 구현할 필요는 없습니다."},{"kind":"paragraph","text":"결과 확인: 보기 상태의 통화 기호와 실제 저장 숫자를 분리합니다. 편집 완료 뒤 정렬과 합계가 숫자를 기준으로 동작하는지 확인하세요."}]},{"id":"example-3","title":"예제 3. 액션이 있는 셀","blocks":[{"kind":"paragraph","text":"프레임워크에서 vnode 렌더러를 사용해 상세 보기 버튼을 만듭니다. 버튼의 accessible name에는 행을 식별할 수 있는 설명을 붙이고, 클릭 시 앱의 상세 화면을 엽니다."},{"kind":"paragraph","text":"결과 확인: 가상 스크롤로 셀이 재사용될 수 있으므로 현재 params의 행을 참조합니다. 이벤트 리스너와 외부 자원은 렌더러 수명에 맞춰 정리합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"kind: html은 신뢰할 수 있는 정제된 HTML만 사용하세요. Grid가 앱의 임의 HTML을 자동으로 안전하게 바꾼다고 가정하면 안 됩니다."},{"kind":"paragraph","text":"렌더러 내부에서 매번 서버 요청이나 큰 계산을 실행하면 스크롤이 느려집니다. 데이터 준비 단계에서 값을 계산하거나 캐시합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/components","title":"components","description":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."},{"path":"/ko/docs/options/componentTimeoutMs","title":"componentTimeoutMs","description":"비동기 사용자 컴포넌트를 준비할 때 기다릴 최대 시간입니다. 지연·실패는 componentError와 함께 처리하세요."},{"path":"/ko/docs/columns/cellRenderer","title":"cellRenderer","description":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다."},{"path":"/ko/docs/columns/cellRendererMeta","title":"cellRendererMeta","description":"셀 렌더러에 전달할 추가 메타데이터입니다."},{"path":"/ko/docs/columns/cellClass","title":"cellClass","description":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다."},{"path":"/ko/docs/columns/cellClassRules","title":"cellClassRules","description":"조건별로 CSS 클래스를 적용하는 규칙입니다."},{"path":"/ko/docs/columns/cellStyle","title":"cellStyle","description":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다."},{"path":"/ko/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다."},{"path":"/ko/docs/methods/listRegisteredCellRenderers","title":"listRegisteredCellRenderers","description":"사용 가능한 등록 셀 렌더러 이름 목록을 읽습니다."},{"path":"/ko/docs/methods/unregisterCellRenderer","title":"unregisterCellRenderer","description":"이름으로 등록한 셀 렌더러를 해제합니다."},{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},{"path":"/ko/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."},{"path":"/ko/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."},{"path":"/ko/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다."},{"path":"/ko/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다."},{"path":"/ko/docs/events/componentError","title":"componentError","description":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/custom-cells","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/tooltip","id":"tooltip","kind":"feature","group":"appearance","title":"셀 툴팁","tier":"free","summary":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다.","examples":[{"title":"별도 설명 필드 보여 주기","explanation":"짧은 제품 이름과 긴 설명을 원본 데이터에 함께 둡니다.","source":"grid.columnDefs = [{ field: 'product', headerName: '제품', tooltipField: 'description' }];","result":"제품 이름 위에서 해당 행의 description을 확인합니다. 설명 필드는 서버에서 함께 공급해야 합니다."},{"title":"동적으로 설명 만들기","explanation":"현재 셀 값에서 보조 문구를 계산합니다.","source":"grid.columnDefs = [{\n  field: 'quantity', headerName: '수량',\n  tooltipValueGetter: params => '주문 수량: ' + String(params.value ?? 0),\n}];","result":"행마다 다른 수량 설명이 표시됩니다. 통화·단위와 실제 데이터 타입을 일관되게 유지하세요."},{"title":"앱에서 툴팁 결과 확인","explanation":"첫 표시 행의 제품 셀에 대해 공개 API로 계산된 문구를 읽습니다.","source":"console.log(await grid.getCellTooltipText({ rowIndex: 0, field: 'product' }));","result":"사용자가 읽을 수 없는 셀에서는 비밀 값을 툴팁으로 우회 노출하지 않아야 합니다. 실제 열 너비를 줄여 잘림 상황도 확인합니다."}],"featureId":"tooltip","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"표시되는 셀 값과 툴팁 내용은 다를 수 있습니다. 열의 tooltipField 또는 tooltipValueGetter를 사용하고, 읽기 권한과 실제 오버플로 여부를 고려합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 별도 설명 필드 보여 주기","blocks":[{"kind":"paragraph","text":"짧은 제품 이름과 긴 설명을 원본 데이터에 함께 둡니다."},{"kind":"code","source":"grid.columnDefs = [{ field: 'product', headerName: '제품', tooltipField: 'description' }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 제품 이름 위에서 해당 행의 description을 확인합니다. 설명 필드는 서버에서 함께 공급해야 합니다."}]},{"id":"example-2","title":"예제 2. 동적으로 설명 만들기","blocks":[{"kind":"paragraph","text":"현재 셀 값에서 보조 문구를 계산합니다."},{"kind":"code","source":"grid.columnDefs = [{\n  field: 'quantity', headerName: '수량',\n  tooltipValueGetter: params => '주문 수량: ' + String(params.value ?? 0),\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행마다 다른 수량 설명이 표시됩니다. 통화·단위와 실제 데이터 타입을 일관되게 유지하세요."}]},{"id":"example-3","title":"예제 3. 앱에서 툴팁 결과 확인","blocks":[{"kind":"paragraph","text":"첫 표시 행의 제품 셀에 대해 공개 API로 계산된 문구를 읽습니다."},{"kind":"code","source":"console.log(await grid.getCellTooltipText({ rowIndex: 0, field: 'product' }));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자가 읽을 수 없는 셀에서는 비밀 값을 툴팁으로 우회 노출하지 않아야 합니다. 실제 열 너비를 줄여 잘림 상황도 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"hover만으로 중요한 기능에 접근하게 하지 마세요. 터치·키보드 사용자에게도 본문이나 상세 화면으로 같은 정보를 제공합니다."},{"kind":"paragraph","text":"툴팁 콜백에서 값 자체를 수정하지 마세요. 표시용 문자열을 반환하고 저장은 편집 API로 처리합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/headerTooltip","title":"headerTooltip","description":"머리글에 제공할 보조 설명입니다."},{"path":"/ko/docs/columns/tooltipField","title":"tooltipField","description":"툴팁에 사용할 원본 데이터 필드입니다."},{"path":"/ko/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요."},{"path":"/ko/docs/methods/getCellTooltipText","title":"getCellTooltipText","description":"대상 셀과 오버플로 문맥을 바탕으로 실제 툴팁 문자열을 계산합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/tooltip","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/conditional-formats","id":"conditional-formats","kind":"feature","group":"appearance","title":"조건부 서식","summary":"조건부 서식은 값의 의미에 따라 배경·글자 등 표시를 바꿉니다. 재고 부족이나 목표 초과를 빠르게 찾는 데 쓰며 원본 값이나 검증 결과를 바꾸지는 않습니다.","examples":[{"title":"기준을 초과한 수량 강조","explanation":"수량이 100보다 큰 셀을 구분합니다.","source":"grid.conditionalFormats = [{\n  field: 'quantity', condition: { type: 'greaterThan', value: 100 },\n  style: { backgroundColor: '#fff1cc' },\n}];","result":"100은 포함되지 않고 101부터 강조됩니다. 경계값을 포함하려면 greaterThanOrEqual을 선택합니다."},{"title":"여러 상태를 구분","explanation":"상태가 완료인 경우와 수량이 비어 있는 경우를 별도 규칙으로 만듭니다. blank와 숫자 0은 업무상 같은 뜻인지 먼저 결정합니다.","source":null,"result":"완료 색과 누락 경고 색이 충돌하지 않도록 대상 열을 나누거나 우선순위를 정합니다. 텍스트 라벨도 함께 유지하세요."},{"title":"사용자가 규칙 조정","explanation":"서식 설정 UI를 열고 변경 이벤트를 앱의 저장 기능과 연결합니다.","source":"grid.conditionalFormatUi = true;\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail.rules);\n});","result":"수정된 규칙 배열을 읽어 사용자별 설정으로 저장할 수 있습니다. 다음 화면 진입 시 새 배열로 다시 지정합니다."}],"featureId":"conditional-formats","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"규칙에는 대상 field, 비교 condition, 적용 style을 지정합니다. 여러 규칙이 같은 셀에 걸리는 경우 적용 순서와 stopIfTrue를 함께 검토합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기준을 초과한 수량 강조","blocks":[{"kind":"paragraph","text":"수량이 100보다 큰 셀을 구분합니다."},{"kind":"code","source":"grid.conditionalFormats = [{\n  field: 'quantity', condition: { type: 'greaterThan', value: 100 },\n  style: { backgroundColor: '#fff1cc' },\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 100은 포함되지 않고 101부터 강조됩니다. 경계값을 포함하려면 greaterThanOrEqual을 선택합니다."}]},{"id":"example-2","title":"예제 2. 여러 상태를 구분","blocks":[{"kind":"paragraph","text":"상태가 완료인 경우와 수량이 비어 있는 경우를 별도 규칙으로 만듭니다. blank와 숫자 0은 업무상 같은 뜻인지 먼저 결정합니다."},{"kind":"paragraph","text":"결과 확인: 완료 색과 누락 경고 색이 충돌하지 않도록 대상 열을 나누거나 우선순위를 정합니다. 텍스트 라벨도 함께 유지하세요."}]},{"id":"example-3","title":"예제 3. 사용자가 규칙 조정","blocks":[{"kind":"paragraph","text":"서식 설정 UI를 열고 변경 이벤트를 앱의 저장 기능과 연결합니다."},{"kind":"code","source":"grid.conditionalFormatUi = true;\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail.rules);\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 수정된 규칙 배열을 읽어 사용자별 설정으로 저장할 수 있습니다. 다음 화면 진입 시 새 배열로 다시 지정합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"색만으로 오류·완료를 구분하지 마세요. 상태 문구와 검증 메시지를 함께 제공하고 밝은 테마·어두운 테마 모두 읽을 수 있는 대비를 선택합니다."},{"kind":"paragraph","text":"서식은 입력 차단 기능이 아닙니다. 잘못된 값의 저장을 막으려면 validationRules와 invalidEditMode를 사용합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/conditionalFormats","title":"conditionalFormats","description":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다."},{"path":"/ko/docs/options/conditionalFormatUi","title":"conditionalFormatUi","description":"사용자가 조건부 서식 규칙을 조정하는 UI를 제공합니다."},{"path":"/ko/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/conditional-formats","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/cell-change-flash","id":"cell-change-flash","kind":"feature","group":"appearance","title":"변경 강조","summary":"값 변경 강조는 편집·붙여넣기·데이터 트랜잭션으로 바뀐 셀을 잠깐 표시합니다. 실시간 가격이나 수량이 많은 표에서 방금 달라진 위치를 찾는 데 유용합니다.","examples":[{"title":"변경 강조 켜기","explanation":"편집 가능한 열이 있는 Grid에서 변경 강조를 켭니다.","source":"grid.cellChangeFlash = true;","result":"수량 셀을 편집하고 완료하면 변경된 셀에 일시적인 강조가 나타납니다."},{"title":"서버 갱신 강조","explanation":"존재하는 ID의 행을 트랜잭션으로 수정합니다.","source":"const row = grid.rowData[0];\nif (row) await grid.applyTransaction({ update: [{ ...row, quantity: Number(row.quantity) + 1 }] });","result":"전체 데이터를 다시 만드는 대신 실제 바뀐 셀을 확인하기 쉽습니다. getRowId는 갱신 전후 동일해야 합니다."},{"title":"고빈도 화면 구성","explanation":"초당 갱신량이 많으면 앱에서 받은 변경을 모아 적정 간격으로 반영합니다. 강조가 계속 켜져 보인다면 갱신 주기나 강조 사용 범위를 재검토합니다.","source":null,"result":"현재 값이 정확하게 반영되면서 사용자가 변화 위치를 읽을 시간을 확보합니다. 깜박임 자체를 성공 알림으로 사용하지 않습니다."}],"featureId":"cell-change-flash","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"계속 유지되는 조건부 서식과 달리 잠시 나타났다 사라지는 표시입니다. 사용자가 나중에 변경 이력을 확인해야 한다면 감사 로그를 함께 제공합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 변경 강조 켜기","blocks":[{"kind":"paragraph","text":"편집 가능한 열이 있는 Grid에서 변경 강조를 켭니다."},{"kind":"code","source":"grid.cellChangeFlash = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 수량 셀을 편집하고 완료하면 변경된 셀에 일시적인 강조가 나타납니다."}]},{"id":"example-2","title":"예제 2. 서버 갱신 강조","blocks":[{"kind":"paragraph","text":"존재하는 ID의 행을 트랜잭션으로 수정합니다."},{"kind":"code","source":"const row = grid.rowData[0];\nif (row) await grid.applyTransaction({ update: [{ ...row, quantity: Number(row.quantity) + 1 }] });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 전체 데이터를 다시 만드는 대신 실제 바뀐 셀을 확인하기 쉽습니다. getRowId는 갱신 전후 동일해야 합니다."}]},{"id":"example-3","title":"예제 3. 고빈도 화면 구성","blocks":[{"kind":"paragraph","text":"초당 갱신량이 많으면 앱에서 받은 변경을 모아 적정 간격으로 반영합니다. 강조가 계속 켜져 보인다면 갱신 주기나 강조 사용 범위를 재검토합니다."},{"kind":"paragraph","text":"결과 확인: 현재 값이 정확하게 반영되면서 사용자가 변화 위치를 읽을 시간을 확보합니다. 깜박임 자체를 성공 알림으로 사용하지 않습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"cellChangeFlash와 호환 옵션 enableCellChangeFlash를 서로 다른 값으로 중복 지정하지 마세요. 한 가지 설정 경로를 사용합니다."},{"kind":"paragraph","text":"비슷해 보이는 새 객체를 넣었다는 사실과 셀 값이 바뀌었다는 사실을 구분해 테스트하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/cellChangeFlash","title":"cellChangeFlash","description":"편집·붙여넣기·트랜잭션으로 값이 바뀐 셀을 잠시 강조합니다."},{"path":"/ko/docs/options/enableCellChangeFlash","title":"enableCellChangeFlash","description":"셀 값 변경 강조를 설정하는 호환 이름입니다. cellChangeFlash와 모순된 값으로 중복 설정하지 마세요."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/cell-change-flash","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-hover","id":"row-hover","kind":"feature","group":"appearance","title":"행 따라가기","summary":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다.","examples":[{"title":"가벼운 시각 강조","explanation":"기본적인 읽기 보조 효과를 선택합니다.","source":"grid.rowHover = 'css-only';","result":"마우스가 올라간 행의 강조만 바뀌고 앱의 행 hover 이벤트 처리에 의존하지 않습니다."},{"title":"행 진입 이벤트 연결","explanation":"앱의 보조 영역에서 포인터가 가리키는 행을 안내하는 상황입니다.","source":"grid.rowHover = 'stateful';\ngrid.addEventListener('rowHoverChanged', event => console.log(event.detail));","result":"이벤트의 행 정보를 사용할 수 있습니다. 행마다 서버를 호출하기보다 기존 데이터로 보조 설명을 구성하세요."},{"title":"강조 끄기","explanation":"색이 많은 분석 표에서는 hover 강조를 없애고 선택·포커스만 유지할 수 있습니다.","source":"grid.rowHover = 'off';","result":"행의 상태 색이나 조건부 서식이 포인터 때문에 계속 달라져 보이는 혼란을 줄일 수 있습니다."}],"featureId":"row-hover","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"CSS만 필요한 경우 css-only, 앱에 행 진입·이탈 이벤트가 필요한 경우 stateful, 강조가 필요 없으면 off를 사용합니다. 이벤트가 필요 없을 때 상태 갱신 비용을 추가할 이유는 없습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 가벼운 시각 강조","blocks":[{"kind":"paragraph","text":"기본적인 읽기 보조 효과를 선택합니다."},{"kind":"code","source":"grid.rowHover = 'css-only';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 마우스가 올라간 행의 강조만 바뀌고 앱의 행 hover 이벤트 처리에 의존하지 않습니다."}]},{"id":"example-2","title":"예제 2. 행 진입 이벤트 연결","blocks":[{"kind":"paragraph","text":"앱의 보조 영역에서 포인터가 가리키는 행을 안내하는 상황입니다."},{"kind":"code","source":"grid.rowHover = 'stateful';\ngrid.addEventListener('rowHoverChanged', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이벤트의 행 정보를 사용할 수 있습니다. 행마다 서버를 호출하기보다 기존 데이터로 보조 설명을 구성하세요."}]},{"id":"example-3","title":"예제 3. 강조 끄기","blocks":[{"kind":"paragraph","text":"색이 많은 분석 표에서는 hover 강조를 없애고 선택·포커스만 유지할 수 있습니다."},{"kind":"code","source":"grid.rowHover = 'off';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 행의 상태 색이나 조건부 서식이 포인터 때문에 계속 달라져 보이는 혼란을 줄일 수 있습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"hover를 클릭·선택 이벤트로 대신 해석하지 마세요. 일괄 작업 대상은 실제 선택 API에서 읽습니다."},{"kind":"paragraph","text":"터치 화면에는 지속적인 hover가 없습니다. 필요한 정보와 조작은 클릭·포커스로도 접근할 수 있어야 합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowHover","title":"rowHover","description":"CSS 강조만 사용하거나, 이벤트와 상태가 있는 hover를 사용하거나, hover를 끕니다."},{"path":"/ko/docs/methods/setHoveredRow","title":"setHoveredRow","description":"상태형 hover의 대상 행을 지정합니다. 실제 행 선택을 바꾸는 API는 아닙니다."},{"path":"/ko/docs/methods/getHoveredRowId","title":"getHoveredRowId","description":"현재 hover 행의 ID 또는 null을 읽습니다."},{"path":"/ko/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/row-hover","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/overlays","id":"overlays","kind":"feature","group":"appearance","title":"로딩과 빈 결과","summary":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다.","examples":[{"title":"처음 조회하기","explanation":"readOrders는 앱에서 구현한 데이터 조회 함수라고 가정합니다.","source":"grid.loading = true;\ngrid.loadingMessage = '주문을 불러오고 있습니다.';\ntry {\n  grid.rowData = await readOrders();\n} finally {\n  grid.loading = false;\n}","result":"성공하면 표가 표시되고 실패해도 로딩 표시가 남지 않습니다. 오류는 호출한 앱에서 안내해야 합니다."},{"title":"조회 결과가 없을 때","explanation":"빈 배열도 정상적인 조회 결과일 수 있습니다.","source":"grid.showEmptyState = true;\ngrid.emptyMessage = '조건에 맞는 주문이 없습니다. 검색 조건을 확인하세요.';\ngrid.rowData = [];","result":"사용자가 검색 조건을 바꿔야 하는지 알 수 있습니다. 아직 요청 중이라면 빈 상태보다 로딩 상태를 보여 주세요."},{"title":"빠른 재조회와 깜박임","explanation":"짧은 요청이 반복되면 minLoadingDuration으로 표시 시간을 조절하고, 기존 데이터 유지 여부는 앱의 업무 흐름에 맞춥니다.","source":null,"result":"필터를 연속 변경할 때 이전 응답이 나중에 도착해 최신 결과를 덮어쓰지 않도록 앱의 취소·요청 순서 처리를 함께 구현합니다."}],"featureId":"overlays","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"앱이 데이터를 읽는 동안 loading을 켜고 성공·실패와 관계없이 종료 시 해제합니다. 빈 결과 문구는 showEmptyState와 emptyMessage로 준비하고, 요청 오류의 재시도는 앱에서 제공합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 처음 조회하기","blocks":[{"kind":"paragraph","text":"readOrders는 앱에서 구현한 데이터 조회 함수라고 가정합니다."},{"kind":"code","source":"grid.loading = true;\ngrid.loadingMessage = '주문을 불러오고 있습니다.';\ntry {\n  grid.rowData = await readOrders();\n} finally {\n  grid.loading = false;\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 성공하면 표가 표시되고 실패해도 로딩 표시가 남지 않습니다. 오류는 호출한 앱에서 안내해야 합니다."}]},{"id":"example-2","title":"예제 2. 조회 결과가 없을 때","blocks":[{"kind":"paragraph","text":"빈 배열도 정상적인 조회 결과일 수 있습니다."},{"kind":"code","source":"grid.showEmptyState = true;\ngrid.emptyMessage = '조건에 맞는 주문이 없습니다. 검색 조건을 확인하세요.';\ngrid.rowData = [];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자가 검색 조건을 바꿔야 하는지 알 수 있습니다. 아직 요청 중이라면 빈 상태보다 로딩 상태를 보여 주세요."}]},{"id":"example-3","title":"예제 3. 빠른 재조회와 깜박임","blocks":[{"kind":"paragraph","text":"짧은 요청이 반복되면 minLoadingDuration으로 표시 시간을 조절하고, 기존 데이터 유지 여부는 앱의 업무 흐름에 맞춥니다."},{"kind":"paragraph","text":"결과 확인: 필터를 연속 변경할 때 이전 응답이 나중에 도착해 최신 결과를 덮어쓰지 않도록 앱의 취소·요청 순서 처리를 함께 구현합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"빈 데이터와 서버 오류를 같은 문구로 표현하지 마세요. 재시도 가능 여부와 실패 원인을 별도로 안내합니다."},{"kind":"paragraph","text":"장시간 로딩 화면에만 의존하지 말고 진행 상태·취소·재시도 등 필요한 앱 동작을 준비합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/showEmptyState","title":"showEmptyState","description":"데이터가 없을 때 빈 상태 안내를 표시합니다. 요청 실패와 정상적인 빈 결과를 앱에서 구분합니다."},{"path":"/ko/docs/options/emptyMessage","title":"emptyMessage","description":"원본 데이터가 비어 있을 때 보여 줄 안내 문구입니다."},{"path":"/ko/docs/options/noMatchesMessage","title":"noMatchesMessage","description":"데이터는 있지만 현재 검색·필터에 맞는 행이 없을 때의 문구입니다."},{"path":"/ko/docs/options/clearFiltersLabel","title":"clearFiltersLabel","description":"빈 결과 화면에서 필터를 지우는 작업의 버튼 문구입니다."},{"path":"/ko/docs/options/loading","title":"loading","description":"앱의 데이터 요청 진행 상태를 표시합니다. 요청이 성공하거나 실패한 뒤 모두 해제하세요."},{"path":"/ko/docs/options/loadingMessage","title":"loadingMessage","description":"로딩 중 사용자에게 보여 줄 설명입니다."},{"path":"/ko/docs/options/loadingMode","title":"loadingMode","description":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다."},{"path":"/ko/docs/options/minLoadingDuration","title":"minLoadingDuration","description":"로딩 표시가 너무 짧게 깜박이지 않도록 유지할 최소 시간입니다."},{"path":"/ko/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/overlays","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/theming","id":"theming","kind":"guide","title":"화면에 맞는 테마","tier":"free","summary":"Grid 테마는 표 안의 배경·선·텍스트·선택 상태를 함께 구성합니다. 페이지 전체의 배경을 덮는 설정이 아니라 표의 읽기 환경을 맞추는 설정입니다.","examples":[{"title":"밝은 화면과 어두운 화면","explanation":"앱 테마 전환 시 Grid 테마도 명시적으로 바꿉니다.","source":"grid.theme = 'alpine';\n// 앱이 어두운 테마로 전환되었을 때:\ngrid.theme = 'alpine-dark';","result":"표의 글자·선·배경이 함께 바뀝니다. 페이지 바깥 영역의 색상은 앱의 스타일에서 관리합니다."},{"title":"밀도 조절","explanation":"데이터를 더 많이 보여 주는 것과 읽기 쉬운 간격 사이의 균형을 정합니다.","source":"grid.theme = 'balham';\ngrid.rowHeight = 36;\ngrid.height = 480;","result":"Grid 높이와 행 높이가 달라 현재 보이는 행 수가 바뀝니다. 터치 조작과 긴 텍스트도 함께 확인합니다."},{"title":"브랜드 토큰으로 확장","explanation":"theme에 {extends: 기본 테마, tokens: 토큰 객체}를 전달합니다. 사용 가능한 키는 GridTokenOverrides 타입에서 확인하고 앱의 강조색·선택색·대비를 맞춥니다.","source":null,"result":"존재하지 않는 CSS 변수명을 추측해 덮어쓰지 않습니다. 변경 후 선택 행·편집 오류·메뉴·툴팁이 모두 읽히는지 확인하세요."}],"featureId":"theming","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"alpine·balham과 각각의 dark 프리셋을 사용할 수 있습니다. 먼저 기본 프리셋을 선택하고 필요한 토큰만 덮어써 hover·선택·오류 등의 상태 대비를 유지하세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 밝은 화면과 어두운 화면","blocks":[{"kind":"paragraph","text":"앱 테마 전환 시 Grid 테마도 명시적으로 바꿉니다."},{"kind":"code","source":"grid.theme = 'alpine';\n// 앱이 어두운 테마로 전환되었을 때:\ngrid.theme = 'alpine-dark';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표의 글자·선·배경이 함께 바뀝니다. 페이지 바깥 영역의 색상은 앱의 스타일에서 관리합니다."}]},{"id":"example-2","title":"예제 2. 밀도 조절","blocks":[{"kind":"paragraph","text":"데이터를 더 많이 보여 주는 것과 읽기 쉬운 간격 사이의 균형을 정합니다."},{"kind":"code","source":"grid.theme = 'balham';\ngrid.rowHeight = 36;\ngrid.height = 480;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: Grid 높이와 행 높이가 달라 현재 보이는 행 수가 바뀝니다. 터치 조작과 긴 텍스트도 함께 확인합니다."}]},{"id":"example-3","title":"예제 3. 브랜드 토큰으로 확장","blocks":[{"kind":"paragraph","text":"theme에 {extends: 기본 테마, tokens: 토큰 객체}를 전달합니다. 사용 가능한 키는 GridTokenOverrides 타입에서 확인하고 앱의 강조색·선택색·대비를 맞춥니다."},{"kind":"paragraph","text":"결과 확인: 존재하지 않는 CSS 변수명을 추측해 덮어쓰지 않습니다. 변경 후 선택 행·편집 오류·메뉴·툴팁이 모두 읽히는지 확인하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"고정 행 높이에 비해 렌더러 내용이 높으면 잘릴 수 있습니다. 행 레이아웃과 테마 밀도를 함께 설계합니다."},{"kind":"paragraph","text":"테마 객체 내부만 수정하면 변경을 감지하지 못할 수 있습니다. 새 theme 객체와 tokens 객체를 전달하세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/theme","title":"theme","description":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다."},{"path":"/ko/docs/events/themeChanged","title":"themeChanged","description":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/theming","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/context-menu","id":"context-menu","kind":"feature","group":"panels","title":"셀 컨텍스트 메뉴","tier":"pro","summary":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다.","examples":[{"title":"기본 우클릭 메뉴","explanation":"옵션만 켜면 기본 항목을 사용합니다.","source":"grid.contextMenu = true;","result":"셀을 우클릭하여 대상 셀·행에 맞는 기본 작업을 확인합니다."},{"title":"업무 전용 메뉴","explanation":"메뉴 문구는 앱의 작업 목적을 설명하고 실제 작업은 action에서 처리합니다.","source":"grid.contextMenuItemsCallback = () => [{\n  id: 'inspect-order', label: '주문 정보 확인',\n  action: context => console.log(context),\n}];","result":"기본 항목 대신 한 개의 업무 메뉴가 보입니다. context의 행과 열을 읽고 앱 상세 화면으로 연결할 수 있습니다."},{"title":"메뉴 구성 사전 확인","explanation":"첫 표시 행의 제품 셀에 적용될 메뉴를 읽습니다.","source":"console.log(await grid.getContextMenuItems({ rowIndex: 0, field: 'product' }));","result":"조건에 따라 disabled 처리한 항목과 실제 표시 항목을 확인합니다. 메뉴를 숨기는 것만으로 서버 권한 검사를 대신하지 않습니다."}],"featureId":"context-menu","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"contextMenuItemsCallback을 설정하면 기본 메뉴에 추가되는 것이 아니라 기본 목록을 대체합니다. 기본 작업도 필요하면 반환 목록에 포함시키거나 별도의 버튼으로 제공합니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기본 우클릭 메뉴","blocks":[{"kind":"paragraph","text":"옵션만 켜면 기본 항목을 사용합니다."},{"kind":"code","source":"grid.contextMenu = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 셀을 우클릭하여 대상 셀·행에 맞는 기본 작업을 확인합니다."}]},{"id":"example-2","title":"예제 2. 업무 전용 메뉴","blocks":[{"kind":"paragraph","text":"메뉴 문구는 앱의 작업 목적을 설명하고 실제 작업은 action에서 처리합니다."},{"kind":"code","source":"grid.contextMenuItemsCallback = () => [{\n  id: 'inspect-order', label: '주문 정보 확인',\n  action: context => console.log(context),\n}];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 기본 항목 대신 한 개의 업무 메뉴가 보입니다. context의 행과 열을 읽고 앱 상세 화면으로 연결할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 메뉴 구성 사전 확인","blocks":[{"kind":"paragraph","text":"첫 표시 행의 제품 셀에 적용될 메뉴를 읽습니다."},{"kind":"code","source":"console.log(await grid.getContextMenuItems({ rowIndex: 0, field: 'product' }));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 조건에 따라 disabled 처리한 항목과 실제 표시 항목을 확인합니다. 메뉴를 숨기는 것만으로 서버 권한 검사를 대신하지 않습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"사용자 정의 메뉴의 action에서 화면 인덱스를 장기 보관하지 마세요. 작업을 시작할 때 안정적인 행 ID를 읽습니다."},{"kind":"paragraph","text":"우클릭을 사용할 수 없는 환경에서도 핵심 작업이 가능하도록 접근 경로를 제공합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/contextMenu","title":"contextMenu","description":"셀 우클릭 메뉴를 표시합니다. 기본 복사·행 복사·CSV 작업을 사용하거나 콜백으로 목록을 대체할 수 있습니다."},{"path":"/ko/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},{"path":"/ko/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다."},{"path":"/ko/docs/events/contextMenuItemClicked","title":"contextMenuItemClicked","description":"셀 우클릭 메뉴 항목을 실행했을 때 발생합니다. 항목 ID와 대상 셀 위치를 읽습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/context-menu","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/column-menu","id":"column-menu","kind":"feature","group":"panels","title":"열 메뉴","tier":"pro","summary":"열 메뉴는 현재 열에 대한 정렬·필터·표시 설정을 가까운 위치에서 제공합니다. 행의 업무 작업은 셀 컨텍스트 메뉴, 전체 열 목록 관리는 도구 패널과 구분합니다.","examples":[{"title":"열 머리글 메뉴 켜기","explanation":"정렬과 크기 조정이 가능한 표에 열 메뉴를 추가합니다.","source":"grid.columnMenu = true;\ngrid.defaultColDef = { sortable: true, resizable: true };","result":"제품·수량 등 각 머리글의 메뉴를 열어 해당 열을 대상으로 작업합니다."},{"title":"관리자가 허용한 작업만 제공","explanation":"columnMenuItems의 GridColumnMenuContext를 읽고 GridColumnMenuItem 배열을 반환합니다. 읽기 전용 보고서에서는 불필요한 변경 작업을 제외하고 필터·정렬 중심으로 구성합니다.","source":null,"result":"메뉴 설정과 실제 API 제한이 일치하는지 확인합니다. 메뉴를 제거해도 앱에서 API를 호출할 수 있으므로 권한은 별도로 검증합니다."},{"title":"열 숨김 후 다시 찾기","explanation":"사용자가 열 메뉴로 열을 숨기는 구성을 제공한다면 sideBar의 columns 패널이나 별도 초기화 버튼도 제공합니다.","source":"grid.sideBar = 'columns';","result":"숨긴 열을 되살릴 경로가 생깁니다. 마지막으로 필요한 식별 열까지 사라져 표의 의미를 잃지 않게 기본 구성을 정합니다."}],"featureId":"column-menu","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"columnMenu로 메뉴를 켜고 columnMenuItems 콜백으로 항목 구성을 조절합니다. 개별 열의 정렬·필터·고정 가능 여부와 함께 설정해야 사용자가 누른 작업이 실제로 적용됩니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 열 머리글 메뉴 켜기","blocks":[{"kind":"paragraph","text":"정렬과 크기 조정이 가능한 표에 열 메뉴를 추가합니다."},{"kind":"code","source":"grid.columnMenu = true;\ngrid.defaultColDef = { sortable: true, resizable: true };","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 제품·수량 등 각 머리글의 메뉴를 열어 해당 열을 대상으로 작업합니다."}]},{"id":"example-2","title":"예제 2. 관리자가 허용한 작업만 제공","blocks":[{"kind":"paragraph","text":"columnMenuItems의 GridColumnMenuContext를 읽고 GridColumnMenuItem 배열을 반환합니다. 읽기 전용 보고서에서는 불필요한 변경 작업을 제외하고 필터·정렬 중심으로 구성합니다."},{"kind":"paragraph","text":"결과 확인: 메뉴 설정과 실제 API 제한이 일치하는지 확인합니다. 메뉴를 제거해도 앱에서 API를 호출할 수 있으므로 권한은 별도로 검증합니다."}]},{"id":"example-3","title":"예제 3. 열 숨김 후 다시 찾기","blocks":[{"kind":"paragraph","text":"사용자가 열 메뉴로 열을 숨기는 구성을 제공한다면 sideBar의 columns 패널이나 별도 초기화 버튼도 제공합니다."},{"kind":"code","source":"grid.sideBar = 'columns';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 숨긴 열을 되살릴 경로가 생깁니다. 마지막으로 필요한 식별 열까지 사라져 표의 의미를 잃지 않게 기본 구성을 정합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"머리글 클릭 정렬과 메뉴 열기가 충돌하지 않는지 키보드와 마우스로 확인하세요."},{"kind":"paragraph","text":"열 메뉴의 상태는 실제 열 객체와 열 상태 API로 확인합니다. 처음 작성한 columnDefs만으로 현재 화면 상태를 판단하지 마세요."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columnMenu","title":"columnMenu","description":"열 머리글에서 열에 관한 작업 메뉴를 사용할 수 있게 합니다."},{"path":"/ko/docs/options/columnMenuItems","title":"columnMenuItems","description":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/column-menu","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/tool-panels","id":"tool-panels","kind":"feature","group":"panels","title":"도구 패널","tier":"pro","summary":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다.","examples":[{"title":"열 관리부터 시작","explanation":"열 숨김·표시를 자주 바꾸는 보고서에 적합합니다.","source":"grid.sideBar = 'columns';","result":"사용자가 전체 열 목록을 보고 화면에 필요한 열을 선택할 수 있습니다."},{"title":"필터 도구 열기","explanation":"앱의 검색 설정 버튼에서 패널을 엽니다.","source":"grid.sideBar = true;\nconst opened = await grid.openToolPanel('filters');\nconsole.log(opened, await grid.getOpenedToolPanel());","result":"반환값으로 실제 열렸는지 확인합니다. 없는 패널 ID를 보냈다고 패널이 새로 생성되는 것은 아닙니다."},{"title":"좁은 화면에서 공간 확보","explanation":"설정이 끝나면 패널을 닫고 표에 공간을 돌려줍니다.","source":"await grid.closeToolPanel();","result":"필터 자체를 지우는 동작과 패널을 닫는 동작은 다릅니다. 적용 중인 필터는 별도로 안내하세요."}],"featureId":"tool-panels","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"sideBar를 true로 지정하면 패널 탭을 제공하고, columns 또는 filters 문자열로 지정하면 해당 패널을 처음부터 엽니다. 앱에서도 공개 메서드로 패널을 열고 닫을 수 있습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 열 관리부터 시작","blocks":[{"kind":"paragraph","text":"열 숨김·표시를 자주 바꾸는 보고서에 적합합니다."},{"kind":"code","source":"grid.sideBar = 'columns';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 사용자가 전체 열 목록을 보고 화면에 필요한 열을 선택할 수 있습니다."}]},{"id":"example-2","title":"예제 2. 필터 도구 열기","blocks":[{"kind":"paragraph","text":"앱의 검색 설정 버튼에서 패널을 엽니다."},{"kind":"code","source":"grid.sideBar = true;\nconst opened = await grid.openToolPanel('filters');\nconsole.log(opened, await grid.getOpenedToolPanel());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 반환값으로 실제 열렸는지 확인합니다. 없는 패널 ID를 보냈다고 패널이 새로 생성되는 것은 아닙니다."}]},{"id":"example-3","title":"예제 3. 좁은 화면에서 공간 확보","blocks":[{"kind":"paragraph","text":"설정이 끝나면 패널을 닫고 표에 공간을 돌려줍니다."},{"kind":"code","source":"await grid.closeToolPanel();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 필터 자체를 지우는 동작과 패널을 닫는 동작은 다릅니다. 적용 중인 필터는 별도로 안내하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"앱의 외부 설정 화면과 Grid 패널이 같은 값을 서로 덮어쓰지 않도록 상태 변경 이벤트를 통해 동기화합니다."},{"kind":"paragraph","text":"모바일에서도 패널을 닫고 표로 돌아오는 경로가 보이는지 확인합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/sideBar","title":"sideBar","description":"열·필터 도구 패널과 기본 열림 패널을 구성합니다. true는 탭을 제공하고 문자열은 지정 패널을 엽니다."},{"path":"/ko/docs/methods/openToolPanel","title":"openToolPanel","description":"ID로 열·필터 도구 패널을 열고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/closeToolPanel","title":"closeToolPanel","description":"현재 열린 열·필터 도구 패널을 닫습니다. 적용 중인 설정은 지우지 않습니다."},{"path":"/ko/docs/methods/getOpenedToolPanel","title":"getOpenedToolPanel","description":"현재 열린 도구 패널 ID 또는 null을 읽습니다."},{"path":"/ko/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/tool-panels","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/status-bar","id":"status-bar","kind":"feature","group":"panels","title":"상태와 집계","tier":"pro","summary":"상태 바는 현재 표의 행 수나 범위 계산 결과처럼 작업 결과를 짧게 보여 주는 영역입니다. 데이터를 편집하는 도구가 아니라 사용자가 보고 있는 범위를 이해하도록 돕습니다.","examples":[{"title":"기본 행 수 안내","explanation":"표 아래에 기본 상태 정보를 표시합니다.","source":"grid.statusBar = true;","result":"현재 표의 행 수 안내가 나타납니다. true가 모든 종류의 집계 패널을 켜는 옵션은 아닙니다."},{"title":"전체와 필터 결과 분리","explanation":"전체 행 수와 필터 통과 행 수를 각각 표시합니다.","source":"grid.statusBar = { panels: [\n  { panel: 'totalRows', align: 'left' },\n  { panel: 'filteredRows', align: 'right' },\n] };","result":"검색 후 숫자를 비교해 데이터가 줄어든 이유를 이해할 수 있습니다."},{"title":"원격 데이터 범위 안내","explanation":"서버 행 모델에서는 전체 서버 데이터 수, 로드된 행 수, 현재 페이지 수가 다를 수 있습니다. 서버의 확정된 rowCount와 로드 범위를 앱에서도 구분해 표시합니다.","source":null,"result":"캐시에 있는 행만으로 서버 전체 합계를 계산했다고 안내하지 않습니다. 전체 집계가 필요하면 서버 집계 결과를 별도로 사용합니다."}],"featureId":"status-bar","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"true는 기본 행 수 안내를 켭니다. 여러 패널을 명시할 때는 지원하는 패널 이름을 사용하고 전체 행·필터 통과 행·선택 행을 같은 숫자로 해석하지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기본 행 수 안내","blocks":[{"kind":"paragraph","text":"표 아래에 기본 상태 정보를 표시합니다."},{"kind":"code","source":"grid.statusBar = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 현재 표의 행 수 안내가 나타납니다. true가 모든 종류의 집계 패널을 켜는 옵션은 아닙니다."}]},{"id":"example-2","title":"예제 2. 전체와 필터 결과 분리","blocks":[{"kind":"paragraph","text":"전체 행 수와 필터 통과 행 수를 각각 표시합니다."},{"kind":"code","source":"grid.statusBar = { panels: [\n  { panel: 'totalRows', align: 'left' },\n  { panel: 'filteredRows', align: 'right' },\n] };","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 검색 후 숫자를 비교해 데이터가 줄어든 이유를 이해할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 원격 데이터 범위 안내","blocks":[{"kind":"paragraph","text":"서버 행 모델에서는 전체 서버 데이터 수, 로드된 행 수, 현재 페이지 수가 다를 수 있습니다. 서버의 확정된 rowCount와 로드 범위를 앱에서도 구분해 표시합니다."},{"kind":"paragraph","text":"결과 확인: 캐시에 있는 행만으로 서버 전체 합계를 계산했다고 안내하지 않습니다. 전체 집계가 필요하면 서버 집계 결과를 별도로 사용합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"상태 바는 데이터 검증이나 저장 성공 알림을 대신하지 않습니다. 처리 결과가 중요하면 별도 메시지를 제공합니다."},{"kind":"paragraph","text":"사용자에게 합계·평균을 보여 주기 전에 숫자 열의 실제 타입과 빈 값 처리 기준을 정합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/statusBar","title":"statusBar","description":"기본 행 수 안내 또는 지정한 상태 패널을 표 아래에 표시합니다. true가 모든 집계 패널을 켜는 것은 아닙니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/status-bar","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/csv-import","id":"csv-import","kind":"feature","group":"import-export","title":"CSV 가져오기","summary":"CSV 가져오기는 구분자로 나뉜 텍스트를 새 열과 행으로 바꿉니다. 기존 표에 일부 행을 추가하는 트랜잭션과 달리 importCsvText는 columnDefs와 rowData를 교체합니다.","examples":[{"title":"머리글이 있는 CSV","explanation":"데이터를 교체해도 되는 새 Grid에서 실행합니다.","source":"const result = await grid.importCsvText('product,quantity\\nAtlas,24\\nBeacon,36', { hasHeader: true });\nconsole.log(result.rowCount, result.columnCount);","result":"제품과 수량에 해당하는 열 및 두 개의 데이터 행이 생깁니다. 기존 열 너비·편집기 설정은 필요하면 새 열에 다시 적용합니다."},{"title":"탭으로 구분된 파일","explanation":"스프레드시트에서 복사한 탭 구분 텍스트를 전달합니다.","source":"await grid.importCsvText('product\\tquantity\\nAtlas\\t24', { delimiter: '\\t', hasHeader: true });","result":"쉼표가 포함된 문자열을 잘못 나누지 않도록 실제 파일 형식과 구분자를 맞춥니다."},{"title":"교체 전 확인 흐름","explanation":"사용자가 파일을 고른 뒤 파일명·예상 열·필수 필드 오류를 먼저 안내합니다. 기존 작업이 있으면 데이터 스냅샷이나 앱 저장을 완료한 뒤 교체합니다.","source":null,"result":"가져오기 완료 이벤트 csvImported에서 행·열 수를 읽어 결과를 안내합니다. 단순 추가가 목적이면 파싱·검증한 행을 applyTransaction({add: …})로 전달하는 별도 흐름을 구성합니다."}],"featureId":"csv-import","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"열 제목이 있는지, 구분자가 무엇인지 먼저 확인합니다. CSV 문자열의 숫자·날짜가 업무상 어떤 타입이어야 하는지와 필수 열 검증은 가져오기 과정에서 함께 설계해야 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 머리글이 있는 CSV","blocks":[{"kind":"paragraph","text":"데이터를 교체해도 되는 새 Grid에서 실행합니다."},{"kind":"code","source":"const result = await grid.importCsvText('product,quantity\\nAtlas,24\\nBeacon,36', { hasHeader: true });\nconsole.log(result.rowCount, result.columnCount);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 제품과 수량에 해당하는 열 및 두 개의 데이터 행이 생깁니다. 기존 열 너비·편집기 설정은 필요하면 새 열에 다시 적용합니다."}]},{"id":"example-2","title":"예제 2. 탭으로 구분된 파일","blocks":[{"kind":"paragraph","text":"스프레드시트에서 복사한 탭 구분 텍스트를 전달합니다."},{"kind":"code","source":"await grid.importCsvText('product\\tquantity\\nAtlas\\t24', { delimiter: '\\t', hasHeader: true });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 쉼표가 포함된 문자열을 잘못 나누지 않도록 실제 파일 형식과 구분자를 맞춥니다."}]},{"id":"example-3","title":"예제 3. 교체 전 확인 흐름","blocks":[{"kind":"paragraph","text":"사용자가 파일을 고른 뒤 파일명·예상 열·필수 필드 오류를 먼저 안내합니다. 기존 작업이 있으면 데이터 스냅샷이나 앱 저장을 완료한 뒤 교체합니다."},{"kind":"paragraph","text":"결과 확인: 가져오기 완료 이벤트 csvImported에서 행·열 수를 읽어 결과를 안내합니다. 단순 추가가 목적이면 파싱·검증한 행을 applyTransaction({add: …})로 전달하는 별도 흐름을 구성합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"가져오기는 서버 저장이 아닙니다. 표에 표시된 데이터를 서버에 반영하는 별도 승인·저장 단계를 앱에서 만듭니다."},{"kind":"paragraph","text":"행 ID 열을 검증하지 않고 같은 ID의 행을 여러 개 만들면 이후 선택·수정·메모 연결이 불안정해집니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/csvImport","title":"csvImport","description":"CSV 가져오기 버튼과 열 매핑 흐름을 제공합니다. 가져오기로 기존 열·데이터가 교체되는지 사용자에게 안내하세요."},{"path":"/ko/docs/methods/importCsvText","title":"importCsvText","description":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요."},{"path":"/ko/docs/events/csvImported","title":"csvImported","description":"CSV 가져오기를 마쳤을 때 발생합니다. 실제 적용된 행 수와 열 수를 사용자에게 안내합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/csv-import","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/xlsx-import","id":"xlsx-import","kind":"feature","group":"import-export","title":"Excel 가져오기","summary":"XLSX 가져오기는 파일을 워크북으로 읽고 선택한 시트를 Grid용 열·행 스냅샷으로 변환합니다. 워크북 전체 파싱 결과와 화면용 스냅샷은 다른 데이터입니다.","examples":[{"title":"선택한 파일 읽기","explanation":"file은 사용자가 파일 입력으로 선택한 File 객체입니다.","source":"const parsed = await grid.importDataFromXlsx(await file.arrayBuffer());\nconsole.log(parsed.workbook, parsed.sheets);","result":"반환값에서 원본 워크북과 시트 정보를 확인합니다. parsed.snapshot이라는 반환 필드는 없습니다."},{"title":"변환된 시트를 표에 적용","explanation":"가져오기를 실행하기 전에 완료 이벤트를 구독합니다.","source":"grid.addEventListener('xlsxImported', event => {\n  const { snapshot, sheetName } = event.detail;\n  grid.columnDefs = [...snapshot.columnDefs];\n  grid.rowData = [...snapshot.rowData];\n  console.log(sheetName, snapshot.rowData.length);\n});","result":"이벤트가 제공한 변환 결과를 새 배열로 전달해 표에 표시합니다. 기존 작업의 교체 여부를 결정한 뒤 이 구독을 실행하세요."},{"title":"지정한 시트 선택","explanation":"워크북에 Orders라는 시트가 있는 경우 선택합니다.","source":"await grid.importDataFromXlsx(await file.arrayBuffer(), { sheetName: 'Orders' });","result":"선택한 시트만 화면용 스냅샷으로 변환됩니다. 시트 존재 여부·열 구조·지원하는 수식 및 스타일 변환 범위를 파일별로 확인합니다."}],"featureId":"xlsx-import","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"importDataFromXlsx의 반환값은 XlsxImportResult입니다. Grid에 사용할 snapshot은 xlsxImported 이벤트의 detail에서 읽습니다. 표 적용 여부를 앱에서 명시적으로 처리해 기존 편집 데이터를 실수로 덮어쓰지 않게 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 선택한 파일 읽기","blocks":[{"kind":"paragraph","text":"file은 사용자가 파일 입력으로 선택한 File 객체입니다."},{"kind":"code","source":"const parsed = await grid.importDataFromXlsx(await file.arrayBuffer());\nconsole.log(parsed.workbook, parsed.sheets);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 반환값에서 원본 워크북과 시트 정보를 확인합니다. parsed.snapshot이라는 반환 필드는 없습니다."}]},{"id":"example-2","title":"예제 2. 변환된 시트를 표에 적용","blocks":[{"kind":"paragraph","text":"가져오기를 실행하기 전에 완료 이벤트를 구독합니다."},{"kind":"code","source":"grid.addEventListener('xlsxImported', event => {\n  const { snapshot, sheetName } = event.detail;\n  grid.columnDefs = [...snapshot.columnDefs];\n  grid.rowData = [...snapshot.rowData];\n  console.log(sheetName, snapshot.rowData.length);\n});","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이벤트가 제공한 변환 결과를 새 배열로 전달해 표에 표시합니다. 기존 작업의 교체 여부를 결정한 뒤 이 구독을 실행하세요."}]},{"id":"example-3","title":"예제 3. 지정한 시트 선택","blocks":[{"kind":"paragraph","text":"워크북에 Orders라는 시트가 있는 경우 선택합니다."},{"kind":"code","source":"await grid.importDataFromXlsx(await file.arrayBuffer(), { sheetName: 'Orders' });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 선택한 시트만 화면용 스냅샷으로 변환됩니다. 시트 존재 여부·열 구조·지원하는 수식 및 스타일 변환 범위를 파일별로 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"Excel 화면과 모든 서식·수식·병합이 완전히 같은 모양으로 재현된다고 가정하지 마세요. 변환 결과를 확인하고 필요한 열 설정을 다시 적용합니다."},{"kind":"paragraph","text":"대용량 파일을 처리하는 동안 로딩과 오류 상태를 제공하고, 이벤트 구독이 중복되어 한 번의 가져오기가 여러 번 적용되지 않게 정리합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."},{"path":"/ko/docs/events/xlsxImported","title":"xlsxImported","description":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/xlsx-import","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/csv-export","id":"csv-export","kind":"feature","group":"import-export","title":"CSV 내보내기","tier":"free","summary":"CSV 내보내기는 표 데이터를 다른 도구로 넘기기 쉬운 텍스트 파일로 만듭니다. 셀 색·열 너비·상세 패널 같은 화면 모양을 보존하는 형식은 아닙니다.","examples":[{"title":"파일 내려받기","explanation":"브라우저의 사용자 버튼 동작에서 호출합니다.","source":"const result = await grid.exportDataAsCsv({ fileName: 'orders.csv' });\nconsole.log(result.rowCount, result.columnCount);","result":"CSV 다운로드가 시작되고 실제 출력 행·열 수를 확인할 수 있습니다."},{"title":"문자열 미리보기","explanation":"다운로드 대신 앱의 미리보기나 승인 단계에 사용합니다.","source":"const result = await grid.getDataAsCsv();\nconsole.log(result.csv);","result":"생성된 CSV 텍스트를 얻습니다. 결과 객체 전체를 문자열로 바꾸면 CSV 파일이 되지 않습니다."},{"title":"출력 범위 검토","explanation":"필터·숨긴 열·선택 행을 함께 사용하는 보고서는 CsvExportOptions에서 원하는 범위를 명시하고 소량의 알려진 데이터로 행 수와 내용을 대조합니다.","source":null,"result":"서버의 미로드 행까지 자동으로 포함한다고 가정하지 않습니다. 서버 전체 내보내기는 같은 조회 조건을 사용하는 서버 작업으로 별도 구현합니다."}],"featureId":"csv-export","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"다운로드는 exportDataAsCsv, 문자열을 앱에서 처리하려면 getDataAsCsv를 사용합니다. 후자는 문자열 자체가 아니라 csv와 행·열 수가 담긴 결과 객체를 반환합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 파일 내려받기","blocks":[{"kind":"paragraph","text":"브라우저의 사용자 버튼 동작에서 호출합니다."},{"kind":"code","source":"const result = await grid.exportDataAsCsv({ fileName: 'orders.csv' });\nconsole.log(result.rowCount, result.columnCount);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: CSV 다운로드가 시작되고 실제 출력 행·열 수를 확인할 수 있습니다."}]},{"id":"example-2","title":"예제 2. 문자열 미리보기","blocks":[{"kind":"paragraph","text":"다운로드 대신 앱의 미리보기나 승인 단계에 사용합니다."},{"kind":"code","source":"const result = await grid.getDataAsCsv();\nconsole.log(result.csv);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 생성된 CSV 텍스트를 얻습니다. 결과 객체 전체를 문자열로 바꾸면 CSV 파일이 되지 않습니다."}]},{"id":"example-3","title":"예제 3. 출력 범위 검토","blocks":[{"kind":"paragraph","text":"필터·숨긴 열·선택 행을 함께 사용하는 보고서는 CsvExportOptions에서 원하는 범위를 명시하고 소량의 알려진 데이터로 행 수와 내용을 대조합니다."},{"kind":"paragraph","text":"결과 확인: 서버의 미로드 행까지 자동으로 포함한다고 가정하지 않습니다. 서버 전체 내보내기는 같은 조회 조건을 사용하는 서버 작업으로 별도 구현합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"사용자 입력이 = 같은 스프레드시트 수식 문자로 시작하는 경우 출력 보호 정책을 확인하세요. 화면의 렌더러 모양이 그대로 CSV에 담기는 것은 아닙니다."},{"kind":"paragraph","text":"다운로드 권한·민감한 열의 읽기 정책과 실제 파일 내용을 함께 확인합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."},{"path":"/ko/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/csv-export","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/excel-export","id":"excel-export","kind":"feature","group":"import-export","title":"Excel 내보내기","tier":"pro","summary":"Excel 내보내기는 XLSX 바이트를 생성하거나 파일로 내려받습니다. CSV보다 시트 이름과 워크북 형식이 필요한 교환 작업에 적합하며 Pro 기능입니다.","examples":[{"title":"주문 파일 다운로드","explanation":"파일명과 시트명을 사용자가 이해할 수 있게 지정합니다.","source":"await grid.exportDataAsExcel({ fileName: 'orders.xlsx', sheetName: '주문' });","result":"XLSX 파일의 주문 시트에서 결과를 확인합니다."},{"title":"선택한 주문만 전달","explanation":"먼저 행을 선택한 뒤 범위를 제한합니다.","source":"await grid.exportDataAsExcel({ onlySelected: true, columnKeys: ['product', 'quantity'] });","result":"선택 행의 지정 열만 출력합니다. 선택이 없는 경우의 결과도 앱의 안내 문구와 함께 확인하세요."},{"title":"파일 바이트 사용","explanation":"첨부파일 미리보기나 앱 업로드 단계에 연결할 수 있습니다.","source":"const bytes = await grid.getDataAsExcel({ sheetName: 'Orders' });\nconst blob = new Blob([bytes], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\nconsole.log(blob.size);","result":"다운로드하지 않고 파일 객체를 만들 수 있습니다. 실제 외부 업로드는 앱에서 구현합니다."}],"featureId":"excel-export","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"exportDataAsExcel은 다운로드하고 getDataAsExcel은 Uint8Array를 반환합니다. 앱의 업로드·첨부 과정에 연결할 때는 바이트를 사용하고 텍스트로 해석하지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 주문 파일 다운로드","blocks":[{"kind":"paragraph","text":"파일명과 시트명을 사용자가 이해할 수 있게 지정합니다."},{"kind":"code","source":"await grid.exportDataAsExcel({ fileName: 'orders.xlsx', sheetName: '주문' });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: XLSX 파일의 주문 시트에서 결과를 확인합니다."}]},{"id":"example-2","title":"예제 2. 선택한 주문만 전달","blocks":[{"kind":"paragraph","text":"먼저 행을 선택한 뒤 범위를 제한합니다."},{"kind":"code","source":"await grid.exportDataAsExcel({ onlySelected: true, columnKeys: ['product', 'quantity'] });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 선택 행의 지정 열만 출력합니다. 선택이 없는 경우의 결과도 앱의 안내 문구와 함께 확인하세요."}]},{"id":"example-3","title":"예제 3. 파일 바이트 사용","blocks":[{"kind":"paragraph","text":"첨부파일 미리보기나 앱 업로드 단계에 연결할 수 있습니다."},{"kind":"code","source":"const bytes = await grid.getDataAsExcel({ sheetName: 'Orders' });\nconst blob = new Blob([bytes], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\nconsole.log(blob.size);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 다운로드하지 않고 파일 객체를 만들 수 있습니다. 실제 외부 업로드는 앱에서 구현합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"Grid의 임의 HTML 렌더러나 앱 버튼을 Excel 셀 모양으로 재현한다고 기대하지 마세요. 교환할 데이터와 서식 범위를 확인합니다."},{"kind":"paragraph","text":"서버 전체 데이터 출력과 현재 Grid의 출력은 범위가 다릅니다. 대용량 보고서는 서버에서 생성하는 방식을 검토합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsExcel","title":"getDataAsExcel","description":"XLSX 파일 내용을 Uint8Array 바이트로 생성합니다. 앱의 첨부·업로드 등에 사용할 수 있습니다."},{"path":"/ko/docs/methods/exportDataAsExcel","title":"exportDataAsExcel","description":"지정한 시트명·열·선택 조건으로 XLSX 파일을 내려받습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/excel-export","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/pdf-export","id":"pdf-export","kind":"feature","group":"import-export","title":"PDF 내보내기","tier":"pro","summary":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다.","examples":[{"title":"한글 글꼴 연결","explanation":"아래 URL은 앱이 실제로 호스팅하는 글꼴 파일 경로로 바꿉니다.","source":"grid.pdfFontUrl = '/fonts/NotoSansKR-Regular.ttf';\nawait grid.exportDataAsPdf({ fileName: 'orders.pdf' });","result":"한글 제목과 값이 네모 문자로 깨지지 않는지 생성된 PDF에서 확인합니다."},{"title":"다운로드 전 결과 확인","explanation":"다운로드 없이 PDF 결과 객체를 얻습니다.","source":"const result = await grid.getDataAsPdf();\nconsole.log(result);","result":"PdfExportResult 계약에 따라 결과를 처리합니다. 문자열이나 XLSX 바이트와 같은 타입이라고 가정하지 않습니다."},{"title":"넓은 표의 읽기 순서","explanation":"출력할 열과 페이지 관련 옵션을 SyGridPdfExportOptions에서 선택합니다. 긴 제품명·한글·음수·빈 값·다수 페이지가 있는 샘플을 준비해 결과를 검토합니다.","source":null,"result":"페이지 경계에서 머리글과 데이터가 읽히는지, 필요한 열이 잘리지 않는지 PDF 뷰어에서 확인합니다. 화면 캡처와는 다른 문서 출력입니다."}],"featureId":"pdf-export","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"한글과 CJK 문자는 지원 글꼴이 필요합니다. 앱이 제공하는 TTF/OTF URL이나 명시적인 fontBytes를 사용하고, 브라우저 로컬 글꼴에 접근할 수 있다는 가정에만 의존하지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 한글 글꼴 연결","blocks":[{"kind":"paragraph","text":"아래 URL은 앱이 실제로 호스팅하는 글꼴 파일 경로로 바꿉니다."},{"kind":"code","source":"grid.pdfFontUrl = '/fonts/NotoSansKR-Regular.ttf';\nawait grid.exportDataAsPdf({ fileName: 'orders.pdf' });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 한글 제목과 값이 네모 문자로 깨지지 않는지 생성된 PDF에서 확인합니다."}]},{"id":"example-2","title":"예제 2. 다운로드 전 결과 확인","blocks":[{"kind":"paragraph","text":"다운로드 없이 PDF 결과 객체를 얻습니다."},{"kind":"code","source":"const result = await grid.getDataAsPdf();\nconsole.log(result);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: PdfExportResult 계약에 따라 결과를 처리합니다. 문자열이나 XLSX 바이트와 같은 타입이라고 가정하지 않습니다."}]},{"id":"example-3","title":"예제 3. 넓은 표의 읽기 순서","blocks":[{"kind":"paragraph","text":"출력할 열과 페이지 관련 옵션을 SyGridPdfExportOptions에서 선택합니다. 긴 제품명·한글·음수·빈 값·다수 페이지가 있는 샘플을 준비해 결과를 검토합니다."},{"kind":"paragraph","text":"결과 확인: 페이지 경계에서 머리글과 데이터가 읽히는지, 필요한 열이 잘리지 않는지 PDF 뷰어에서 확인합니다. 화면 캡처와는 다른 문서 출력입니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"폰트 URL의 접근·CORS·라이선스 조건은 앱에서 준비합니다. 개발 환경에서만 읽히는 경로를 배포 문서에 사용하지 마세요."},{"kind":"paragraph","text":"자동 글꼴 탐색이 실패하는 환경에서도 결과를 확인하고 사용자에게 오류 또는 대체 경로를 안내합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/pdfFontUrl","title":"pdfFontUrl","description":"한글 등 PDF 기본 글꼴에 없는 문자를 출력할 앱 호스팅 TTF/OTF 파일 주소입니다."},{"path":"/ko/docs/options/pdfAutoFont","title":"pdfAutoFont","description":"fontBytes가 없을 때 PDF 글꼴을 자동으로 찾습니다. 지정한 pdfFontUrl을 먼저 사용하고 가능한 환경에서 로컬 글꼴 접근을 시도합니다."},{"path":"/ko/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."},{"path":"/ko/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/pdf-export","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/collaboration","id":"collaboration","kind":"feature","group":"application","title":"실시간 협업","tier":"pro","summary":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다.","examples":[{"title":"같은 페이지에서 연결 실험","explanation":"같은 데이터 ID 규칙을 가진 두 Grid에 같은 방 이름을 지정합니다.","source":"grid.collaborationRoom = 'orders-review';\ngrid.collabUserName = '검토자 A';\ngrid.collabUserColor = '#2459d3';","result":"같은 페이지의 다른 참가자와 편집 동기화를 확인합니다. 실제 원격 서비스에 연결된 상태라고 설명하면 안 됩니다."},{"title":"원격 협업 연결","explanation":"앱의 인증된 WebSocket 주소를 realtimeUrl에 지정하고 참여·해제 흐름을 구현합니다. 서로 다른 방의 사용자가 데이터를 읽지 못하도록 서버에서도 방 권한을 검사합니다.","source":null,"result":"네트워크 끊김과 재연결 시 syncStatusChanged 이벤트로 상태를 안내하고, 저장 완료와 단순 전달 완료를 구분합니다."},{"title":"동기화 결과 읽기","explanation":"원격 편집과 충돌 해결 결과를 앱의 활동 내역에 연결합니다.","source":"grid.addEventListener('remoteEditApplied', event => console.log(event.detail));\ngrid.addEventListener('collabConflictResolved', event => console.log(event.detail));","result":"동시에 같은 셀을 수정한 결과를 실제 detail로 확인합니다. 같은 변경을 앱이 다시 전송해 순환하지 않도록 변경 출처를 구분합니다."}],"featureId":"collaboration","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"realtimeUrl을 생략하면 같은 프로세스·페이지의 데모 용도입니다. 여러 사용자 환경은 앱이 제공하는 WebSocket 서비스와 인증·방 접근 권한·저장 정책을 함께 구성해야 합니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 같은 페이지에서 연결 실험","blocks":[{"kind":"paragraph","text":"같은 데이터 ID 규칙을 가진 두 Grid에 같은 방 이름을 지정합니다."},{"kind":"code","source":"grid.collaborationRoom = 'orders-review';\ngrid.collabUserName = '검토자 A';\ngrid.collabUserColor = '#2459d3';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 같은 페이지의 다른 참가자와 편집 동기화를 확인합니다. 실제 원격 서비스에 연결된 상태라고 설명하면 안 됩니다."}]},{"id":"example-2","title":"예제 2. 원격 협업 연결","blocks":[{"kind":"paragraph","text":"앱의 인증된 WebSocket 주소를 realtimeUrl에 지정하고 참여·해제 흐름을 구현합니다. 서로 다른 방의 사용자가 데이터를 읽지 못하도록 서버에서도 방 권한을 검사합니다."},{"kind":"paragraph","text":"결과 확인: 네트워크 끊김과 재연결 시 syncStatusChanged 이벤트로 상태를 안내하고, 저장 완료와 단순 전달 완료를 구분합니다."}]},{"id":"example-3","title":"예제 3. 동기화 결과 읽기","blocks":[{"kind":"paragraph","text":"원격 편집과 충돌 해결 결과를 앱의 활동 내역에 연결합니다."},{"kind":"code","source":"grid.addEventListener('remoteEditApplied', event => console.log(event.detail));\ngrid.addEventListener('collabConflictResolved', event => console.log(event.detail));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 동시에 같은 셀을 수정한 결과를 실제 detail로 확인합니다. 같은 변경을 앱이 다시 전송해 순환하지 않도록 변경 출처를 구분합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"모든 참가자는 동일한 rowId·열 식별자 규칙을 사용해야 합니다. 화면 인덱스로 원격 변경을 연결하지 마세요."},{"kind":"paragraph","text":"협업 상태만으로 영구 저장·감사 보존이 완료되었다고 안내하지 마세요. 데이터 저장 정책은 앱 서버와 연결합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/collaborationRoom","title":"collaborationRoom","description":"편집과 참여 상태를 공유할 협업 방 식별자입니다. 여러 기기 연결에는 원격 서비스 설정이 필요합니다."},{"path":"/ko/docs/options/realtimeUrl","title":"realtimeUrl","description":"원격 협업을 연결할 WebSocket 주소입니다. 생략하면 같은 페이지·프로세스의 데모 범위로 사용합니다."},{"path":"/ko/docs/options/collabUserName","title":"collabUserName","description":"다른 협업 참가자에게 표시할 사용자 이름입니다."},{"path":"/ko/docs/options/collabUserColor","title":"collabUserColor","description":"협업 참가자의 커서·표시에 사용할 구분 색상입니다."},{"path":"/ko/docs/options/collabPresence","title":"collabPresence","description":"협업 참가자의 현재 위치와 참여 상태 표시를 설정합니다."},{"path":"/ko/docs/options/collabConflictUi","title":"collabConflictUi","description":"동시 편집 충돌에 대한 사용자 안내 UI를 설정합니다."},{"path":"/ko/docs/options/collabPersistence","title":"collabPersistence","description":"협업 상태의 로컬 영속 저장을 사용하지 않을지 IndexedDB를 사용할지 선택합니다. 서버 백업을 대신하지 않습니다."},{"path":"/ko/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다."},{"path":"/ko/docs/methods/disconnectCollabRoom","title":"disconnectCollabRoom","description":"현재 협업 방 연결을 해제합니다."},{"path":"/ko/docs/methods/getSyncStatus","title":"getSyncStatus","description":"현재 협업 연결·동기화 상태를 읽습니다."},{"path":"/ko/docs/methods/getCollaborators","title":"getCollaborators","description":"현재 협업 참가자 정보를 읽습니다."},{"path":"/ko/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다."},{"path":"/ko/docs/events/presenceChanged","title":"presenceChanged","description":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다."},{"path":"/ko/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"협업 방에 참가자가 들어왔을 때 발생합니다."},{"path":"/ko/docs/events/collaboratorLeft","title":"collaboratorLeft","description":"협업 방에서 참가자가 나갔을 때 발생합니다. ID로 앱의 참가자 목록을 갱신합니다."},{"path":"/ko/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/collaboration","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/audit-log","id":"audit-log","kind":"feature","group":"application","title":"변경 이력 조회","summary":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다.","examples":[{"title":"기록 시작","explanation":"편집이 일어나기 전에 로그를 켜고 보관량을 정합니다.","source":"grid.auditLog = true;\ngrid.auditLogMax = 1000;","result":"이후 발생한 지원 대상 변경이 기록됩니다. 켜기 전의 모든 과거 작업을 복원하지는 않습니다."},{"title":"셀 변경만 읽기","explanation":"필터를 사용해 확인할 기록을 줄입니다.","source":"const entries = await grid.getAuditLog({ kind: 'cell' });\nconsole.log(entries);","result":"각 기록의 seq, 시간, 출처와 변경 전후 값을 확인할 수 있습니다."},{"title":"JSON으로 검토 기록 전달","explanation":"구조를 유지하려면 JSON 형식을 사용합니다.","source":"const json = await grid.getAuditLogAsJson(undefined, true);\nconsole.log(json);\n// 사용자 다운로드 버튼에서:\nawait grid.exportAuditLogAsJson('order-audit.json');","result":"파일 검토와 앱 서버 업로드에 맞는 흐름을 선택합니다. 로그에는 민감한 이전 값도 담길 수 있습니다."}],"featureId":"audit-log","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"로그는 보관 개수가 제한된 메모리 기록입니다. 장기 보존이나 법적 감사 기록이 필요한 서비스는 서버 저장·접근 제어·보존 정책을 별도로 구성해야 합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기록 시작","blocks":[{"kind":"paragraph","text":"편집이 일어나기 전에 로그를 켜고 보관량을 정합니다."},{"kind":"code","source":"grid.auditLog = true;\ngrid.auditLogMax = 1000;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이후 발생한 지원 대상 변경이 기록됩니다. 켜기 전의 모든 과거 작업을 복원하지는 않습니다."}]},{"id":"example-2","title":"예제 2. 셀 변경만 읽기","blocks":[{"kind":"paragraph","text":"필터를 사용해 확인할 기록을 줄입니다."},{"kind":"code","source":"const entries = await grid.getAuditLog({ kind: 'cell' });\nconsole.log(entries);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 각 기록의 seq, 시간, 출처와 변경 전후 값을 확인할 수 있습니다."}]},{"id":"example-3","title":"예제 3. JSON으로 검토 기록 전달","blocks":[{"kind":"paragraph","text":"구조를 유지하려면 JSON 형식을 사용합니다."},{"kind":"code","source":"const json = await grid.getAuditLogAsJson(undefined, true);\nconsole.log(json);\n// 사용자 다운로드 버튼에서:\nawait grid.exportAuditLogAsJson('order-audit.json');","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 파일 검토와 앱 서버 업로드에 맞는 흐름을 선택합니다. 로그에는 민감한 이전 값도 담길 수 있습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"clearAuditLog()는 화면 기록을 지우지만 서버의 영구 기록까지 삭제하는 명령은 아닙니다. seq는 재사용되지 않습니다."},{"kind":"paragraph","text":"보관 한도를 넘으면 오래된 항목이 빠집니다. 누락 없는 장기 기록이 필요하면 이벤트와 서버 수집 흐름을 설계합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/auditLog","title":"auditLog","description":"행·셀·선택·편집 이력 전이를 감사 로그로 기록합니다. 기본 비활성 상태이며 장기 서버 보존과는 별개입니다."},{"path":"/ko/docs/options/auditLogMax","title":"auditLogMax","description":"메모리에 보관할 감사 로그 수의 상한입니다. 초과 시 오래된 기록부터 빠집니다."},{"path":"/ko/docs/methods/getAuditLog","title":"getAuditLog","description":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."},{"path":"/ko/docs/methods/clearAuditLog","title":"clearAuditLog","description":"보관 중인 감사 기록을 지웁니다. 기록 순번은 계속 증가하며 재사용되지 않습니다."},{"path":"/ko/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다."},{"path":"/ko/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다."},{"path":"/ko/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"선택한 감사 기록을 CSV 파일로 내려받습니다."},{"path":"/ko/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"선택한 감사 기록을 JSON 파일로 내려받습니다."},{"path":"/ko/docs/events/auditLogChanged","title":"auditLogChanged","description":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/audit-log","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/rbac","id":"rbac","kind":"feature","group":"application","title":"셀 접근 제어","summary":"셀 읽기와 편집 정책은 사용자 역할에 따라 보이는 값과 수정 가능한 값을 제한합니다. 열을 숨기는 UI 설정과 데이터 접근 정책은 다릅니다.","examples":[{"title":"민감한 열 읽기 제한","explanation":"canSeePrice는 앱이 인증 결과에서 얻은 boolean입니다.","source":"grid.canReadCell = params => params.field !== 'price' || canSeePrice;","result":"읽기 제한이 표·툴팁·복사·내보내기 등 값이 노출되는 경로에도 일관되게 적용되는지 확인합니다."},{"title":"완료 주문 수정 제한","explanation":"업무 상태에 따라 편집 가능 여부를 계산합니다.","source":"grid.canEditCell = params => params.data?.status !== '완료';","result":"열이 editable이어도 완료된 주문은 정책에 따라 편집이 제한됩니다. 앱의 역할 규칙과 함께 사용할 수 있습니다."},{"title":"권한 변경 후 화면 전환","explanation":"사용자 역할이 바뀌면 새 정책 함수를 지정하고 기존 열림 메뉴·편집·상세 화면에서 비밀 값이 남아 있지 않은지 확인합니다.","source":null,"result":"브라우저 정책과 별개로 서버가 모든 읽기·수정 요청의 권한을 다시 검사해야 합니다. 브라우저에 전송한 비밀 데이터를 UI만으로 안전하게 회수할 수는 없습니다."}],"featureId":"rbac","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"canReadCell과 canEditCell에 순수한 동기 콜백을 제공합니다. 필요한 권한 정보를 먼저 준비하고 콜백 안에서는 서버 요청 대신 이미 확인한 권한으로 판단합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 민감한 열 읽기 제한","blocks":[{"kind":"paragraph","text":"canSeePrice는 앱이 인증 결과에서 얻은 boolean입니다."},{"kind":"code","source":"grid.canReadCell = params => params.field !== 'price' || canSeePrice;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 읽기 제한이 표·툴팁·복사·내보내기 등 값이 노출되는 경로에도 일관되게 적용되는지 확인합니다."}]},{"id":"example-2","title":"예제 2. 완료 주문 수정 제한","blocks":[{"kind":"paragraph","text":"업무 상태에 따라 편집 가능 여부를 계산합니다."},{"kind":"code","source":"grid.canEditCell = params => params.data?.status !== '완료';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 열이 editable이어도 완료된 주문은 정책에 따라 편집이 제한됩니다. 앱의 역할 규칙과 함께 사용할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 권한 변경 후 화면 전환","blocks":[{"kind":"paragraph","text":"사용자 역할이 바뀌면 새 정책 함수를 지정하고 기존 열림 메뉴·편집·상세 화면에서 비밀 값이 남아 있지 않은지 확인합니다."},{"kind":"paragraph","text":"결과 확인: 브라우저 정책과 별개로 서버가 모든 읽기·수정 요청의 권한을 다시 검사해야 합니다. 브라우저에 전송한 비밀 데이터를 UI만으로 안전하게 회수할 수는 없습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"비동기 Promise를 boolean 정책 자리에 반환하지 마세요. 권한 조회가 끝날 때까지 보수적인 정책을 사용합니다."},{"kind":"paragraph","text":"권한 없는 값이 앱의 콘솔·로그·이벤트 패널에 노출되지 않게 주변 코드도 함께 점검합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/canReadCell","title":"canReadCell","description":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다."},{"path":"/ko/docs/options/maskedCellValue","title":"maskedCellValue","description":"읽기 제한된 셀 대신 표시할 마스킹 문구입니다."},{"path":"/ko/docs/options/canEditCell","title":"canEditCell","description":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/rbac","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/snapshots","id":"snapshots","kind":"feature","group":"application","title":"데이터 스냅샷","summary":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다.","examples":[{"title":"수정 전 기준점 만들기","explanation":"일괄 작업을 시작하기 전에 이름을 붙여 저장합니다.","source":"grid.maxSnapshots = 10;\nconst before = await grid.captureSnapshot('수량 조정 전');\nconsole.log(before);","result":"이후 비교나 복원에 사용할 ID가 반환됩니다."},{"title":"현재 데이터와 비교","explanation":"기준점 이후 편집을 마친 상태에서 차이를 확인합니다.","source":"console.log(await grid.diffSnapshots(before));","result":"두 번째 ID를 생략하면 현재 데이터와 비교합니다. 두 저장 시점끼리 비교하려면 두 번째 스냅샷 ID를 전달합니다."},{"title":"되돌리기와 정리","explanation":"사용자가 복원을 선택했을 때 실제 결과를 확인합니다.","source":"const restored = await grid.restoreSnapshot(before);\nconsole.log(restored, await grid.listSnapshots());","result":"복원은 현재 데이터 값을 바꿉니다. 불필요한 기준점은 deleteSnapshot(id)로 제거하고 서버 변경을 되돌려야 한다면 별도의 저장 작업을 수행합니다."}],"featureId":"snapshots","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"대량 수정 전 기준점을 만들고 수정 후 추가·변경·삭제를 비교하는 데 적합합니다. 보관 개수는 제한되어 있고 페이지를 벗어난 뒤 영구히 남는 서버 백업은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수정 전 기준점 만들기","blocks":[{"kind":"paragraph","text":"일괄 작업을 시작하기 전에 이름을 붙여 저장합니다."},{"kind":"code","source":"grid.maxSnapshots = 10;\nconst before = await grid.captureSnapshot('수량 조정 전');\nconsole.log(before);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 이후 비교나 복원에 사용할 ID가 반환됩니다."}]},{"id":"example-2","title":"예제 2. 현재 데이터와 비교","blocks":[{"kind":"paragraph","text":"기준점 이후 편집을 마친 상태에서 차이를 확인합니다."},{"kind":"code","source":"console.log(await grid.diffSnapshots(before));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 두 번째 ID를 생략하면 현재 데이터와 비교합니다. 두 저장 시점끼리 비교하려면 두 번째 스냅샷 ID를 전달합니다."}]},{"id":"example-3","title":"예제 3. 되돌리기와 정리","blocks":[{"kind":"paragraph","text":"사용자가 복원을 선택했을 때 실제 결과를 확인합니다."},{"kind":"code","source":"const restored = await grid.restoreSnapshot(before);\nconsole.log(restored, await grid.listSnapshots());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 복원은 현재 데이터 값을 바꿉니다. 불필요한 기준점은 deleteSnapshot(id)로 제거하고 서버 변경을 되돌려야 한다면 별도의 저장 작업을 수행합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"행 ID를 안정적으로 유지해야 어떤 행이 추가·수정·삭제되었는지 의미 있게 비교할 수 있습니다."},{"kind":"paragraph","text":"스냅샷 복원이 열 배치·필터까지 되돌린다고 안내하지 마세요. 화면 설정 복원은 getState()/setState()를 사용합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/maxSnapshots","title":"maxSnapshots","description":"메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다."},{"path":"/ko/docs/methods/captureSnapshot","title":"captureSnapshot","description":"현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다."},{"path":"/ko/docs/methods/listSnapshots","title":"listSnapshots","description":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다."},{"path":"/ko/docs/methods/deleteSnapshot","title":"deleteSnapshot","description":"지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다."},{"path":"/ko/docs/methods/diffSnapshots","title":"diffSnapshots","description":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."},{"path":"/ko/docs/methods/restoreSnapshot","title":"restoreSnapshot","description":"스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다."},{"path":"/ko/docs/events/snapshotCaptured","title":"snapshotCaptured","description":"데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다."},{"path":"/ko/docs/events/snapshotRestored","title":"snapshotRestored","description":"데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/snapshots","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/keyboard-a11y-i18n","id":"keyboard-a11y-i18n","kind":"guide","title":"키보드와 다국어","tier":"free","summary":"Grid는 많은 행과 열을 키보드로 탐색하는 작업 공간입니다. 셀 이동·편집·메뉴 진입과 화면 밖 앱 버튼으로 나가는 경로가 모두 이해 가능해야 합니다.","examples":[{"title":"한국어와 키보드 탐색","explanation":"한국어 안내와 키보드 탐색이 가능한 기본 환경을 구성합니다.","source":"grid.locale = 'ko';\ngrid.keyboardNavigation = true;","result":"기본 문구가 한국어로 표시되고 키보드 탐색을 사용할 수 있습니다. 모든 버튼과 편집기를 Tab·방향키·Enter·Escape로 확인하세요."},{"title":"지원 언어 전환","explanation":"앱의 언어 선택 결과를 Grid에 전달합니다.","source":"grid.locale = 'ja';","result":"Grid의 내장 문구가 일본어로 바뀝니다. 주문 상태 같은 원본 값이 자동 번역되는 것은 아닙니다."},{"title":"접근 가능한 업무 셀","explanation":"렌더러의 버튼에 행을 구분하는 이름을 제공하고 상태 색 옆에 텍스트도 표시합니다. 표 바깥에는 결과 개수와 저장 결과를 읽을 수 있는 안내 영역을 둡니다.","source":null,"result":"스크린 리더와 키보드 사용자가 현재 위치와 다음 동작을 알 수 있습니다. 대량 데이터 갱신마다 모든 셀 내용을 live region으로 읽게 만들지 마세요."}],"featureId":"keyboard-a11y-i18n","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"언어 설정은 Grid 기본 문구를 바꿉니다. 열 이름·원본 데이터·앱 안내 문구는 앱이 직접 번역하고, 숫자·날짜 표시는 valueFormatter에서 목적에 맞게 처리합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 한국어와 키보드 탐색","blocks":[{"kind":"paragraph","text":"한국어 안내와 키보드 탐색이 가능한 기본 환경을 구성합니다."},{"kind":"code","source":"grid.locale = 'ko';\ngrid.keyboardNavigation = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 기본 문구가 한국어로 표시되고 키보드 탐색을 사용할 수 있습니다. 모든 버튼과 편집기를 Tab·방향키·Enter·Escape로 확인하세요."}]},{"id":"example-2","title":"예제 2. 지원 언어 전환","blocks":[{"kind":"paragraph","text":"앱의 언어 선택 결과를 Grid에 전달합니다."},{"kind":"code","source":"grid.locale = 'ja';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: Grid의 내장 문구가 일본어로 바뀝니다. 주문 상태 같은 원본 값이 자동 번역되는 것은 아닙니다."}]},{"id":"example-3","title":"예제 3. 접근 가능한 업무 셀","blocks":[{"kind":"paragraph","text":"렌더러의 버튼에 행을 구분하는 이름을 제공하고 상태 색 옆에 텍스트도 표시합니다. 표 바깥에는 결과 개수와 저장 결과를 읽을 수 있는 안내 영역을 둡니다."},{"kind":"paragraph","text":"결과 확인: 스크린 리더와 키보드 사용자가 현재 위치와 다음 동작을 알 수 있습니다. 대량 데이터 갱신마다 모든 셀 내용을 live region으로 읽게 만들지 마세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"앱이 모든 keydown을 가로채면 Grid 편집·탐색이 깨집니다. 단축키의 대상과 기본 동작 차단 범위를 제한합니다."},{"kind":"paragraph","text":"행 가상화는 일부 DOM만 유지합니다. DOM에 없는 행을 접근할 수 없다고 단정하지 말고 실제 탐색과 안내를 보조 기술로 확인합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/locale","title":"locale","description":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다."},{"path":"/ko/docs/options/keyboardNavigation","title":"keyboardNavigation","description":"셀과 Grid 내부 기능을 키보드로 탐색하는 동작을 설정합니다."},{"path":"/ko/docs/events/activeCellChanged","title":"activeCellChanged","description":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다."},{"path":"/ko/docs/events/localeChanged","title":"localeChanged","description":"Grid 언어 설정이 바뀌었을 때 발생합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/keyboard-a11y-i18n","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/data-event-access","id":"data-event-access","kind":"guide","title":"데이터와 이벤트","tier":"free","summary":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다.","examples":[{"title":"수정 결과 읽기","explanation":"편집 전후 값과 대상 셀은 이벤트의 실제 타입을 확인합니다.","source":"const controller = new AbortController();\ngrid.addEventListener('cellValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });","result":"몇 번째 이벤트인지 세는 대신 실제 변경 결과로 앱의 저장 대상을 구성합니다."},{"title":"호출 결과 확인","explanation":"선택한 행은 원본 배열의 앞부분이라고 가정하지 않고 API에서 읽습니다.","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","result":"선택 ID를 바탕으로 승인·내보내기 대상을 정합니다. 호출한 것과 서버 저장 완료는 다른 단계입니다."},{"title":"화면 해제 때 정리","explanation":"첫 번째 예제의 AbortController로 구독을 일괄 해제합니다.","source":"controller.abort();","result":"화면을 다시 열 때 이벤트가 중복으로 실행되지 않습니다. 앱이 만든 WebSocket·타이머·요청도 함께 정리하세요."}],"featureId":"data-event-access","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"대부분의 공개 메서드는 Promise를 반환하므로 await로 완료 결과를 읽습니다. 이벤트 이름은 대소문자를 구분하고 결과 payload는 CustomEvent.detail에 담깁니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수정 결과 읽기","blocks":[{"kind":"paragraph","text":"편집 전후 값과 대상 셀은 이벤트의 실제 타입을 확인합니다."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 몇 번째 이벤트인지 세는 대신 실제 변경 결과로 앱의 저장 대상을 구성합니다."}]},{"id":"example-2","title":"예제 2. 호출 결과 확인","blocks":[{"kind":"paragraph","text":"선택한 행은 원본 배열의 앞부분이라고 가정하지 않고 API에서 읽습니다."},{"kind":"code","source":"const selectedIds = await grid.getSelectedRowIds();\nconsole.log(selectedIds);","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 선택 ID를 바탕으로 승인·내보내기 대상을 정합니다. 호출한 것과 서버 저장 완료는 다른 단계입니다."}]},{"id":"example-3","title":"예제 3. 화면 해제 때 정리","blocks":[{"kind":"paragraph","text":"첫 번째 예제의 AbortController로 구독을 일괄 해제합니다."},{"kind":"code","source":"controller.abort();","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 화면을 다시 열 때 이벤트가 중복으로 실행되지 않습니다. 앱이 만든 WebSocket·타이머·요청도 함께 정리하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"이벤트를 받은 뒤 같은 값을 다시 쓰는 코드는 이벤트 순환을 만들 수 있습니다. 사용자 변경과 앱 반영의 출처를 구분합니다."},{"kind":"paragraph","text":"이벤트의 rowIndex와 안정적인 rowId를 혼동하지 마세요. 장기 저장 키는 ID를 사용합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/context","title":"context","description":"앱의 공통 문맥을 콜백과 Grid API에 전달합니다. 사용자 권한·서비스 등 앱이 관리하는 정보를 연결할 때 사용합니다."},{"path":"/ko/docs/methods/getApi","title":"getApi","description":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."},{"path":"/ko/docs/methods/getRow","title":"getRow","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},{"path":"/ko/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."},{"path":"/ko/docs/methods/forEachRow","title":"forEachRow","description":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."},{"path":"/ko/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."},{"path":"/ko/docs/events/cellClicked","title":"cellClicked","description":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다."},{"path":"/ko/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다."},{"path":"/ko/docs/events/rowClicked","title":"rowClicked","description":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다."},{"path":"/ko/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/data-event-access","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/virtualization","id":"virtualization","kind":"feature","group":"application","title":"대량 데이터","tier":"free","summary":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다.","examples":[{"title":"많은 행을 정해진 높이에 표시","explanation":"데이터 로딩과 별개로 렌더링 범위를 제한합니다.","source":"grid.height = 520;\ngrid.virtualScroll = true;","result":"스크롤하면서 현재 위치의 행이 나타납니다. 모든 행이 동시에 DOM에 존재하지는 않습니다."},{"title":"열이 많은 보고서","explanation":"가로 열 가상화를 명시적으로 켭니다.","source":"grid.virtualizeColumns = true;","result":"수백 개 열을 가진 표에서 화면 밖 열의 렌더링 비용을 줄일 수 있습니다. 열 이동·고정·너비 변경과 함께 검증하세요."},{"title":"성능 문제를 나눠 찾기","explanation":"같은 데이터로 기본 텍스트 셀과 복잡한 렌더러를 비교합니다. 요청 시간·파싱 시간·정렬 시간·스크롤 프레임 시간을 나누어 측정합니다.","source":null,"result":"가상화는 데이터 다운로드나 무거운 formatter 계산을 자동으로 없애지 않습니다. 병목에 맞춰 행 모델·처리 엔진·렌더러를 조절합니다."}],"featureId":"virtualization","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"높이가 제한된 Grid에서 세로 가상화가 효과적입니다. 가로로 열이 많은 표는 열 가상화도 검토하되 사용자 정의 셀의 렌더링 비용과 고정 열의 수를 함께 살펴봅니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 많은 행을 정해진 높이에 표시","blocks":[{"kind":"paragraph","text":"데이터 로딩과 별개로 렌더링 범위를 제한합니다."},{"kind":"code","source":"grid.height = 520;\ngrid.virtualScroll = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 스크롤하면서 현재 위치의 행이 나타납니다. 모든 행이 동시에 DOM에 존재하지는 않습니다."}]},{"id":"example-2","title":"예제 2. 열이 많은 보고서","blocks":[{"kind":"paragraph","text":"가로 열 가상화를 명시적으로 켭니다."},{"kind":"code","source":"grid.virtualizeColumns = true;","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 수백 개 열을 가진 표에서 화면 밖 열의 렌더링 비용을 줄일 수 있습니다. 열 이동·고정·너비 변경과 함께 검증하세요."}]},{"id":"example-3","title":"예제 3. 성능 문제를 나눠 찾기","blocks":[{"kind":"paragraph","text":"같은 데이터로 기본 텍스트 셀과 복잡한 렌더러를 비교합니다. 요청 시간·파싱 시간·정렬 시간·스크롤 프레임 시간을 나누어 측정합니다."},{"kind":"paragraph","text":"결과 확인: 가상화는 데이터 다운로드나 무거운 formatter 계산을 자동으로 없애지 않습니다. 병목에 맞춰 행 모델·처리 엔진·렌더러를 조절합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"숨겨진 탭에서 초기화한 표는 컨테이너 크기가 다를 수 있습니다. 실제 보이는 상태에서 높이와 레이아웃을 확인합니다."},{"kind":"paragraph","text":"DOM 행 개수로 전체 데이터 수를 계산하지 마세요. 데이터·표시 행 API 또는 서버의 전체 개수를 사용합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/height","title":"height","description":"Grid 컨테이너 높이를 지정합니다. 숫자 또는 CSS 길이 문자열을 사용하며 가상 스크롤과 하단 도구의 공간을 함께 고려합니다."},{"path":"/ko/docs/options/rowHeight","title":"rowHeight","description":"기본 행 높이를 픽셀 단위로 정합니다. 글자 크기·셀 편집기·터치 영역에 맞게 선택합니다."},{"path":"/ko/docs/options/rowHeightFn","title":"rowHeightFn","description":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다."},{"path":"/ko/docs/options/virtualScroll","title":"virtualScroll","description":"화면 주변의 행만 렌더링하는 세로 가상화를 사용합니다. 전체 데이터 다운로드를 줄이는 옵션과는 다릅니다."},{"path":"/ko/docs/options/virtualizeColumns","title":"virtualizeColumns","description":"화면 주변의 열만 렌더링하는 가로 가상화를 설정합니다."},{"path":"/ko/docs/columns/wrapText","title":"wrapText","description":"셀 텍스트 줄바꿈을 허용합니다. 충분한 높이가 없으면 내용이 잘릴 수 있습니다."},{"path":"/ko/docs/columns/autoHeight","title":"autoHeight","description":"셀 내용에 맞춘 행 높이 계산을 사용합니다. 가상화와 큰 데이터의 비용을 함께 확인합니다."},{"path":"/ko/docs/methods/refreshRowHeights","title":"refreshRowHeights","description":"행 높이를 다시 계산합니다. 내용이나 높이 콜백의 기준이 바뀐 뒤 사용합니다."},{"path":"/ko/docs/methods/scrollToTop","title":"scrollToTop","description":"Grid 스크롤을 맨 위로 이동합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/virtualization","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/wasm-acceleration","id":"wasm-acceleration","kind":"feature","group":"application","title":"처리 엔진 선택","tier":"pro","summary":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다.","examples":[{"title":"환경에 맞게 자동 선택","explanation":"기본 선택과 대체 실행 정책을 사용합니다.","source":"grid.engine = 'auto';\ngrid.unavailable = 'fallback';\nconsole.log(await grid.getActiveTier());","result":"초기화 이후 실제 선택된 tier를 확인합니다. 자동 대체가 허용된 환경에서는 요청 모드와 결과가 다를 수 있습니다."},{"title":"Pro 실행을 요구하는 화면","explanation":"이미 패키지와 라이선스를 준비한 앱에서 사용합니다.","source":"grid.engine = 'pro';\ngrid.unavailable = 'error';","result":"필요한 엔진을 사용할 수 없는 환경에서 조용히 대체 실행하지 않고 오류 경로를 확인할 수 있습니다."},{"title":"가속 효과 비교","explanation":"같은 데이터·같은 필터·같은 정렬을 standard와 Pro에서 반복 측정합니다. 초기 다운로드와 초기화 시간은 반복 처리 시간과 분리합니다.","source":null,"result":"행 개수만으로 가속 효과를 약속하지 않습니다. 사용자 콜백·수식·피벗 등 실제 기능 조합의 지원 범위와 결과 일치 여부도 확인합니다."}],"featureId":"wasm-acceleration","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"engine은 요청하는 모드이고 getActiveTier()는 실제 활성화된 엔진을 확인하는 통로입니다. Pro를 요청했다는 사실만으로 모든 연산이 같은 경로에서 처리된다고 표시하지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 환경에 맞게 자동 선택","blocks":[{"kind":"paragraph","text":"기본 선택과 대체 실행 정책을 사용합니다."},{"kind":"code","source":"grid.engine = 'auto';\ngrid.unavailable = 'fallback';\nconsole.log(await grid.getActiveTier());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 초기화 이후 실제 선택된 tier를 확인합니다. 자동 대체가 허용된 환경에서는 요청 모드와 결과가 다를 수 있습니다."}]},{"id":"example-2","title":"예제 2. Pro 실행을 요구하는 화면","blocks":[{"kind":"paragraph","text":"이미 패키지와 라이선스를 준비한 앱에서 사용합니다."},{"kind":"code","source":"grid.engine = 'pro';\ngrid.unavailable = 'error';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 필요한 엔진을 사용할 수 없는 환경에서 조용히 대체 실행하지 않고 오류 경로를 확인할 수 있습니다."}]},{"id":"example-3","title":"예제 3. 가속 효과 비교","blocks":[{"kind":"paragraph","text":"같은 데이터·같은 필터·같은 정렬을 standard와 Pro에서 반복 측정합니다. 초기 다운로드와 초기화 시간은 반복 처리 시간과 분리합니다."},{"kind":"paragraph","text":"결과 확인: 행 개수만으로 가속 효과를 약속하지 않습니다. 사용자 콜백·수식·피벗 등 실제 기능 조합의 지원 범위와 결과 일치 여부도 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"엔진 변경만으로 서버 요청·네트워크·사용자 렌더러 비용이 빨라지는 것은 아닙니다. 병목을 먼저 측정하세요."},{"kind":"paragraph","text":"동적 배열 수식 등 특정 경로에서 거절되는 기능은 반환 보고서를 읽고 지원하는 구성으로 전환합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/engine","title":"engine","description":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다."},{"path":"/ko/docs/options/proThreshold","title":"proThreshold","description":"자동 엔진 선택에서 Pro 경로를 고려할 데이터 규모 기준입니다."},{"path":"/ko/docs/options/unavailable","title":"unavailable","description":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다."},{"path":"/ko/docs/methods/getActiveTier","title":"getActiveTier","description":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/wasm-acceleration","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/grid-state","id":"grid-state","kind":"guide","title":"화면 상태 저장과 복원","summary":"화면 상태는 열 너비·순서·정렬·필터·선택 등 사용자의 작업 구성을 저장합니다. 원본 주문 값을 백업하는 데이터 스냅샷과 구분해야 합니다.","examples":[{"title":"사용자별 화면 저장","explanation":"데이터와 열 구성이 준비된 Grid에서 상태를 읽습니다.","source":"const state = await grid.getState();\nlocalStorage.setItem('orders-grid-state', JSON.stringify(state));","result":"브라우저에 현재 구성을 저장합니다. 여러 사용자나 다른 표의 상태가 섞이지 않도록 키에 사용자·화면 구분을 넣을 수 있습니다."},{"title":"기존 화면에 복원","explanation":"저장한 JSON의 파싱 실패를 앱에서 처리합니다.","source":"const text = localStorage.getItem('orders-grid-state');\nif (text) {\n  const report = await grid.setState(JSON.parse(text));\n  console.log(report);\n}","result":"열이 삭제되었거나 지원하지 않는 상태가 있으면 보고서를 읽고 사용자에게 부분 복원 사실을 안내합니다."},{"title":"첫 렌더와 열 상태만 저장","explanation":"처음부터 복원하려면 마운트 전에 initialState를 전달합니다. 열 배치만 필요하면 getColumnState()/applyColumnState()를 사용해 저장 범위를 줄입니다.","source":null,"result":"초기 상태는 처음 한 번 적용됩니다. 이미 실행 중인 Grid의 복원은 setState()를 사용합니다. 콜백 함수와 원본 데이터는 JSON 상태에서 다시 만들어지지 않습니다."}],"sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"getState()는 버전이 포함된 상태 객체를 반환합니다. setState()는 적용한 부분과 문제를 보고하므로 복원 요청이 항상 전부 성공했다고 가정하지 마세요."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 사용자별 화면 저장","blocks":[{"kind":"paragraph","text":"데이터와 열 구성이 준비된 Grid에서 상태를 읽습니다."},{"kind":"code","source":"const state = await grid.getState();\nlocalStorage.setItem('orders-grid-state', JSON.stringify(state));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 브라우저에 현재 구성을 저장합니다. 여러 사용자나 다른 표의 상태가 섞이지 않도록 키에 사용자·화면 구분을 넣을 수 있습니다."}]},{"id":"example-2","title":"예제 2. 기존 화면에 복원","blocks":[{"kind":"paragraph","text":"저장한 JSON의 파싱 실패를 앱에서 처리합니다."},{"kind":"code","source":"const text = localStorage.getItem('orders-grid-state');\nif (text) {\n  const report = await grid.setState(JSON.parse(text));\n  console.log(report);\n}","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 열이 삭제되었거나 지원하지 않는 상태가 있으면 보고서를 읽고 사용자에게 부분 복원 사실을 안내합니다."}]},{"id":"example-3","title":"예제 3. 첫 렌더와 열 상태만 저장","blocks":[{"kind":"paragraph","text":"처음부터 복원하려면 마운트 전에 initialState를 전달합니다. 열 배치만 필요하면 getColumnState()/applyColumnState()를 사용해 저장 범위를 줄입니다."},{"kind":"paragraph","text":"결과 확인: 초기 상태는 처음 한 번 적용됩니다. 이미 실행 중인 Grid의 복원은 setState()를 사용합니다. 콜백 함수와 원본 데이터는 JSON 상태에서 다시 만들어지지 않습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"같은 데이터의 안정적인 ID와 열 식별자가 있어야 선택·포커스 복원이 의미 있습니다. 삭제된 행을 억지로 다시 선택하지 마세요."},{"kind":"paragraph","text":"getStateCaptureReport()와 복원 보고서를 확인해 생략된 정보가 있는지 점검합니다. 원본 값 복원은 snapshots를 사용합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/grid-state","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/api-reference","id":"api-reference","kind":"guide","title":"Grid API reference","summary":"Grid API는 Grid 전체 속성, 개별 열 설정, 호출 메서드, 결과 이벤트, 그리고 이들이 공유하는 타입으로 나뉩니다. 이 문서의 각 항목은 현재 공개된 계약을 이름별로 찾아 읽을 수 있게 연결되어 있습니다.","examples":[{"title":"Grid 속성과 열 설정 구분","explanation":"pagination은 Grid 전체에, editable은 개별 열 또는 defaultColDef에 설정합니다.","source":"grid.pagination = true;\ngrid.defaultColDef = { editable: true };\ngrid.columnDefs = [{ field: 'id', editable: false }, { field: 'quantity', editor: 'number' }];","result":"수량은 편집할 수 있고 ID는 개별 열 설정으로 편집을 막습니다. 모든 옵션이 같은 위치에 들어가는 것은 아닙니다."},{"title":"메서드의 결과 타입 읽기","explanation":"applyTransaction의 인수와 반환 타입에서 실제 지원하는 변경과 보고 정보를 확인합니다. Promise<T>라면 await 뒤의 값이 T입니다.","source":null,"result":"반환 타입의 링크를 열어 status·reason·문제 목록의 의미를 확인하고 앱에서 성공·거절을 나누어 처리합니다."},{"title":"이벤트로 결과 연결","explanation":"이벤트 목록에서 cellValueChanged를 열고 detail 타입을 확인합니다. 타입에 없는 필드를 임의로 참조하지 말고 연관된 기능 예제도 함께 읽습니다.","source":null,"result":"복사할 수 있는 이벤트 구독 예제와 수명 정리 방법을 찾을 수 있습니다. API 이름은 정확한 대소문자를 사용하세요."}],"sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"기능을 처음 구성한다면 기능별 매뉴얼을 먼저 읽고, 정확한 인수·반환값·기본값이 필요할 때 API 항목으로 이동하세요. 검색에는 한국어 목적과 API 이름을 모두 사용할 수 있습니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. Grid 속성과 열 설정 구분","blocks":[{"kind":"paragraph","text":"pagination은 Grid 전체에, editable은 개별 열 또는 defaultColDef에 설정합니다."},{"kind":"code","source":"grid.pagination = true;\ngrid.defaultColDef = { editable: true };\ngrid.columnDefs = [{ field: 'id', editable: false }, { field: 'quantity', editor: 'number' }];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 수량은 편집할 수 있고 ID는 개별 열 설정으로 편집을 막습니다. 모든 옵션이 같은 위치에 들어가는 것은 아닙니다."}]},{"id":"example-2","title":"예제 2. 메서드의 결과 타입 읽기","blocks":[{"kind":"paragraph","text":"applyTransaction의 인수와 반환 타입에서 실제 지원하는 변경과 보고 정보를 확인합니다. Promise<T>라면 await 뒤의 값이 T입니다."},{"kind":"paragraph","text":"결과 확인: 반환 타입의 링크를 열어 status·reason·문제 목록의 의미를 확인하고 앱에서 성공·거절을 나누어 처리합니다."}]},{"id":"example-3","title":"예제 3. 이벤트로 결과 연결","blocks":[{"kind":"paragraph","text":"이벤트 목록에서 cellValueChanged를 열고 detail 타입을 확인합니다. 타입에 없는 필드를 임의로 참조하지 말고 연관된 기능 예제도 함께 읽습니다."},{"kind":"paragraph","text":"결과 확인: 복사할 수 있는 이벤트 구독 예제와 수명 정리 방법을 찾을 수 있습니다. API 이름은 정확한 대소문자를 사용하세요."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"타입 사전은 JavaScript에서 import할 모듈 경로 목록이 아닙니다. 타입 정의와 실제 런타임 패키지 export를 구분합니다."},{"kind":"paragraph","text":"Pro 표시는 사용 조건을 나타냅니다. 이름이 같거나 타입을 읽을 수 있다는 이유로 Community에서 기능이 활성화되지는 않습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/api-reference","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/guides/branding","id":"branding","kind":"guide","title":"로고와 위치","tier":"pro","summary":"Grid 기본 로고는 표 하단의 전용 영역에서 오른쪽에 정렬됩니다. 셀·페이지 이동·스크롤 컨트롤을 덮지 않도록 데이터 영역과 분리되어 있습니다.","examples":[{"title":"기본 로고 유지","explanation":"기본값 또는 빈 문자열로 Syidax 로고를 사용합니다.","source":"grid.brandLogo = '';","result":"표 하단 오른쪽에 기본 마크가 표시됩니다. 앱 레이아웃에서 이 영역을 잘라 숨기지 마세요."},{"title":"라이선스로 로고 제거","explanation":"Pro 패키지와 branding 권한을 등록한 뒤 지정합니다.","source":"grid.brandLogo = 'none';","result":"권한이 있으면 로고가 제거됩니다. 권한이 없으면 기본 로고가 유지되므로 실제 결과와 라이선스 거절 이벤트를 확인하세요."},{"title":"회사 로고 사용","explanation":"100KB 이하의 PNG·JPEG·WebP를 base64 data URL로 변환한 문자열을 brandLogo에 전달합니다. 외부 URL·SVG·HTML은 허용되는 입력이 아닙니다.","source":null,"result":"유효한 branding 권한과 지원 이미지 형식이 모두 준비되어야 사용자 로고가 표시됩니다. 밝은 테마와 어두운 테마에서 가독성을 확인합니다."}],"featureId":"branding","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"기본 표시에는 별도 설정이 필요 없습니다. 로고 제거 또는 사용자 지정은 grid.branding 권한이 포함된 유효한 라이선스가 필요하며 임의 위치로 옮기는 brandPosition 옵션은 제공하지 않습니다."},{"kind":"paragraph","text":"이 기능을 제품에서 사용하려면 Pro 패키지와 유효한 라이선스가 필요합니다. 설정 이름이 같더라도 Community에서 Pro 기능이 활성화되는 것은 아닙니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기본 로고 유지","blocks":[{"kind":"paragraph","text":"기본값 또는 빈 문자열로 Syidax 로고를 사용합니다."},{"kind":"code","source":"grid.brandLogo = '';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표 하단 오른쪽에 기본 마크가 표시됩니다. 앱 레이아웃에서 이 영역을 잘라 숨기지 마세요."}]},{"id":"example-2","title":"예제 2. 라이선스로 로고 제거","blocks":[{"kind":"paragraph","text":"Pro 패키지와 branding 권한을 등록한 뒤 지정합니다."},{"kind":"code","source":"grid.brandLogo = 'none';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 권한이 있으면 로고가 제거됩니다. 권한이 없으면 기본 로고가 유지되므로 실제 결과와 라이선스 거절 이벤트를 확인하세요."}]},{"id":"example-3","title":"예제 3. 회사 로고 사용","blocks":[{"kind":"paragraph","text":"100KB 이하의 PNG·JPEG·WebP를 base64 data URL로 변환한 문자열을 brandLogo에 전달합니다. 외부 URL·SVG·HTML은 허용되는 입력이 아닙니다."},{"kind":"paragraph","text":"결과 확인: 유효한 branding 권한과 지원 이미지 형식이 모두 준비되어야 사용자 로고가 표시됩니다. 밝은 테마와 어두운 테마에서 가독성을 확인합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"기본 로고 위치를 바꾸기 위해 내부 Shadow DOM이나 CSS를 억지로 덮어쓰지 마세요. 공개 설정과 제품 권한에 맞는 방법을 사용합니다."},{"kind":"paragraph","text":"패키지 설치와 라이선스 등록은 별개입니다. 설치와 연결 문서에서 등록 결과를 확인한 뒤 사용자 로고를 설정합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/brandLogo","title":"brandLogo","description":"기본 로고·none·지원하는 이미지 data URL 중 하나를 지정합니다. 제거와 변경에는 grid.branding 권한이 필요하며 위치는 표 하단 오른쪽입니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""},{"path":"/grid/branding","title":"Features에서 살펴보기","description":"직접 체험 가능한 범위는 해당 가이드에 안내되어 있습니다."}]}]}]},{"path":"/ko/docs/features/row-numbers","id":"row-numbers","kind":"feature","group":"rows","title":"행 번호와 데이터 ID","tier":"free","summary":"행 번호는 화면에서 순서를 읽는 보조 정보이고 주문 ID는 업무 데이터를 식별하는 값입니다. 정렬 후에도 같은 숫자를 유지할지 현재 표시 순서를 다시 매길지 먼저 정해야 합니다.","examples":[{"title":"수신 순번 표시","explanation":"조회된 순서를 기록할 때 데이터에 순번을 추가합니다.","source":"grid.rowData = grid.rowData.map((row, index) => ({ ...row, receivedNo: index + 1 }));\ngrid.columnDefs = [{ field: 'receivedNo', headerName: '수신 순번', editable: false }, ...grid.columnDefs];","result":"정렬해도 수신 순번은 같은 주문에 남습니다. 현재 화면의 1번째 행 번호를 뜻하지 않습니다."},{"title":"행 위치로 조회","explanation":"현재 표시 첫 행을 읽는 API는 0부터 시작하는 인덱스를 받습니다.","source":"console.log(await grid.getDisplayedRowAtIndex(0));","result":"표시 순서와 연결된 행 객체를 읽습니다. 정렬 전 배열의 첫 항목과 일치하지 않을 수 있습니다."},{"title":"페이지 사이 번호 정책","explanation":"한 페이지가 20행이면 다음 페이지의 첫 표시 번호를 21로 할지 1로 할지 앱에서 정합니다. 서버 페이지에서는 전체 결과의 위치 정보도 함께 필요합니다.","source":null,"result":"사용자가 번호를 주문 식별자로 오해하지 않도록 제목에 표시 순번 또는 수신 순번처럼 의미를 명시합니다."}],"featureId":"row-numbers","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"별도의 rowNumbers 스위치를 임의로 만들지 말고 데이터나 사용자 정의 열을 통해 목적에 맞는 번호를 구성합니다. API 인수의 rowIndex 역시 업무 ID와 다릅니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 수신 순번 표시","blocks":[{"kind":"paragraph","text":"조회된 순서를 기록할 때 데이터에 순번을 추가합니다."},{"kind":"code","source":"grid.rowData = grid.rowData.map((row, index) => ({ ...row, receivedNo: index + 1 }));\ngrid.columnDefs = [{ field: 'receivedNo', headerName: '수신 순번', editable: false }, ...grid.columnDefs];","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 정렬해도 수신 순번은 같은 주문에 남습니다. 현재 화면의 1번째 행 번호를 뜻하지 않습니다."}]},{"id":"example-2","title":"예제 2. 행 위치로 조회","blocks":[{"kind":"paragraph","text":"현재 표시 첫 행을 읽는 API는 0부터 시작하는 인덱스를 받습니다."},{"kind":"code","source":"console.log(await grid.getDisplayedRowAtIndex(0));","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 표시 순서와 연결된 행 객체를 읽습니다. 정렬 전 배열의 첫 항목과 일치하지 않을 수 있습니다."}]},{"id":"example-3","title":"예제 3. 페이지 사이 번호 정책","blocks":[{"kind":"paragraph","text":"한 페이지가 20행이면 다음 페이지의 첫 표시 번호를 21로 할지 1로 할지 앱에서 정합니다. 서버 페이지에서는 전체 결과의 위치 정보도 함께 필요합니다."},{"kind":"paragraph","text":"결과 확인: 사용자가 번호를 주문 식별자로 오해하지 않도록 제목에 표시 순번 또는 수신 순번처럼 의미를 명시합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"순번을 getRowId로 사용하면 추가·삭제·정렬 때 같은 주문의 정체성이 흔들릴 수 있습니다. 서버의 주문 ID를 별도로 유지하세요."},{"kind":"paragraph","text":"그룹 헤더와 상세 행까지 번호에 포함할지도 정해야 합니다. 원본 주문 수와 화면에 그려지는 행 수는 다를 수 있습니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/features/js-processing","id":"js-processing","kind":"feature","group":"application","title":"JavaScript 처리 엔진","tier":"free","summary":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다.","examples":[{"title":"표준 경로 고정","explanation":"실행 환경 비교를 위해 모드를 명시합니다.","source":"grid.engine = 'standard';\nconsole.log(await grid.getActiveTier());","result":"초기화가 완료된 표에서 실제 실행 tier를 확인합니다."},{"title":"작은 업무 표","explanation":"수백 개 주문과 기본 텍스트 열로 시작하고 필요한 정렬·검색·편집을 추가합니다. 별도의 서버 행 모델 없이 rowData로 데이터를 공급합니다.","source":null,"result":"구현이 단순하고 값 변경을 추적하기 쉽습니다. 데이터 규모가 커지면 가상화와 서버 로딩 범위를 함께 검토합니다."},{"title":"콜백 비용 줄이기","explanation":"값 포맷터나 비교 함수에서 반복적으로 큰 배열을 만들지 않도록 계산을 준비합니다. 동일 데이터로 기능을 하나씩 켜서 비용을 비교합니다.","source":null,"result":"실행 엔진을 바꾸기 전에 불필요한 재렌더링과 전체 데이터 교체를 줄일 수 있습니다."}],"featureId":"js-processing","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"엔진 선택과 제품 기능 등급은 같은 설정이 아닙니다. standard를 선택했다고 Pro 기능의 라이선스 조건이 사라지는 것은 아니며, 설치된 패키지의 기능 범위도 유지됩니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 표준 경로 고정","blocks":[{"kind":"paragraph","text":"실행 환경 비교를 위해 모드를 명시합니다."},{"kind":"code","source":"grid.engine = 'standard';\nconsole.log(await grid.getActiveTier());","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 초기화가 완료된 표에서 실제 실행 tier를 확인합니다."}]},{"id":"example-2","title":"예제 2. 작은 업무 표","blocks":[{"kind":"paragraph","text":"수백 개 주문과 기본 텍스트 열로 시작하고 필요한 정렬·검색·편집을 추가합니다. 별도의 서버 행 모델 없이 rowData로 데이터를 공급합니다."},{"kind":"paragraph","text":"결과 확인: 구현이 단순하고 값 변경을 추적하기 쉽습니다. 데이터 규모가 커지면 가상화와 서버 로딩 범위를 함께 검토합니다."}]},{"id":"example-3","title":"예제 3. 콜백 비용 줄이기","blocks":[{"kind":"paragraph","text":"값 포맷터나 비교 함수에서 반복적으로 큰 배열을 만들지 않도록 계산을 준비합니다. 동일 데이터로 기능을 하나씩 켜서 비용을 비교합니다."},{"kind":"paragraph","text":"결과 확인: 실행 엔진을 바꾸기 전에 불필요한 재렌더링과 전체 데이터 교체를 줄일 수 있습니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"표준 엔진에서도 DOM 셀을 모두 렌더링해야 하는 것은 아닙니다. virtualScroll과 별개의 설정입니다."},{"kind":"paragraph","text":"브라우저 메모리에 전체 데이터를 둘 수 없는 규모라면 엔진 모드만 바꾸기보다 서버 행 모델을 검토합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rows","title":"rows","description":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다."},{"path":"/ko/docs/options/columns","title":"columns","description":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다."},{"path":"/ko/docs/options/maxRendered","title":"maxRendered","description":"한 번에 렌더링할 행 수의 상한을 설정합니다. 데이터 전체 개수와는 별개의 렌더링 제약입니다."},{"path":"/ko/docs/methods/setQuery","title":"setQuery","description":"처리 엔진에 적용할 조회 조건을 전달합니다. GridQuery 계약과 현재 행 모델의 지원 범위를 확인하세요."},{"path":"/ko/docs/events/queryComplete","title":"queryComplete","description":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/features/fixed-logo","id":"fixed-logo","kind":"feature","group":"application","title":"기본 로고의 표시","tier":"free","summary":"기본 로고는 Community를 포함해 Grid 하단의 전용 공간에 표시됩니다. 데이터를 가리키는 워터마크가 아니라 표의 구성 요소로 공간을 확보합니다.","examples":[{"title":"기본 구성 확인","explanation":"로고 설정을 생략하거나 기본값으로 되돌립니다.","source":"grid.brandLogo = '';","result":"기본 마크가 표시됩니다. 다른 기능을 켜고 꺼도 데이터 셀 안으로 이동하지 않아야 합니다."},{"title":"작은 높이에서 점검","explanation":"페이지 이동·상태 바·가로 스크롤을 켠 짧은 표에서 마지막 행과 하단 컨트롤을 함께 확인합니다.","source":null,"result":"표 높이는 로고와 컨트롤을 포함한 사용 공간을 고려해 정합니다. 외부 컨테이너의 overflow로 하단을 잘라내지 않도록 합니다."},{"title":"브랜드 변경이 필요할 때","explanation":"로고를 제거하거나 회사 이미지로 바꾸려면 로고와 위치 문서의 brandLogo 및 라이선스 절차를 따릅니다.","source":null,"result":"단순 배경색 변경은 theming, 로고 이미지 변경은 branding 설정입니다. 두 목적을 구분해 적용합니다."}],"featureId":"fixed-logo","sections":[{"id":"understand","title":"동작 원리와 선택 기준","blocks":[{"kind":"paragraph","text":"Grid와 Chart의 그리기 영역은 다릅니다. Grid에서는 셀·페이지 이동 컨트롤과 겹치지 않는 하단 오른쪽 위치를 기준으로 읽고, 표 높이를 계산할 때 이 영역을 포함합니다."},{"kind":"paragraph","text":"코드의 grid는 설치와 연결 장에서 준비한 Grid 요소입니다. 예제마다 필요한 데이터·설정을 확인하고, 코드에서 소개하는 앱 함수와 서버 주소는 프로젝트에 맞게 구현하세요."},{"kind":"links","items":[{"path":"/ko/docs/guides/getting-started","title":"설치와 연결 · 공통 예제 데이터","description":""}]}]},{"id":"example-1","title":"예제 1. 기본 구성 확인","blocks":[{"kind":"paragraph","text":"로고 설정을 생략하거나 기본값으로 되돌립니다."},{"kind":"code","source":"grid.brandLogo = '';","language":"javascript"},{"kind":"paragraph","text":"결과 확인: 기본 마크가 표시됩니다. 다른 기능을 켜고 꺼도 데이터 셀 안으로 이동하지 않아야 합니다."}]},{"id":"example-2","title":"예제 2. 작은 높이에서 점검","blocks":[{"kind":"paragraph","text":"페이지 이동·상태 바·가로 스크롤을 켠 짧은 표에서 마지막 행과 하단 컨트롤을 함께 확인합니다."},{"kind":"paragraph","text":"결과 확인: 표 높이는 로고와 컨트롤을 포함한 사용 공간을 고려해 정합니다. 외부 컨테이너의 overflow로 하단을 잘라내지 않도록 합니다."}]},{"id":"example-3","title":"예제 3. 브랜드 변경이 필요할 때","blocks":[{"kind":"paragraph","text":"로고를 제거하거나 회사 이미지로 바꾸려면 로고와 위치 문서의 brandLogo 및 라이선스 절차를 따릅니다."},{"kind":"paragraph","text":"결과 확인: 단순 배경색 변경은 theming, 로고 이미지 변경은 branding 설정입니다. 두 목적을 구분해 적용합니다."}]},{"id":"pitfalls","title":"조합할 때와 문제를 해결할 때","blocks":[{"kind":"paragraph","text":"내부 마크를 가리는 앱 요소를 겹치거나 표를 잘라내는 방식으로 사용자 지정하지 마세요."},{"kind":"paragraph","text":"로고는 클릭 유도용 앱 버튼을 대신하지 않습니다. 앱의 주요 작업은 별도의 접근 가능한 버튼으로 제공합니다."}]},{"id":"related-api","title":"이 기능에 사용하는 API","blocks":[{"kind":"paragraph","text":"공통 설정과 아래 관련 문서를 함께 참고하세요."},{"kind":"links","items":[{"path":"/ko/docs/options","title":"Grid 속성","description":""},{"path":"/ko/docs/columns","title":"열 설정","description":""},{"path":"/ko/docs/methods","title":"메서드","description":""}]}]},{"id":"next","title":"함께 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"행·열·ID의 관계","description":""},{"path":"/ko/docs/guides/data-event-access","title":"결과와 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/features","kind":"index","title":"기능별 매뉴얼","summary":"사용 목적과 구성 순서부터 조합 사례까지 기능을 하나씩 읽어보세요.","sections":[{"id":"columns","title":"열 구성과 값","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."},{"path":"/ko/docs/features/column-groups","title":"다단 헤더","description":"다단 헤더는 관련 열을 하나의 상위 제목 아래 배치합니다. 행을 묶는 그룹화와 달리 데이터 개수나 집계값은 바뀌지 않습니다."},{"path":"/ko/docs/features/column-api","title":"실시간 열 API","description":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다."},{"path":"/ko/docs/features/value-getter-formatter","title":"계산과 표시 분리","description":"valueGetter는 실제 계산값을 만들고 valueFormatter는 화면에 읽기 좋은 문자열을 만듭니다. 합계·정렬·비교에 숫자가 필요하면 getter는 숫자를 반환해야 합니다."}]}]},{"id":"rows","title":"행과 데이터 모델","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."},{"path":"/ko/docs/features/infinite-row-model","title":"필요한 블록만 요청","description":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다."},{"path":"/ko/docs/features/server-query","title":"서버에서 정렬과 검색","description":"서버 조회는 행 범위·정렬·필터를 하나의 조건으로 서버에 전달하는 방식입니다. 단순 목록 조회에는 Infinite 모델과 함께 사용하고 서버 그룹·피벗은 Server-Side 모델을 검토합니다."},{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."},{"path":"/ko/docs/features/viewport-row-model","title":"보이는 구간을 스트리밍","description":"전체 데이터 개수는 알지만 현재 보이는 행만 지속 갱신하려는 시세·모니터링 화면에 적합합니다. 스크롤 범위에 맞춰 구독 범위를 바꾸는 것이 핵심입니다."},{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."},{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."},{"path":"/ko/docs/features/pagination","title":"페이지 단위 탐색","description":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다."},{"path":"/ko/docs/features/row-numbers","title":"행 번호와 데이터 ID","description":"행 번호는 화면에서 순서를 읽는 보조 정보이고 주문 ID는 업무 데이터를 식별하는 값입니다. 정렬 후에도 같은 숫자를 유지할지 현재 표시 순서를 다시 매길지 먼저 정해야 합니다."}]}]},{"id":"sort-filter","title":"정렬과 검색","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."},{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."},{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."},{"path":"/ko/docs/features/external-filter","title":"업무 조건으로 필터링","description":"Grid 밖의 업무 조건을 행 판정 함수로 연결합니다. 미완료만 보기, 내 담당 건만 보기처럼 외부 UI에 있는 선택이 표의 결과를 제어할 때 사용합니다."},{"path":"/ko/docs/features/set-filter","title":"목록에서 값 선택","description":"지역·상태처럼 반복되는 고유 값에서 포함할 항목을 고르게 하는 필터입니다. 이름 일부를 입력하는 Text filter보다 가능한 선택지를 한눈에 보여 주기 좋습니다."},{"path":"/ko/docs/features/multi-filter","title":"여러 필터 조합","description":"한 열 안에 텍스트 검색과 값 목록 같은 여러 필터를 함께 구성합니다. 서로 다른 열에 각각 필터를 켜는 방식과 다릅니다."},{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."},{"path":"/ko/docs/features/find","title":"셀 내용 찾기","description":"Find는 목록을 줄이지 않고 일치하는 셀을 강조하며 다음·이전 결과로 이동합니다. 검색 결과 주변의 다른 행을 계속 읽어야 하는 업무에 적합합니다."}]}]},{"id":"selection","title":"선택과 클립보드","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."},{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."},{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."},{"path":"/ko/docs/features/single-cell-copy","title":"셀 복사","description":"셀 하나의 표시 텍스트를 시스템 클립보드로 복사합니다. 셀 안 편집기의 텍스트를 선택한 상태와 Grid 셀에 포커스가 있는 상태는 서로 다른 복사 대상입니다."},{"path":"/ko/docs/features/row-copy","title":"행 복사","description":"한 행의 표시 열을 탭으로 구분해 복사합니다. 스프레드시트에 붙여 넣으면 각 열이 셀로 나뉘므로 한 주문의 여러 값을 옮길 때 유용합니다."},{"path":"/ko/docs/features/range-clipboard","title":"범위 복사와 붙여넣기","description":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다."}]}]},{"id":"editing","title":"편집과 검증","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."},{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."},{"path":"/ko/docs/features/rich-select","title":"검색 가능한 선택 편집기","description":"후보가 많은 열에서 검색으로 목록을 좁혀 선택하는 Pro 편집기입니다. 기본 Select는 짧은 고정 목록에 적합하고 Rich Select는 많은 후보에서 빠르게 찾을 때 유용합니다."},{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."},{"path":"/ko/docs/features/validation-rules","title":"데이터 검증","description":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다."},{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]},{"id":"analysis","title":"그룹·분석·수식","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."},{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."},{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."},{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."},{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."},{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]},{"id":"appearance","title":"표현과 화면 상태","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."},{"path":"/ko/docs/features/tooltip","title":"셀 툴팁","description":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다."},{"path":"/ko/docs/features/conditional-formats","title":"조건부 서식","description":"조건부 서식은 값의 의미에 따라 배경·글자 등 표시를 바꿉니다. 재고 부족이나 목표 초과를 빠르게 찾는 데 쓰며 원본 값이나 검증 결과를 바꾸지는 않습니다."},{"path":"/ko/docs/features/cell-change-flash","title":"변경 강조","description":"값 변경 강조는 편집·붙여넣기·데이터 트랜잭션으로 바뀐 셀을 잠깐 표시합니다. 실시간 가격이나 수량이 많은 표에서 방금 달라진 위치를 찾는 데 유용합니다."},{"path":"/ko/docs/features/row-hover","title":"행 따라가기","description":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다."},{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]},{"id":"panels","title":"메뉴와 도구 패널","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/context-menu","title":"셀 컨텍스트 메뉴","description":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다."},{"path":"/ko/docs/features/column-menu","title":"열 메뉴","description":"열 메뉴는 현재 열에 대한 정렬·필터·표시 설정을 가까운 위치에서 제공합니다. 행의 업무 작업은 셀 컨텍스트 메뉴, 전체 열 목록 관리는 도구 패널과 구분합니다."},{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."},{"path":"/ko/docs/features/status-bar","title":"상태와 집계","description":"상태 바는 현재 표의 행 수나 범위 계산 결과처럼 작업 결과를 짧게 보여 주는 영역입니다. 데이터를 편집하는 도구가 아니라 사용자가 보고 있는 범위를 이해하도록 돕습니다."}]}]},{"id":"import-export","title":"파일 가져오기·내보내기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-import","title":"CSV 가져오기","description":"CSV 가져오기는 구분자로 나뉜 텍스트를 새 열과 행으로 바꿉니다. 기존 표에 일부 행을 추가하는 트랜잭션과 달리 importCsvText는 columnDefs와 rowData를 교체합니다."},{"path":"/ko/docs/features/xlsx-import","title":"Excel 가져오기","description":"XLSX 가져오기는 파일을 워크북으로 읽고 선택한 시트를 Grid용 열·행 스냅샷으로 변환합니다. 워크북 전체 파싱 결과와 화면용 스냅샷은 다른 데이터입니다."},{"path":"/ko/docs/features/csv-export","title":"CSV 내보내기","description":"CSV 내보내기는 표 데이터를 다른 도구로 넘기기 쉬운 텍스트 파일로 만듭니다. 셀 색·열 너비·상세 패널 같은 화면 모양을 보존하는 형식은 아닙니다."},{"path":"/ko/docs/features/excel-export","title":"Excel 내보내기","description":"Excel 내보내기는 XLSX 바이트를 생성하거나 파일로 내려받습니다. CSV보다 시트 이름과 워크북 형식이 필요한 교환 작업에 적합하며 Pro 기능입니다."},{"path":"/ko/docs/features/pdf-export","title":"PDF 내보내기","description":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다."}]}]},{"id":"application","title":"앱 연결과 성능","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."},{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."},{"path":"/ko/docs/features/rbac","title":"셀 접근 제어","description":"셀 읽기와 편집 정책은 사용자 역할에 따라 보이는 값과 수정 가능한 값을 제한합니다. 열을 숨기는 UI 설정과 데이터 접근 정책은 다릅니다."},{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."},{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."},{"path":"/ko/docs/features/wasm-acceleration","title":"처리 엔진 선택","description":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다."},{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."},{"path":"/ko/docs/features/fixed-logo","title":"기본 로고의 표시","description":"기본 로고는 Community를 포함해 Grid 하단의 전용 공간에 표시됩니다. 데이터를 가리키는 워터마크가 아니라 표의 구성 요소로 공간을 확보합니다."}]}]}]},{"path":"/ko/docs/options","kind":"index","title":"Grid 속성","summary":"sy-grid의 Grid 속성 136개를 이름으로 찾고 설명·타입·예제로 이동할 수 있습니다.","sections":[{"id":"index","title":"전체 목록","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowData","title":"rowData","description":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다."},{"path":"/ko/docs/options/columnDefs","title":"columnDefs","description":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."},{"path":"/ko/docs/options/context","title":"context","description":"앱의 공통 문맥을 콜백과 Grid API에 전달합니다. 사용자 권한·서비스 등 앱이 관리하는 정보를 연결할 때 사용합니다."},{"path":"/ko/docs/options/components","title":"components","description":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."},{"path":"/ko/docs/options/externalFilter","title":"externalFilter","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."},{"path":"/ko/docs/options/componentTimeoutMs","title":"componentTimeoutMs","description":"비동기 사용자 컴포넌트를 준비할 때 기다릴 최대 시간입니다. 지연·실패는 componentError와 함께 처리하세요."},{"path":"/ko/docs/options/csvImport","title":"csvImport","description":"CSV 가져오기 버튼과 열 매핑 흐름을 제공합니다. 가져오기로 기존 열·데이터가 교체되는지 사용자에게 안내하세요."},{"path":"/ko/docs/options/pdfFontUrl","title":"pdfFontUrl","description":"한글 등 PDF 기본 글꼴에 없는 문자를 출력할 앱 호스팅 TTF/OTF 파일 주소입니다."},{"path":"/ko/docs/options/pdfAutoFont","title":"pdfAutoFont","description":"fontBytes가 없을 때 PDF 글꼴을 자동으로 찾습니다. 지정한 pdfFontUrl을 먼저 사용하고 가능한 환경에서 로컬 글꼴 접근을 시도합니다."},{"path":"/ko/docs/options/formulas","title":"formulas","description":"=로 시작하는 셀 문자열을 수식으로 계산합니다. A1 참조는 화면 정렬 순서가 아닌 원본 열·행 순서를 기준으로 합니다."},{"path":"/ko/docs/options/showFormulas","title":"showFormulas","description":"수식 셀에 계산 결과 대신 수식 원문을 보여 줍니다. formulas를 켠 표에서 검토 용도로 사용합니다."},{"path":"/ko/docs/options/formulaBar","title":"formulaBar","description":"활성 셀의 원본 값이나 수식을 확인하고 편집하는 수식 바를 표시합니다. Enter로 확정하고 Escape로 취소합니다."},{"path":"/ko/docs/options/workbookId","title":"workbookId","description":"여러 Grid 시트를 같은 워크북에 연결할 식별자입니다. 시트 간 참조를 사용할 때 sheetName과 함께 설정합니다."},{"path":"/ko/docs/options/sheetName","title":"sheetName","description":"워크북 안에서 이 Grid 시트를 구분할 이름입니다. 다른 시트의 수식이 참조하므로 이름 변경 영향을 확인하세요."},{"path":"/ko/docs/options/defaultColDef","title":"defaultColDef","description":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다."},{"path":"/ko/docs/options/theme","title":"theme","description":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다."},{"path":"/ko/docs/options/height","title":"height","description":"Grid 컨테이너 높이를 지정합니다. 숫자 또는 CSS 길이 문자열을 사용하며 가상 스크롤과 하단 도구의 공간을 함께 고려합니다."},{"path":"/ko/docs/options/locale","title":"locale","description":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다."},{"path":"/ko/docs/options/pagination","title":"pagination","description":"표를 여러 페이지로 나눠 표시합니다. 서버 데이터 조회 방식 자체를 바꾸는 옵션은 아닙니다."},{"path":"/ko/docs/options/pageSize","title":"pageSize","description":"한 페이지에 표시할 행 수입니다. 그룹 행을 포함하는 표시 행 모델과 원본 데이터 개수를 구분하세요."},{"path":"/ko/docs/options/pageSizeOptions","title":"pageSizeOptions","description":"사용자가 페이지 크기 선택기에서 고를 수 있는 숫자 목록입니다."},{"path":"/ko/docs/options/rowHeight","title":"rowHeight","description":"기본 행 높이를 픽셀 단위로 정합니다. 글자 크기·셀 편집기·터치 영역에 맞게 선택합니다."},{"path":"/ko/docs/options/rowHeightFn","title":"rowHeightFn","description":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다."},{"path":"/ko/docs/options/virtualScroll","title":"virtualScroll","description":"화면 주변의 행만 렌더링하는 세로 가상화를 사용합니다. 전체 데이터 다운로드를 줄이는 옵션과는 다릅니다."},{"path":"/ko/docs/options/quickFilter","title":"quickFilter","description":"표 전체 검색 입력을 표시합니다. 초기 검색어나 외부 입력 연결에는 quickFilterText를 사용합니다."},{"path":"/ko/docs/options/quickFilterText","title":"quickFilterText","description":"빠른 검색에 적용할 문자열입니다. 앱의 외부 검색창에서도 새 문자열을 지정할 수 있습니다."},{"path":"/ko/docs/options/quickFilterPlaceholder","title":"quickFilterPlaceholder","description":"빠른 검색 입력의 안내 문구입니다. 검색할 수 있는 데이터 범위를 구체적으로 설명하세요."},{"path":"/ko/docs/options/quickFilterMode","title":"quickFilterMode","description":"여러 검색어를 모두 만족해야 하는 and 또는 하나라도 만족하면 되는 or로 연결합니다."},{"path":"/ko/docs/options/quickFilterRegex","title":"quickFilterRegex","description":"빠른 검색 문자열을 정규식으로 해석하도록 설정합니다. 일반 텍스트 검색과 입력 의미가 달라집니다."},{"path":"/ko/docs/options/quickFilterDebounce","title":"quickFilterDebounce","description":"빠른 검색 입력 후 필터를 적용하기까지 기다릴 시간입니다. 연속 입력의 처리량과 반응 속도를 조절합니다."},{"path":"/ko/docs/options/showEmptyState","title":"showEmptyState","description":"데이터가 없을 때 빈 상태 안내를 표시합니다. 요청 실패와 정상적인 빈 결과를 앱에서 구분합니다."},{"path":"/ko/docs/options/emptyMessage","title":"emptyMessage","description":"원본 데이터가 비어 있을 때 보여 줄 안내 문구입니다."},{"path":"/ko/docs/options/noMatchesMessage","title":"noMatchesMessage","description":"데이터는 있지만 현재 검색·필터에 맞는 행이 없을 때의 문구입니다."},{"path":"/ko/docs/options/clearFiltersLabel","title":"clearFiltersLabel","description":"빈 결과 화면에서 필터를 지우는 작업의 버튼 문구입니다."},{"path":"/ko/docs/options/loading","title":"loading","description":"앱의 데이터 요청 진행 상태를 표시합니다. 요청이 성공하거나 실패한 뒤 모두 해제하세요."},{"path":"/ko/docs/options/loadingMessage","title":"loadingMessage","description":"로딩 중 사용자에게 보여 줄 설명입니다."},{"path":"/ko/docs/options/loadingMode","title":"loadingMode","description":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다."},{"path":"/ko/docs/options/minLoadingDuration","title":"minLoadingDuration","description":"로딩 표시가 너무 짧게 깜박이지 않도록 유지할 최소 시간입니다."},{"path":"/ko/docs/options/datasource","title":"datasource","description":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다."},{"path":"/ko/docs/options/cacheBlockSize","title":"cacheBlockSize","description":"원격 행을 한 번에 요청하고 캐시할 블록 크기입니다."},{"path":"/ko/docs/options/maxBlocksInCache","title":"maxBlocksInCache","description":"무한 행 모델에서 유지할 캐시 블록 수를 제한합니다. 메모리와 재조회 비용의 균형을 정합니다."},{"path":"/ko/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."},{"path":"/ko/docs/options/serverSideGroupCols","title":"serverSideGroupCols","description":"서버에서 그룹화할 열을 바깥 그룹부터 순서대로 지정합니다. 빈 배열은 평면 데이터입니다."},{"path":"/ko/docs/options/serverSideTransactionWaitMs","title":"serverSideTransactionWaitMs","description":"비동기 서버 행 트랜잭션을 모아 처리하기까지 기다릴 시간입니다."},{"path":"/ko/docs/options/viewportDatasource","title":"viewportDatasource","description":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."},{"path":"/ko/docs/options/rowDragManaged","title":"rowDragManaged","description":"Grid가 행 드래그 결과의 순서 변경을 관리하게 합니다. 정렬·필터·다른 행 모델과의 조합 제한을 확인합니다."},{"path":"/ko/docs/options/spanExportMode","title":"spanExportMode","description":"병합 셀을 복사·출력할 때 원점 값을 한 번만 쓸지 각 위치에 반복할지 선택합니다."},{"path":"/ko/docs/options/rowDragMultiRow","title":"rowDragMultiRow","description":"여러 선택 행을 함께 드래그할 수 있게 합니다. 개별 열의 rowDrag와 행 선택 설정도 준비합니다."},{"path":"/ko/docs/options/rowDragText","title":"rowDragText","description":"드래그 중 표시할 문구를 행 수와 기본 라벨로 구성합니다."},{"path":"/ko/docs/options/cellChangeFlash","title":"cellChangeFlash","description":"편집·붙여넣기·트랜잭션으로 값이 바뀐 셀을 잠시 강조합니다."},{"path":"/ko/docs/options/enableCellChangeFlash","title":"enableCellChangeFlash","description":"셀 값 변경 강조를 설정하는 호환 이름입니다. cellChangeFlash와 모순된 값으로 중복 설정하지 마세요."},{"path":"/ko/docs/options/contextMenu","title":"contextMenu","description":"셀 우클릭 메뉴를 표시합니다. 기본 복사·행 복사·CSV 작업을 사용하거나 콜백으로 목록을 대체할 수 있습니다."},{"path":"/ko/docs/options/columnMenu","title":"columnMenu","description":"열 머리글에서 열에 관한 작업 메뉴를 사용할 수 있게 합니다."},{"path":"/ko/docs/options/find","title":"find","description":"로드된 읽기 가능한 셀에서 일치 위치를 찾고 이동하는 찾기 기능을 제공합니다. 서버 전체 검색과는 다릅니다."},{"path":"/ko/docs/options/cellNotes","title":"cellNotes","description":"안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다."},{"path":"/ko/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다."},{"path":"/ko/docs/options/batchEditToolbar","title":"batchEditToolbar","description":"일괄 편집의 시작·확정·취소를 위한 도구를 표시합니다."},{"path":"/ko/docs/options/columnMenuItems","title":"columnMenuItems","description":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."},{"path":"/ko/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},{"path":"/ko/docs/options/keyboardNavigation","title":"keyboardNavigation","description":"셀과 Grid 내부 기능을 키보드로 탐색하는 동작을 설정합니다."},{"path":"/ko/docs/options/rowSelection","title":"rowSelection","description":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다."},{"path":"/ko/docs/options/getRowId","title":"getRowId","description":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."},{"path":"/ko/docs/options/selectionCheckbox","title":"selectionCheckbox","description":"행 선택을 위한 체크박스를 표시합니다."},{"path":"/ko/docs/options/showSelectionCheckbox","title":"showSelectionCheckbox","description":"행 선택 체크박스를 설정하는 호환 이름입니다. selectionCheckbox와 함께 사용할 때 충돌을 피하세요."},{"path":"/ko/docs/options/shiftClickAdditive","title":"shiftClickAdditive","description":"Shift 클릭으로 범위를 선택할 때 기존 선택을 유지해 추가할지 정합니다."},{"path":"/ko/docs/options/rowHover","title":"rowHover","description":"CSS 강조만 사용하거나, 이벤트와 상태가 있는 hover를 사용하거나, hover를 끕니다."},{"path":"/ko/docs/options/resizableColumns","title":"resizableColumns","description":"사용자가 열 경계를 드래그해 너비를 바꿀 수 있게 합니다."},{"path":"/ko/docs/options/reorderableColumns","title":"reorderableColumns","description":"사용자가 머리글을 드래그해 열 순서를 바꿀 수 있게 합니다."},{"path":"/ko/docs/options/columnHiding","title":"columnHiding","description":"열 숨김 기능을 활성화합니다. 숨긴 열을 복원할 메뉴나 패널도 함께 제공합니다."},{"path":"/ko/docs/options/hideableColumns","title":"hideableColumns","description":"열 숨김 기능의 호환 설정입니다. columnHiding과 일관된 값으로 사용합니다."},{"path":"/ko/docs/options/autoSizeOnDoubleClick","title":"autoSizeOnDoubleClick","description":"열 경계 두 번 클릭으로 내용에 맞는 자동 너비를 적용합니다."},{"path":"/ko/docs/options/multiSort","title":"multiSort","description":"여러 열의 정렬 기준을 함께 사용합니다. 우선순위는 정렬 모델의 순서로 확인합니다."},{"path":"/ko/docs/options/enableMultiSort","title":"enableMultiSort","description":"다중 정렬의 호환 이름입니다. multiSort와 모순되지 않게 설정합니다."},{"path":"/ko/docs/options/headerFilterRow","title":"headerFilterRow","description":"머리글 아래에서 열별 필터를 조작하는 행을 표시합니다."},{"path":"/ko/docs/options/conditionBuilder","title":"conditionBuilder","description":"여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다."},{"path":"/ko/docs/options/virtualizeColumns","title":"virtualizeColumns","description":"화면 주변의 열만 렌더링하는 가로 가상화를 설정합니다."},{"path":"/ko/docs/options/groupBy","title":"groupBy","description":"같은 값의 행을 그룹으로 묶습니다. 문자열 배열은 앞 항목부터 다단계 그룹을 만듭니다."},{"path":"/ko/docs/options/pivotMode","title":"pivotMode","description":"행 축·열 축·값 축으로 데이터를 교차 집계하는 피벗 표시를 켭니다. 세 축 설정을 함께 준비합니다."},{"path":"/ko/docs/options/pivotRowGroupColumns","title":"pivotRowGroupColumns","description":"피벗 결과의 왼쪽 행 축을 구성하는 필드 목록입니다."},{"path":"/ko/docs/options/pivotColumns","title":"pivotColumns","description":"고유 값이 피벗의 상단 결과 열로 펼쳐질 필드 목록입니다."},{"path":"/ko/docs/options/pivotValueColumns","title":"pivotValueColumns","description":"피벗 각 교차 셀에서 집계할 값 필드 목록입니다."},{"path":"/ko/docs/options/pivotAggFuncs","title":"pivotAggFuncs","description":"값 필드마다 사용할 집계 함수 이름을 지정합니다. 기본 집계와 등록한 사용자 함수를 사용할 수 있습니다."},{"path":"/ko/docs/options/pivotSubtotals","title":"pivotSubtotals","description":"다단계 피벗 소계를 숨기거나 펼친 그룹의 위·아래에 배치합니다."},{"path":"/ko/docs/options/pivotGrandTotal","title":"pivotGrandTotal","description":"피벗 전체 합계를 숨기거나 결과의 맨 위·아래에 배치합니다."},{"path":"/ko/docs/options/pivotPanelShow","title":"pivotPanelShow","description":"피벗 패널을 항상 표시할지, 피벗 모드일 때만 표시할지, 숨길지 선택합니다."},{"path":"/ko/docs/options/pivotPanel","title":"pivotPanel","description":"피벗 패널의 호환 boolean 설정입니다. true는 pivotPanelShow의 always에 해당합니다."},{"path":"/ko/docs/options/groupPanel","title":"groupPanel","description":"열을 끌어 넣어 행 그룹 기준을 구성하는 패널을 표시합니다."},{"path":"/ko/docs/options/getDataPath","title":"getDataPath","description":"행의 루트부터 현재 노드까지 경로 배열을 반환해 트리를 만듭니다. ID 기반 트리 설정보다 우선합니다."},{"path":"/ko/docs/options/treeIdField","title":"treeIdField","description":"부모 ID 방식 트리에서 각 노드의 ID를 담은 필드입니다. treeParentField와 함께 지정합니다."},{"path":"/ko/docs/options/treeParentField","title":"treeParentField","description":"부모 ID 방식 트리에서 부모 노드의 ID를 담은 필드입니다."},{"path":"/ko/docs/options/treeLabelField","title":"treeLabelField","description":"부모 ID 방식 트리에서 표시할 라벨 필드입니다. 지정하지 않으면 ID를 사용합니다."},{"path":"/ko/docs/options/masterDetail","title":"masterDetail","description":"주문 아래 품목처럼 원본 행을 펼쳐 전체 폭의 상세 패널을 표시합니다."},{"path":"/ko/docs/options/detailRowHeight","title":"detailRowHeight","description":"펼친 상세 패널의 높이를 픽셀로 정합니다."},{"path":"/ko/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다."},{"path":"/ko/docs/options/detailGridOptions","title":"detailGridOptions","description":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다."},{"path":"/ko/docs/options/getDetailRowData","title":"getDetailRowData","description":"펼친 부모 행에 해당하는 상세 행을 배열 또는 Promise로 반환합니다. 한 번 펼치는 동안 결과를 재사용합니다."},{"path":"/ko/docs/options/detailNestingLevel","title":"detailNestingLevel","description":"중첩 상세 Grid의 깊이입니다. 자동 생성된 하위 Grid는 부모가 설정하며 재귀 깊이 제한에 사용됩니다."},{"path":"/ko/docs/options/rangeSelection","title":"rangeSelection","description":"셀 사각 범위를 선택할 수 있게 합니다. 행 선택과 독립적이며 복사·채우기·차트 연동의 입력이 됩니다."},{"path":"/ko/docs/options/clipboardEscapeFormulae","title":"clipboardEscapeFormulae","description":"클립보드로 나가는 텍스트의 스프레드시트 수식 접두사를 이스케이프합니다."},{"path":"/ko/docs/options/statusBar","title":"statusBar","description":"기본 행 수 안내 또는 지정한 상태 패널을 표 아래에 표시합니다. true가 모든 집계 패널을 켜는 것은 아닙니다."},{"path":"/ko/docs/options/sideBar","title":"sideBar","description":"열·필터 도구 패널과 기본 열림 패널을 구성합니다. true는 탭을 제공하고 문자열은 지정 패널을 엽니다."},{"path":"/ko/docs/options/rows","title":"rows","description":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다."},{"path":"/ko/docs/options/columns","title":"columns","description":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다."},{"path":"/ko/docs/options/maxRendered","title":"maxRendered","description":"한 번에 렌더링할 행 수의 상한을 설정합니다. 데이터 전체 개수와는 별개의 렌더링 제약입니다."},{"path":"/ko/docs/options/engine","title":"engine","description":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다."},{"path":"/ko/docs/options/proThreshold","title":"proThreshold","description":"자동 엔진 선택에서 Pro 경로를 고려할 데이터 규모 기준입니다."},{"path":"/ko/docs/options/unavailable","title":"unavailable","description":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다."},{"path":"/ko/docs/options/brandLogo","title":"brandLogo","description":"기본 로고·none·지원하는 이미지 data URL 중 하나를 지정합니다. 제거와 변경에는 grid.branding 권한이 필요하며 위치는 표 하단 오른쪽입니다."},{"path":"/ko/docs/options/collaborationRoom","title":"collaborationRoom","description":"편집과 참여 상태를 공유할 협업 방 식별자입니다. 여러 기기 연결에는 원격 서비스 설정이 필요합니다."},{"path":"/ko/docs/options/realtimeUrl","title":"realtimeUrl","description":"원격 협업을 연결할 WebSocket 주소입니다. 생략하면 같은 페이지·프로세스의 데모 범위로 사용합니다."},{"path":"/ko/docs/options/collabUserName","title":"collabUserName","description":"다른 협업 참가자에게 표시할 사용자 이름입니다."},{"path":"/ko/docs/options/collabUserColor","title":"collabUserColor","description":"협업 참가자의 커서·표시에 사용할 구분 색상입니다."},{"path":"/ko/docs/options/collabPresence","title":"collabPresence","description":"협업 참가자의 현재 위치와 참여 상태 표시를 설정합니다."},{"path":"/ko/docs/options/collabConflictUi","title":"collabConflictUi","description":"동시 편집 충돌에 대한 사용자 안내 UI를 설정합니다."},{"path":"/ko/docs/options/auditLog","title":"auditLog","description":"행·셀·선택·편집 이력 전이를 감사 로그로 기록합니다. 기본 비활성 상태이며 장기 서버 보존과는 별개입니다."},{"path":"/ko/docs/options/auditLogMax","title":"auditLogMax","description":"메모리에 보관할 감사 로그 수의 상한입니다. 초과 시 오래된 기록부터 빠집니다."},{"path":"/ko/docs/options/canReadCell","title":"canReadCell","description":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다."},{"path":"/ko/docs/options/maskedCellValue","title":"maskedCellValue","description":"읽기 제한된 셀 대신 표시할 마스킹 문구입니다."},{"path":"/ko/docs/options/canEditCell","title":"canEditCell","description":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다."},{"path":"/ko/docs/options/conditionalFormats","title":"conditionalFormats","description":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다."},{"path":"/ko/docs/options/conditionalFormatUi","title":"conditionalFormatUi","description":"사용자가 조건부 서식 규칙을 조정하는 UI를 제공합니다."},{"path":"/ko/docs/options/validationRules","title":"validationRules","description":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다."},{"path":"/ko/docs/options/invalidEditMode","title":"invalidEditMode","description":"검증 실패 시 오류를 표시하고 반영하는 allow, 기존 값으로 되돌리는 revert, 확정을 막는 block 중 선택합니다."},{"path":"/ko/docs/options/maxSnapshots","title":"maxSnapshots","description":"메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다."},{"path":"/ko/docs/options/collabPersistence","title":"collabPersistence","description":"협업 상태의 로컬 영속 저장을 사용하지 않을지 IndexedDB를 사용할지 선택합니다. 서버 백업을 대신하지 않습니다."},{"path":"/ko/docs/options/initialState","title":"initialState","description":"Grid의 첫 초기화에 한 번 적용할 버전 포함 화면 상태입니다. 실행 중 복원은 setState를 사용합니다."},{"path":"/ko/docs/options/editType","title":"editType","description":"한 셀씩 편집할지 한 행의 여러 셀을 묶어 편집할지 선택합니다."},{"path":"/ko/docs/options/enableFillHandle","title":"enableFillHandle","description":"선택 범위 모서리의 채우기 핸들을 활성화합니다."},{"path":"/ko/docs/options/fillHandleAxes","title":"fillHandleAxes","description":"채우기를 가로·세로·양방향 중 어디로 허용할지 정합니다."},{"path":"/ko/docs/options/fillHandleMode","title":"fillHandleMode","description":"채우기에서 기존 값을 복사할지 연속 패턴으로 확장할지 선택합니다."},{"path":"/ko/docs/options/alignedGrids","title":"alignedGrids","description":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다."},{"path":"/ko/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다."},{"path":"/ko/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."},{"path":"/ko/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다."},{"path":"/ko/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다."},{"path":"/ko/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다."}]}]}]},{"path":"/ko/docs/options/rowData","kind":"option","title":"rowData","summary":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다.","member":{"name":"rowData","attribute":"row-data","type":"GridData[]","kind":"property","values":[],"default":"undefined","description":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowData: GridData[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowData"],["HTML 속성","row-data"],["기본값","undefined"],["입력 타입","GridData[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/options/columnDefs","kind":"option","title":"columnDefs","summary":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다.","member":{"name":"columnDefs","attribute":"column-defs","type":"Array<ColumnDef | GridColumnGroupDef>","kind":"property","values":[],"default":"undefined","description":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnDefs: Array<ColumnDef | GridColumnGroupDef>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","columnDefs"],["HTML 속성","column-defs"],["기본값","undefined"],["입력 타입","Array<ColumnDef | GridColumnGroupDef>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/options/context","kind":"option","title":"context","summary":"앱의 공통 문맥을 콜백과 Grid API에 전달합니다. 사용자 권한·서비스 등 앱이 관리하는 정보를 연결할 때 사용합니다.","member":{"name":"context","attribute":"context","type":"unknown","kind":"property","values":[],"default":"undefined","description":"앱의 공통 문맥을 콜백과 Grid API에 전달합니다. 사용자 권한·서비스 등 앱이 관리하는 정보를 연결할 때 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"앱의 공통 문맥을 콜백과 Grid API에 전달합니다. 사용자 권한·서비스 등 앱이 관리하는 정보를 연결할 때 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"context: unknown","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","context"],["HTML 속성","context"],["기본값","undefined"],["입력 타입","unknown"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/components","kind":"option","title":"components","summary":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다.","member":{"name":"components","attribute":"components","type":"GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >","kind":"property","values":[],"default":"undefined","description":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"components: GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","components"],["HTML 속성","components"],["기본값","undefined"],["입력 타입","GridComponentLocalDefinitions<\n    GridData,\n    unknown,\n    unknown,\n    unknown\n  >"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/options/externalFilter","kind":"option","title":"externalFilter","summary":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다.","member":{"name":"externalFilter","attribute":"external-filter","type":"| GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>","kind":"property","values":[],"default":"undefined","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"externalFilter: | GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","externalFilter"],["HTML 속성","external-filter"],["기본값","undefined"],["입력 타입","| GridExternalFilterCallbacks<GridData>\n    | GridExternalFilterInstance<GridData, unknown>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/external-filter","title":"업무 조건으로 필터링","description":"Grid 밖의 업무 조건을 행 판정 함수로 연결합니다. 미완료만 보기, 내 담당 건만 보기처럼 외부 UI에 있는 선택이 표의 결과를 제어할 때 사용합니다."}]}]}]},{"path":"/ko/docs/options/componentTimeoutMs","kind":"option","title":"componentTimeoutMs","summary":"비동기 사용자 컴포넌트를 준비할 때 기다릴 최대 시간입니다. 지연·실패는 componentError와 함께 처리하세요.","member":{"name":"componentTimeoutMs","attribute":"component-timeout-ms","type":"number","kind":"number","values":[],"default":"5_000","description":"비동기 사용자 컴포넌트를 준비할 때 기다릴 최대 시간입니다. 지연·실패는 componentError와 함께 처리하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"비동기 사용자 컴포넌트를 준비할 때 기다릴 최대 시간입니다. 지연·실패는 componentError와 함께 처리하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"componentTimeoutMs: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","componentTimeoutMs"],["HTML 속성","component-timeout-ms"],["기본값","5_000"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 component-timeout-ms 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/options/csvImport","kind":"option","title":"csvImport","summary":"CSV 가져오기 버튼과 열 매핑 흐름을 제공합니다. 가져오기로 기존 열·데이터가 교체되는지 사용자에게 안내하세요.","member":{"name":"csvImport","attribute":"csv-import","type":"boolean","kind":"boolean","values":[],"default":"false","description":"CSV 가져오기 버튼과 열 매핑 흐름을 제공합니다. 가져오기로 기존 열·데이터가 교체되는지 사용자에게 안내하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"CSV 가져오기 버튼과 열 매핑 흐름을 제공합니다. 가져오기로 기존 열·데이터가 교체되는지 사용자에게 안내하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"csvImport: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","csvImport"],["HTML 속성","csv-import"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 csv-import 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-import","title":"CSV 가져오기","description":"CSV 가져오기는 구분자로 나뉜 텍스트를 새 열과 행으로 바꿉니다. 기존 표에 일부 행을 추가하는 트랜잭션과 달리 importCsvText는 columnDefs와 rowData를 교체합니다."}]}]}]},{"path":"/ko/docs/options/pdfFontUrl","kind":"option","title":"pdfFontUrl","summary":"한글 등 PDF 기본 글꼴에 없는 문자를 출력할 앱 호스팅 TTF/OTF 파일 주소입니다.","member":{"name":"pdfFontUrl","attribute":"pdf-font-url","type":"string","kind":"string","values":[],"default":"undefined","description":"한글 등 PDF 기본 글꼴에 없는 문자를 출력할 앱 호스팅 TTF/OTF 파일 주소입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한글 등 PDF 기본 글꼴에 없는 문자를 출력할 앱 호스팅 TTF/OTF 파일 주소입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in PDF export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pdfFontUrl: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pdfFontUrl"],["HTML 속성","pdf-font-url"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pdf-font-url 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pdf-export","title":"PDF 내보내기","description":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다."}]}]}]},{"path":"/ko/docs/options/pdfAutoFont","kind":"option","title":"pdfAutoFont","summary":"fontBytes가 없을 때 PDF 글꼴을 자동으로 찾습니다. 지정한 pdfFontUrl을 먼저 사용하고 가능한 환경에서 로컬 글꼴 접근을 시도합니다.","member":{"name":"pdfAutoFont","attribute":"pdf-auto-font","type":"boolean","kind":"boolean","values":[],"default":"true","description":"fontBytes가 없을 때 PDF 글꼴을 자동으로 찾습니다. 지정한 pdfFontUrl을 먼저 사용하고 가능한 환경에서 로컬 글꼴 접근을 시도합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"fontBytes가 없을 때 PDF 글꼴을 자동으로 찾습니다. 지정한 pdfFontUrl을 먼저 사용하고 가능한 환경에서 로컬 글꼴 접근을 시도합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in PDF export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pdfAutoFont: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pdfAutoFont"],["HTML 속성","pdf-auto-font"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pdf-auto-font 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pdf-export","title":"PDF 내보내기","description":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다."}]}]}]},{"path":"/ko/docs/options/formulas","kind":"option","title":"formulas","summary":"=로 시작하는 셀 문자열을 수식으로 계산합니다. A1 참조는 화면 정렬 순서가 아닌 원본 열·행 순서를 기준으로 합니다.","member":{"name":"formulas","attribute":"formulas","type":"boolean","kind":"boolean","values":[],"default":"false","description":"=로 시작하는 셀 문자열을 수식으로 계산합니다. A1 참조는 화면 정렬 순서가 아닌 원본 열·행 순서를 기준으로 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"=로 시작하는 셀 문자열을 수식으로 계산합니다. A1 참조는 화면 정렬 순서가 아닌 원본 열·행 순서를 기준으로 합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"formulas: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","formulas"],["HTML 속성","formulas"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 formulas 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/options/showFormulas","kind":"option","title":"showFormulas","summary":"수식 셀에 계산 결과 대신 수식 원문을 보여 줍니다. formulas를 켠 표에서 검토 용도로 사용합니다.","member":{"name":"showFormulas","attribute":"show-formulas","type":"boolean","kind":"boolean","values":[],"default":"false","description":"수식 셀에 계산 결과 대신 수식 원문을 보여 줍니다. formulas를 켠 표에서 검토 용도로 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"수식 셀에 계산 결과 대신 수식 원문을 보여 줍니다. formulas를 켠 표에서 검토 용도로 사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"showFormulas: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","showFormulas"],["HTML 속성","show-formulas"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 show-formulas 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/options/formulaBar","kind":"option","title":"formulaBar","summary":"활성 셀의 원본 값이나 수식을 확인하고 편집하는 수식 바를 표시합니다. Enter로 확정하고 Escape로 취소합니다.","member":{"name":"formulaBar","attribute":"formula-bar","type":"boolean","kind":"boolean","values":[],"default":"false","description":"활성 셀의 원본 값이나 수식을 확인하고 편집하는 수식 바를 표시합니다. Enter로 확정하고 Escape로 취소합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"활성 셀의 원본 값이나 수식을 확인하고 편집하는 수식 바를 표시합니다. Enter로 확정하고 Escape로 취소합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"formulaBar: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","formulaBar"],["HTML 속성","formula-bar"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 formula-bar 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/options/workbookId","kind":"option","title":"workbookId","summary":"여러 Grid 시트를 같은 워크북에 연결할 식별자입니다. 시트 간 참조를 사용할 때 sheetName과 함께 설정합니다.","member":{"name":"workbookId","attribute":"workbook-id","type":"string","kind":"string","values":[],"default":"undefined","description":"여러 Grid 시트를 같은 워크북에 연결할 식별자입니다. 시트 간 참조를 사용할 때 sheetName과 함께 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 Grid 시트를 같은 워크북에 연결할 식별자입니다. 시트 간 참조를 사용할 때 sheetName과 함께 설정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"workbookId: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","workbookId"],["HTML 속성","workbook-id"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 workbook-id 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/options/sheetName","kind":"option","title":"sheetName","summary":"워크북 안에서 이 Grid 시트를 구분할 이름입니다. 다른 시트의 수식이 참조하므로 이름 변경 영향을 확인하세요.","member":{"name":"sheetName","attribute":"sheet-name","type":"string","kind":"string","values":[],"default":"undefined","description":"워크북 안에서 이 Grid 시트를 구분할 이름입니다. 다른 시트의 수식이 참조하므로 이름 변경 영향을 확인하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"워크북 안에서 이 Grid 시트를 구분할 이름입니다. 다른 시트의 수식이 참조하므로 이름 변경 영향을 확인하세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sheetName: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","sheetName"],["HTML 속성","sheet-name"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 sheet-name 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/options/defaultColDef","kind":"option","title":"defaultColDef","summary":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다.","member":{"name":"defaultColDef","attribute":"default-col-def","type":"Partial<ColumnDef>","kind":"property","values":[],"default":"undefined","description":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"defaultColDef: Partial<ColumnDef>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","defaultColDef"],["HTML 속성","default-col-def"],["기본값","undefined"],["입력 타입","Partial<ColumnDef>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/options/theme","kind":"option","title":"theme","summary":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다.","member":{"name":"theme","attribute":"theme","type":"GridTheme","kind":"property","values":["alpine","balham","alpine-dark","balham-dark"],"default":"'alpine'","description":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"theme: GridTheme","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","theme"],["HTML 속성","theme"],["기본값","'alpine'"],["입력 타입","GridTheme"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/theming","title":"화면에 맞는 테마","description":"Grid 테마는 표 안의 배경·선·텍스트·선택 상태를 함께 구성합니다. 페이지 전체의 배경을 덮는 설정이 아니라 표의 읽기 환경을 맞추는 설정입니다."}]}]}]},{"path":"/ko/docs/options/height","kind":"option","title":"height","summary":"Grid 컨테이너 높이를 지정합니다. 숫자 또는 CSS 길이 문자열을 사용하며 가상 스크롤과 하단 도구의 공간을 함께 고려합니다.","member":{"name":"height","attribute":"height","type":"string | number","kind":"property","values":[],"default":"undefined","description":"Grid 컨테이너 높이를 지정합니다. 숫자 또는 CSS 길이 문자열을 사용하며 가상 스크롤과 하단 도구의 공간을 함께 고려합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 컨테이너 높이를 지정합니다. 숫자 또는 CSS 길이 문자열을 사용하며 가상 스크롤과 하단 도구의 공간을 함께 고려합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"height: string | number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","height"],["HTML 속성","height"],["기본값","undefined"],["입력 타입","string | number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/options/locale","kind":"option","title":"locale","summary":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다.","member":{"name":"locale","attribute":"locale","type":"GridLocale","kind":"property","values":["en","ko","ja"],"default":"'en'","description":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"locale: GridLocale","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","locale"],["HTML 속성","locale"],["기본값","'en'"],["입력 타입","GridLocale"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/keyboard-a11y-i18n","title":"키보드와 다국어","description":"Grid는 많은 행과 열을 키보드로 탐색하는 작업 공간입니다. 셀 이동·편집·메뉴 진입과 화면 밖 앱 버튼으로 나가는 경로가 모두 이해 가능해야 합니다."}]}]}]},{"path":"/ko/docs/options/pagination","kind":"option","title":"pagination","summary":"표를 여러 페이지로 나눠 표시합니다. 서버 데이터 조회 방식 자체를 바꾸는 옵션은 아닙니다.","member":{"name":"pagination","attribute":"pagination","type":"boolean","kind":"boolean","values":[],"default":"false","description":"표를 여러 페이지로 나눠 표시합니다. 서버 데이터 조회 방식 자체를 바꾸는 옵션은 아닙니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"표를 여러 페이지로 나눠 표시합니다. 서버 데이터 조회 방식 자체를 바꾸는 옵션은 아닙니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pagination: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pagination"],["HTML 속성","pagination"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pagination 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pagination","title":"페이지 단위 탐색","description":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다."}]}]}]},{"path":"/ko/docs/options/pageSize","kind":"option","title":"pageSize","summary":"한 페이지에 표시할 행 수입니다. 그룹 행을 포함하는 표시 행 모델과 원본 데이터 개수를 구분하세요.","member":{"name":"pageSize","attribute":"page-size","type":"number","kind":"number","values":[],"default":"DEFAULT_PAGE_SIZE","description":"한 페이지에 표시할 행 수입니다. 그룹 행을 포함하는 표시 행 모델과 원본 데이터 개수를 구분하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 페이지에 표시할 행 수입니다. 그룹 행을 포함하는 표시 행 모델과 원본 데이터 개수를 구분하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pageSize: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pageSize"],["HTML 속성","page-size"],["기본값","DEFAULT_PAGE_SIZE"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 page-size 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pagination","title":"페이지 단위 탐색","description":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다."}]}]}]},{"path":"/ko/docs/options/pageSizeOptions","kind":"option","title":"pageSizeOptions","summary":"사용자가 페이지 크기 선택기에서 고를 수 있는 숫자 목록입니다.","member":{"name":"pageSizeOptions","attribute":"page-size-options","type":"readonly number[]","kind":"property","values":[],"default":"DEFAULT_PAGE_SIZE_OPTIONS","description":"사용자가 페이지 크기 선택기에서 고를 수 있는 숫자 목록입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자가 페이지 크기 선택기에서 고를 수 있는 숫자 목록입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pageSizeOptions: readonly number[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pageSizeOptions"],["HTML 속성","page-size-options"],["기본값","DEFAULT_PAGE_SIZE_OPTIONS"],["입력 타입","readonly number[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pagination","title":"페이지 단위 탐색","description":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다."}]}]}]},{"path":"/ko/docs/options/rowHeight","kind":"option","title":"rowHeight","summary":"기본 행 높이를 픽셀 단위로 정합니다. 글자 크기·셀 편집기·터치 영역에 맞게 선택합니다.","member":{"name":"rowHeight","attribute":"row-height","type":"number","kind":"number","values":[],"default":"32","description":"기본 행 높이를 픽셀 단위로 정합니다. 글자 크기·셀 편집기·터치 영역에 맞게 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기본 행 높이를 픽셀 단위로 정합니다. 글자 크기·셀 편집기·터치 영역에 맞게 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowHeight: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowHeight"],["HTML 속성","row-height"],["기본값","32"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 row-height 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/options/rowHeightFn","kind":"option","title":"rowHeightFn","summary":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다.","member":{"name":"rowHeightFn","attribute":"row-height-fn","type":"(index: number, row: GridData) => number","kind":"property","values":[],"default":"undefined","description":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowHeightFn: (index: number, row: GridData) => number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowHeightFn"],["HTML 속성","row-height-fn"],["기본값","undefined"],["입력 타입","(index: number, row: GridData) => number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/options/virtualScroll","kind":"option","title":"virtualScroll","summary":"화면 주변의 행만 렌더링하는 세로 가상화를 사용합니다. 전체 데이터 다운로드를 줄이는 옵션과는 다릅니다.","member":{"name":"virtualScroll","attribute":"virtual-scroll","type":"boolean","kind":"boolean","values":[],"default":"true","description":"화면 주변의 행만 렌더링하는 세로 가상화를 사용합니다. 전체 데이터 다운로드를 줄이는 옵션과는 다릅니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"화면 주변의 행만 렌더링하는 세로 가상화를 사용합니다. 전체 데이터 다운로드를 줄이는 옵션과는 다릅니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"virtualScroll: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","virtualScroll"],["HTML 속성","virtual-scroll"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 virtual-scroll 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/options/quickFilter","kind":"option","title":"quickFilter","summary":"표 전체 검색 입력을 표시합니다. 초기 검색어나 외부 입력 연결에는 quickFilterText를 사용합니다.","member":{"name":"quickFilter","attribute":"quick-filter","type":"boolean","kind":"boolean","values":[],"default":"false","description":"표 전체 검색 입력을 표시합니다. 초기 검색어나 외부 입력 연결에는 quickFilterText를 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"표 전체 검색 입력을 표시합니다. 초기 검색어나 외부 입력 연결에는 quickFilterText를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilter: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilter"],["HTML 속성","quick-filter"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/quickFilterText","kind":"option","title":"quickFilterText","summary":"빠른 검색에 적용할 문자열입니다. 앱의 외부 검색창에서도 새 문자열을 지정할 수 있습니다.","member":{"name":"quickFilterText","attribute":"quick-filter-text","type":"string","kind":"string","values":[],"default":"''","description":"빠른 검색에 적용할 문자열입니다. 앱의 외부 검색창에서도 새 문자열을 지정할 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빠른 검색에 적용할 문자열입니다. 앱의 외부 검색창에서도 새 문자열을 지정할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterText: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilterText"],["HTML 속성","quick-filter-text"],["기본값","''"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter-text 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/quickFilterPlaceholder","kind":"option","title":"quickFilterPlaceholder","summary":"빠른 검색 입력의 안내 문구입니다. 검색할 수 있는 데이터 범위를 구체적으로 설명하세요.","member":{"name":"quickFilterPlaceholder","attribute":"quick-filter-placeholder","type":"string","kind":"string","values":[],"default":"undefined","description":"빠른 검색 입력의 안내 문구입니다. 검색할 수 있는 데이터 범위를 구체적으로 설명하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빠른 검색 입력의 안내 문구입니다. 검색할 수 있는 데이터 범위를 구체적으로 설명하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterPlaceholder: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilterPlaceholder"],["HTML 속성","quick-filter-placeholder"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter-placeholder 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/quickFilterMode","kind":"option","title":"quickFilterMode","summary":"여러 검색어를 모두 만족해야 하는 and 또는 하나라도 만족하면 되는 or로 연결합니다.","member":{"name":"quickFilterMode","attribute":"quick-filter-mode","type":"'and' | 'or'","kind":"string","values":["and","or"],"default":"'and'","description":"여러 검색어를 모두 만족해야 하는 and 또는 하나라도 만족하면 되는 or로 연결합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 검색어를 모두 만족해야 하는 and 또는 하나라도 만족하면 되는 or로 연결합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterMode: 'and' | 'or'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilterMode"],["HTML 속성","quick-filter-mode"],["기본값","'and'"],["입력 타입","'and' | 'or'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/quickFilterRegex","kind":"option","title":"quickFilterRegex","summary":"빠른 검색 문자열을 정규식으로 해석하도록 설정합니다. 일반 텍스트 검색과 입력 의미가 달라집니다.","member":{"name":"quickFilterRegex","attribute":"quick-filter-regex","type":"boolean","kind":"boolean","values":[],"default":"false","description":"빠른 검색 문자열을 정규식으로 해석하도록 설정합니다. 일반 텍스트 검색과 입력 의미가 달라집니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빠른 검색 문자열을 정규식으로 해석하도록 설정합니다. 일반 텍스트 검색과 입력 의미가 달라집니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterRegex: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilterRegex"],["HTML 속성","quick-filter-regex"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter-regex 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/quickFilterDebounce","kind":"option","title":"quickFilterDebounce","summary":"빠른 검색 입력 후 필터를 적용하기까지 기다릴 시간입니다. 연속 입력의 처리량과 반응 속도를 조절합니다.","member":{"name":"quickFilterDebounce","attribute":"quick-filter-debounce","type":"number","kind":"number","values":[],"default":"150","description":"빠른 검색 입력 후 필터를 적용하기까지 기다릴 시간입니다. 연속 입력의 처리량과 반응 속도를 조절합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빠른 검색 입력 후 필터를 적용하기까지 기다릴 시간입니다. 연속 입력의 처리량과 반응 속도를 조절합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterDebounce: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","quickFilterDebounce"],["HTML 속성","quick-filter-debounce"],["기본값","150"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 quick-filter-debounce 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/options/showEmptyState","kind":"option","title":"showEmptyState","summary":"데이터가 없을 때 빈 상태 안내를 표시합니다. 요청 실패와 정상적인 빈 결과를 앱에서 구분합니다.","member":{"name":"showEmptyState","attribute":"show-empty-state","type":"boolean","kind":"boolean","values":[],"default":"true","description":"데이터가 없을 때 빈 상태 안내를 표시합니다. 요청 실패와 정상적인 빈 결과를 앱에서 구분합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"데이터가 없을 때 빈 상태 안내를 표시합니다. 요청 실패와 정상적인 빈 결과를 앱에서 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"showEmptyState: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","showEmptyState"],["HTML 속성","show-empty-state"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 show-empty-state 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/emptyMessage","kind":"option","title":"emptyMessage","summary":"원본 데이터가 비어 있을 때 보여 줄 안내 문구입니다.","member":{"name":"emptyMessage","attribute":"empty-message","type":"string","kind":"string","values":[],"default":"undefined","description":"원본 데이터가 비어 있을 때 보여 줄 안내 문구입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원본 데이터가 비어 있을 때 보여 줄 안내 문구입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"emptyMessage: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","emptyMessage"],["HTML 속성","empty-message"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 empty-message 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/noMatchesMessage","kind":"option","title":"noMatchesMessage","summary":"데이터는 있지만 현재 검색·필터에 맞는 행이 없을 때의 문구입니다.","member":{"name":"noMatchesMessage","attribute":"no-matches-message","type":"string","kind":"string","values":[],"default":"undefined","description":"데이터는 있지만 현재 검색·필터에 맞는 행이 없을 때의 문구입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"데이터는 있지만 현재 검색·필터에 맞는 행이 없을 때의 문구입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"noMatchesMessage: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","noMatchesMessage"],["HTML 속성","no-matches-message"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 no-matches-message 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/clearFiltersLabel","kind":"option","title":"clearFiltersLabel","summary":"빈 결과 화면에서 필터를 지우는 작업의 버튼 문구입니다.","member":{"name":"clearFiltersLabel","attribute":"clear-filters-label","type":"string","kind":"string","values":[],"default":"undefined","description":"빈 결과 화면에서 필터를 지우는 작업의 버튼 문구입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빈 결과 화면에서 필터를 지우는 작업의 버튼 문구입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clearFiltersLabel: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","clearFiltersLabel"],["HTML 속성","clear-filters-label"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 clear-filters-label 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/loading","kind":"option","title":"loading","summary":"앱의 데이터 요청 진행 상태를 표시합니다. 요청이 성공하거나 실패한 뒤 모두 해제하세요.","member":{"name":"loading","attribute":"loading","type":"boolean","kind":"boolean","values":[],"default":"false","description":"앱의 데이터 요청 진행 상태를 표시합니다. 요청이 성공하거나 실패한 뒤 모두 해제하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"앱의 데이터 요청 진행 상태를 표시합니다. 요청이 성공하거나 실패한 뒤 모두 해제하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"loading: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","loading"],["HTML 속성","loading"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 loading 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/loadingMessage","kind":"option","title":"loadingMessage","summary":"로딩 중 사용자에게 보여 줄 설명입니다.","member":{"name":"loadingMessage","attribute":"loading-message","type":"string","kind":"string","values":[],"default":"undefined","description":"로딩 중 사용자에게 보여 줄 설명입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"로딩 중 사용자에게 보여 줄 설명입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"loadingMessage: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","loadingMessage"],["HTML 속성","loading-message"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 loading-message 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/loadingMode","kind":"option","title":"loadingMode","summary":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다.","member":{"name":"loadingMode","attribute":"loading-mode","type":"LoadingMode","kind":"string","values":["auto","manual","off"],"default":"'manual'","description":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"loadingMode: LoadingMode","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","loadingMode"],["HTML 속성","loading-mode"],["기본값","'manual'"],["입력 타입","LoadingMode"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 loading-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/LoadingMode","title":"LoadingMode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/minLoadingDuration","kind":"option","title":"minLoadingDuration","summary":"로딩 표시가 너무 짧게 깜박이지 않도록 유지할 최소 시간입니다.","member":{"name":"minLoadingDuration","attribute":"min-loading-duration","type":"number","kind":"number","values":[],"default":"DEFAULT_MIN_LOADING_DURATION_MS","description":"로딩 표시가 너무 짧게 깜박이지 않도록 유지할 최소 시간입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"로딩 표시가 너무 짧게 깜박이지 않도록 유지할 최소 시간입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"minLoadingDuration: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","minLoadingDuration"],["HTML 속성","min-loading-duration"],["기본값","DEFAULT_MIN_LOADING_DURATION_MS"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 min-loading-duration 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/options/datasource","kind":"option","title":"datasource","summary":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다.","member":{"name":"datasource","attribute":"datasource","type":"InfiniteRowDatasource","kind":"property","values":[],"default":"undefined","description":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"datasource: InfiniteRowDatasource","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","datasource"],["HTML 속성","datasource"],["기본값","undefined"],["입력 타입","InfiniteRowDatasource"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/infinite-row-model","title":"필요한 블록만 요청","description":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다."}]}]}]},{"path":"/ko/docs/options/cacheBlockSize","kind":"option","title":"cacheBlockSize","summary":"원격 행을 한 번에 요청하고 캐시할 블록 크기입니다.","member":{"name":"cacheBlockSize","attribute":"cache-block-size","type":"number","kind":"number","values":[],"default":"100","description":"원격 행을 한 번에 요청하고 캐시할 블록 크기입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원격 행을 한 번에 요청하고 캐시할 블록 크기입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cacheBlockSize: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","cacheBlockSize"],["HTML 속성","cache-block-size"],["기본값","100"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 cache-block-size 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/infinite-row-model","title":"필요한 블록만 요청","description":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다."}]}]}]},{"path":"/ko/docs/options/maxBlocksInCache","kind":"option","title":"maxBlocksInCache","summary":"무한 행 모델에서 유지할 캐시 블록 수를 제한합니다. 메모리와 재조회 비용의 균형을 정합니다.","member":{"name":"maxBlocksInCache","attribute":"max-blocks-in-cache","type":"number","kind":"number","values":[],"default":"undefined","description":"무한 행 모델에서 유지할 캐시 블록 수를 제한합니다. 메모리와 재조회 비용의 균형을 정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"무한 행 모델에서 유지할 캐시 블록 수를 제한합니다. 메모리와 재조회 비용의 균형을 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxBlocksInCache: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","maxBlocksInCache"],["HTML 속성","max-blocks-in-cache"],["기본값","undefined"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 max-blocks-in-cache 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/infinite-row-model","title":"필요한 블록만 요청","description":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다."}]}]}]},{"path":"/ko/docs/options/serverSideDatasource","kind":"option","title":"serverSideDatasource","summary":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다.","member":{"name":"serverSideDatasource","attribute":"server-side-datasource","type":"ServerSideDatasource<GridRow>","kind":"property","values":[],"default":"undefined","description":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"serverSideDatasource: ServerSideDatasource<GridRow>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","serverSideDatasource"],["HTML 속성","server-side-datasource"],["기본값","undefined"],["입력 타입","ServerSideDatasource<GridRow>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/options/serverSideGroupCols","kind":"option","title":"serverSideGroupCols","summary":"서버에서 그룹화할 열을 바깥 그룹부터 순서대로 지정합니다. 빈 배열은 평면 데이터입니다.","member":{"name":"serverSideGroupCols","attribute":"server-side-group-cols","type":"string[]","kind":"property","values":[],"default":"undefined","description":"서버에서 그룹화할 열을 바깥 그룹부터 순서대로 지정합니다. 빈 배열은 평면 데이터입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버에서 그룹화할 열을 바깥 그룹부터 순서대로 지정합니다. 빈 배열은 평면 데이터입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"serverSideGroupCols: string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","serverSideGroupCols"],["HTML 속성","server-side-group-cols"],["기본값","undefined"],["입력 타입","string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/options/serverSideTransactionWaitMs","kind":"option","title":"serverSideTransactionWaitMs","summary":"비동기 서버 행 트랜잭션을 모아 처리하기까지 기다릴 시간입니다.","member":{"name":"serverSideTransactionWaitMs","attribute":"server-side-transaction-wait-ms","type":"number","kind":"number","values":[],"default":"undefined","description":"비동기 서버 행 트랜잭션을 모아 처리하기까지 기다릴 시간입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"비동기 서버 행 트랜잭션을 모아 처리하기까지 기다릴 시간입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"serverSideTransactionWaitMs: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","serverSideTransactionWaitMs"],["HTML 속성","server-side-transaction-wait-ms"],["기본값","undefined"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 server-side-transaction-wait-ms 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/options/viewportDatasource","kind":"option","title":"viewportDatasource","summary":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다.","member":{"name":"viewportDatasource","attribute":"viewport-datasource","type":"ViewportDatasource<GridRow>","kind":"property","values":[],"default":"undefined","description":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Viewport row model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"viewportDatasource: ViewportDatasource<GridRow>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","viewportDatasource"],["HTML 속성","viewport-datasource"],["기본값","undefined"],["입력 타입","ViewportDatasource<GridRow>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/viewport-row-model","title":"보이는 구간을 스트리밍","description":"전체 데이터 개수는 알지만 현재 보이는 행만 지속 갱신하려는 시세·모니터링 화면에 적합합니다. 스크롤 범위에 맞춰 구독 범위를 바꾸는 것이 핵심입니다."}]}]}]},{"path":"/ko/docs/options/rowDragManaged","kind":"option","title":"rowDragManaged","summary":"Grid가 행 드래그 결과의 순서 변경을 관리하게 합니다. 정렬·필터·다른 행 모델과의 조합 제한을 확인합니다.","member":{"name":"rowDragManaged","attribute":"row-drag-managed","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Grid가 행 드래그 결과의 순서 변경을 관리하게 합니다. 정렬·필터·다른 행 모델과의 조합 제한을 확인합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid가 행 드래그 결과의 순서 변경을 관리하게 합니다. 정렬·필터·다른 행 모델과의 조합 제한을 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragManaged: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowDragManaged"],["HTML 속성","row-drag-managed"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 row-drag-managed 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/spanExportMode","kind":"option","title":"spanExportMode","summary":"병합 셀을 복사·출력할 때 원점 값을 한 번만 쓸지 각 위치에 반복할지 선택합니다.","member":{"name":"spanExportMode","attribute":"span-export-mode","type":"'origin-once' | 'repeat'","kind":"string","values":["origin-once","repeat"],"default":"'origin-once'","description":"병합 셀을 복사·출력할 때 원점 값을 한 번만 쓸지 각 위치에 반복할지 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"병합 셀을 복사·출력할 때 원점 값을 한 번만 쓸지 각 위치에 반복할지 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"spanExportMode: 'origin-once' | 'repeat'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","spanExportMode"],["HTML 속성","span-export-mode"],["기본값","'origin-once'"],["입력 타입","'origin-once' | 'repeat'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 span-export-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/rowDragMultiRow","kind":"option","title":"rowDragMultiRow","summary":"여러 선택 행을 함께 드래그할 수 있게 합니다. 개별 열의 rowDrag와 행 선택 설정도 준비합니다.","member":{"name":"rowDragMultiRow","attribute":"row-drag-multi-row","type":"boolean","kind":"boolean","values":[],"default":"false","description":"여러 선택 행을 함께 드래그할 수 있게 합니다. 개별 열의 rowDrag와 행 선택 설정도 준비합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 선택 행을 함께 드래그할 수 있게 합니다. 개별 열의 rowDrag와 행 선택 설정도 준비합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragMultiRow: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowDragMultiRow"],["HTML 속성","row-drag-multi-row"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 row-drag-multi-row 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/rowDragText","kind":"option","title":"rowDragText","summary":"드래그 중 표시할 문구를 행 수와 기본 라벨로 구성합니다.","member":{"name":"rowDragText","attribute":"row-drag-text","type":"(params: { count: number; label: string }) => string","kind":"property","values":[],"default":"undefined","description":"드래그 중 표시할 문구를 행 수와 기본 라벨로 구성합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"드래그 중 표시할 문구를 행 수와 기본 라벨로 구성합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragText: (params: { count: number; label: string }) => string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowDragText"],["HTML 속성","row-drag-text"],["기본값","undefined"],["입력 타입","(params: { count: number; label: string }) => string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/cellChangeFlash","kind":"option","title":"cellChangeFlash","summary":"편집·붙여넣기·트랜잭션으로 값이 바뀐 셀을 잠시 강조합니다.","member":{"name":"cellChangeFlash","attribute":"cell-change-flash","type":"boolean","kind":"boolean","values":[],"default":"false","description":"편집·붙여넣기·트랜잭션으로 값이 바뀐 셀을 잠시 강조합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"편집·붙여넣기·트랜잭션으로 값이 바뀐 셀을 잠시 강조합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellChangeFlash: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","cellChangeFlash"],["HTML 속성","cell-change-flash"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 cell-change-flash 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-change-flash","title":"변경 강조","description":"값 변경 강조는 편집·붙여넣기·데이터 트랜잭션으로 바뀐 셀을 잠깐 표시합니다. 실시간 가격이나 수량이 많은 표에서 방금 달라진 위치를 찾는 데 유용합니다."}]}]}]},{"path":"/ko/docs/options/enableCellChangeFlash","kind":"option","title":"enableCellChangeFlash","summary":"셀 값 변경 강조를 설정하는 호환 이름입니다. cellChangeFlash와 모순된 값으로 중복 설정하지 마세요.","member":{"name":"enableCellChangeFlash","attribute":"enable-cell-change-flash","type":"boolean","kind":"boolean","values":[],"default":"false","description":"셀 값 변경 강조를 설정하는 호환 이름입니다. cellChangeFlash와 모순된 값으로 중복 설정하지 마세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 값 변경 강조를 설정하는 호환 이름입니다. cellChangeFlash와 모순된 값으로 중복 설정하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"enableCellChangeFlash: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","enableCellChangeFlash"],["HTML 속성","enable-cell-change-flash"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 enable-cell-change-flash 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-change-flash","title":"변경 강조","description":"값 변경 강조는 편집·붙여넣기·데이터 트랜잭션으로 바뀐 셀을 잠깐 표시합니다. 실시간 가격이나 수량이 많은 표에서 방금 달라진 위치를 찾는 데 유용합니다."}]}]}]},{"path":"/ko/docs/options/contextMenu","kind":"option","title":"contextMenu","summary":"셀 우클릭 메뉴를 표시합니다. 기본 복사·행 복사·CSV 작업을 사용하거나 콜백으로 목록을 대체할 수 있습니다.","member":{"name":"contextMenu","attribute":"context-menu","type":"boolean","kind":"boolean","values":[],"default":"false","description":"셀 우클릭 메뉴를 표시합니다. 기본 복사·행 복사·CSV 작업을 사용하거나 콜백으로 목록을 대체할 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 우클릭 메뉴를 표시합니다. 기본 복사·행 복사·CSV 작업을 사용하거나 콜백으로 목록을 대체할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in context menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"contextMenu: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","contextMenu"],["HTML 속성","context-menu"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 context-menu 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/context-menu","title":"셀 컨텍스트 메뉴","description":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다."}]}]}]},{"path":"/ko/docs/options/columnMenu","kind":"option","title":"columnMenu","summary":"열 머리글에서 열에 관한 작업 메뉴를 사용할 수 있게 합니다.","member":{"name":"columnMenu","attribute":"column-menu","type":"boolean","kind":"boolean","values":[],"default":"false","description":"열 머리글에서 열에 관한 작업 메뉴를 사용할 수 있게 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 머리글에서 열에 관한 작업 메뉴를 사용할 수 있게 합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in column menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnMenu: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","columnMenu"],["HTML 속성","column-menu"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 column-menu 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-menu","title":"열 메뉴","description":"열 메뉴는 현재 열에 대한 정렬·필터·표시 설정을 가까운 위치에서 제공합니다. 행의 업무 작업은 셀 컨텍스트 메뉴, 전체 열 목록 관리는 도구 패널과 구분합니다."}]}]}]},{"path":"/ko/docs/options/find","kind":"option","title":"find","summary":"로드된 읽기 가능한 셀에서 일치 위치를 찾고 이동하는 찾기 기능을 제공합니다. 서버 전체 검색과는 다릅니다.","member":{"name":"find","attribute":"find","type":"boolean","kind":"boolean","values":[],"default":"false","description":"로드된 읽기 가능한 셀에서 일치 위치를 찾고 이동하는 찾기 기능을 제공합니다. 서버 전체 검색과는 다릅니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"로드된 읽기 가능한 셀에서 일치 위치를 찾고 이동하는 찾기 기능을 제공합니다. 서버 전체 검색과는 다릅니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in find (highlight and result navigation)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"find: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","find"],["HTML 속성","find"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 find 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/find","title":"셀 내용 찾기","description":"Find는 목록을 줄이지 않고 일치하는 셀을 강조하며 다음·이전 결과로 이동합니다. 검색 결과 주변의 다른 행을 계속 읽어야 하는 업무에 적합합니다."}]}]}]},{"path":"/ko/docs/options/cellNotes","kind":"option","title":"cellNotes","summary":"안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다.","member":{"name":"cellNotes","attribute":"cell-notes","type":"boolean","kind":"boolean","values":[],"default":"false","description":"안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"안정적인 ID가 있고 읽을 수 있는 셀에 독립 메모를 제공합니다. 저장 어댑터와 Pro 권한이 필요합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellNotes: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","cellNotes"],["HTML 속성","cell-notes"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 cell-notes 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/options/cellNotesAdapter","kind":"option","title":"cellNotesAdapter","summary":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다.","member":{"name":"cellNotesAdapter","attribute":"cell-notes-adapter","type":"GridCellNotesAdapter","kind":"property","values":[],"default":"undefined","description":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellNotesAdapter: GridCellNotesAdapter","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","cellNotesAdapter"],["HTML 속성","cell-notes-adapter"],["기본값","undefined"],["입력 타입","GridCellNotesAdapter"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/options/batchEditToolbar","kind":"option","title":"batchEditToolbar","summary":"일괄 편집의 시작·확정·취소를 위한 도구를 표시합니다.","member":{"name":"batchEditToolbar","attribute":"batch-edit-toolbar","type":"boolean","kind":"boolean","values":[],"default":"false","description":"일괄 편집의 시작·확정·취소를 위한 도구를 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"일괄 편집의 시작·확정·취소를 위한 도구를 표시합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"batchEditToolbar: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","batchEditToolbar"],["HTML 속성","batch-edit-toolbar"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 batch-edit-toolbar 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/options/columnMenuItems","kind":"option","title":"columnMenuItems","summary":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다.","member":{"name":"columnMenuItems","attribute":"column-menu-items","type":"(context: GridColumnMenuContext) => readonly GridColumnMenuItem[]","kind":"property","values":[],"default":"undefined","description":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in column menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnMenuItems: (context: GridColumnMenuContext) => readonly GridColumnMenuItem[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","columnMenuItems"],["HTML 속성","column-menu-items"],["기본값","undefined"],["입력 타입","(context: GridColumnMenuContext) => readonly GridColumnMenuItem[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/ko/docs/types/GridColumnMenuItem","title":"GridColumnMenuItem","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-menu","title":"열 메뉴","description":"열 메뉴는 현재 열에 대한 정렬·필터·표시 설정을 가까운 위치에서 제공합니다. 행의 업무 작업은 셀 컨텍스트 메뉴, 전체 열 목록 관리는 도구 패널과 구분합니다."}]}]}]},{"path":"/ko/docs/options/contextMenuItemsCallback","kind":"option","title":"contextMenuItemsCallback","summary":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다.","member":{"name":"contextMenuItemsCallback","attribute":"context-menu-items-callback","type":"(\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]","kind":"property","values":[],"default":"undefined","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in context menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"contextMenuItemsCallback: (\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","contextMenuItemsCallback"],["HTML 속성","context-menu-items-callback"],["기본값","undefined"],["입력 타입","(\n    ctx: ContextMenuContext<GridRow>,\n  ) => ContextMenuItem<GridRow>[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/context-menu","title":"셀 컨텍스트 메뉴","description":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다."}]}]}]},{"path":"/ko/docs/options/keyboardNavigation","kind":"option","title":"keyboardNavigation","summary":"셀과 Grid 내부 기능을 키보드로 탐색하는 동작을 설정합니다.","member":{"name":"keyboardNavigation","attribute":"keyboard-navigation","type":"boolean","kind":"boolean","values":[],"default":"true","description":"셀과 Grid 내부 기능을 키보드로 탐색하는 동작을 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀과 Grid 내부 기능을 키보드로 탐색하는 동작을 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"keyboardNavigation: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","keyboardNavigation"],["HTML 속성","keyboard-navigation"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 keyboard-navigation 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/keyboard-a11y-i18n","title":"키보드와 다국어","description":"Grid는 많은 행과 열을 키보드로 탐색하는 작업 공간입니다. 셀 이동·편집·메뉴 진입과 화면 밖 앱 버튼으로 나가는 경로가 모두 이해 가능해야 합니다."}]}]}]},{"path":"/ko/docs/options/rowSelection","kind":"option","title":"rowSelection","summary":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다.","member":{"name":"rowSelection","attribute":"row-selection","type":"RowSelectionMode","kind":"string","values":["single","multi","none"],"default":"'none'","description":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowSelection: RowSelectionMode","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowSelection"],["HTML 속성","row-selection"],["기본값","'none'"],["입력 타입","RowSelectionMode"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 row-selection 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/options/getRowId","kind":"option","title":"getRowId","summary":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다.","member":{"name":"getRowId","attribute":"get-row-id","type":"(row: Readonly<GridData>) => GridRowId","kind":"property","values":[],"default":"undefined","description":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRowId: (row: Readonly<GridData>) => GridRowId","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","getRowId"],["HTML 속성","get-row-id"],["기본값","undefined"],["입력 타입","(row: Readonly<GridData>) => GridRowId"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/options/selectionCheckbox","kind":"option","title":"selectionCheckbox","summary":"행 선택을 위한 체크박스를 표시합니다.","member":{"name":"selectionCheckbox","attribute":"selection-checkbox","type":"boolean","kind":"boolean","values":[],"default":"false","description":"행 선택을 위한 체크박스를 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 선택을 위한 체크박스를 표시합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"selectionCheckbox: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","selectionCheckbox"],["HTML 속성","selection-checkbox"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 selection-checkbox 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/options/showSelectionCheckbox","kind":"option","title":"showSelectionCheckbox","summary":"행 선택 체크박스를 설정하는 호환 이름입니다. selectionCheckbox와 함께 사용할 때 충돌을 피하세요.","member":{"name":"showSelectionCheckbox","attribute":"show-selection-checkbox","type":"boolean","kind":"boolean","values":[],"default":"false","description":"행 선택 체크박스를 설정하는 호환 이름입니다. selectionCheckbox와 함께 사용할 때 충돌을 피하세요."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 선택 체크박스를 설정하는 호환 이름입니다. selectionCheckbox와 함께 사용할 때 충돌을 피하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"showSelectionCheckbox: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","showSelectionCheckbox"],["HTML 속성","show-selection-checkbox"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 show-selection-checkbox 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/options/shiftClickAdditive","kind":"option","title":"shiftClickAdditive","summary":"Shift 클릭으로 범위를 선택할 때 기존 선택을 유지해 추가할지 정합니다.","member":{"name":"shiftClickAdditive","attribute":"shift-click-additive","type":"boolean","kind":"boolean","values":[],"default":"false","description":"Shift 클릭으로 범위를 선택할 때 기존 선택을 유지해 추가할지 정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Shift 클릭으로 범위를 선택할 때 기존 선택을 유지해 추가할지 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"shiftClickAdditive: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","shiftClickAdditive"],["HTML 속성","shift-click-additive"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 shift-click-additive 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/options/rowHover","kind":"option","title":"rowHover","summary":"CSS 강조만 사용하거나, 이벤트와 상태가 있는 hover를 사용하거나, hover를 끕니다.","member":{"name":"rowHover","attribute":"row-hover","type":"'css-only' | 'stateful' | 'off'","kind":"string","values":["off","css-only","stateful"],"default":"'css-only'","description":"CSS 강조만 사용하거나, 이벤트와 상태가 있는 hover를 사용하거나, hover를 끕니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"CSS 강조만 사용하거나, 이벤트와 상태가 있는 hover를 사용하거나, hover를 끕니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowHover: 'css-only' | 'stateful' | 'off'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rowHover"],["HTML 속성","row-hover"],["기본값","'css-only'"],["입력 타입","'css-only' | 'stateful' | 'off'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 row-hover 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-hover","title":"행 따라가기","description":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/resizableColumns","kind":"option","title":"resizableColumns","summary":"사용자가 열 경계를 드래그해 너비를 바꿀 수 있게 합니다.","member":{"name":"resizableColumns","attribute":"resizable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"사용자가 열 경계를 드래그해 너비를 바꿀 수 있게 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자가 열 경계를 드래그해 너비를 바꿀 수 있게 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"resizableColumns: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","resizableColumns"],["HTML 속성","resizable-columns"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 resizable-columns 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/reorderableColumns","kind":"option","title":"reorderableColumns","summary":"사용자가 머리글을 드래그해 열 순서를 바꿀 수 있게 합니다.","member":{"name":"reorderableColumns","attribute":"reorderable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"사용자가 머리글을 드래그해 열 순서를 바꿀 수 있게 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자가 머리글을 드래그해 열 순서를 바꿀 수 있게 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"reorderableColumns: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","reorderableColumns"],["HTML 속성","reorderable-columns"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 reorderable-columns 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/columnHiding","kind":"option","title":"columnHiding","summary":"열 숨김 기능을 활성화합니다. 숨긴 열을 복원할 메뉴나 패널도 함께 제공합니다.","member":{"name":"columnHiding","attribute":"column-hiding","type":"boolean","kind":"boolean","values":[],"default":"false","description":"열 숨김 기능을 활성화합니다. 숨긴 열을 복원할 메뉴나 패널도 함께 제공합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 숨김 기능을 활성화합니다. 숨긴 열을 복원할 메뉴나 패널도 함께 제공합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnHiding: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","columnHiding"],["HTML 속성","column-hiding"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 column-hiding 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/hideableColumns","kind":"option","title":"hideableColumns","summary":"열 숨김 기능의 호환 설정입니다. columnHiding과 일관된 값으로 사용합니다.","member":{"name":"hideableColumns","attribute":"hideable-columns","type":"boolean","kind":"boolean","values":[],"default":"false","description":"열 숨김 기능의 호환 설정입니다. columnHiding과 일관된 값으로 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 숨김 기능의 호환 설정입니다. columnHiding과 일관된 값으로 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"hideableColumns: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","hideableColumns"],["HTML 속성","hideable-columns"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 hideable-columns 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/autoSizeOnDoubleClick","kind":"option","title":"autoSizeOnDoubleClick","summary":"열 경계 두 번 클릭으로 내용에 맞는 자동 너비를 적용합니다.","member":{"name":"autoSizeOnDoubleClick","attribute":"auto-size-on-double-click","type":"boolean","kind":"boolean","values":[],"default":"true","description":"열 경계 두 번 클릭으로 내용에 맞는 자동 너비를 적용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 경계 두 번 클릭으로 내용에 맞는 자동 너비를 적용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"autoSizeOnDoubleClick: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","autoSizeOnDoubleClick"],["HTML 속성","auto-size-on-double-click"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 auto-size-on-double-click 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/multiSort","kind":"option","title":"multiSort","summary":"여러 열의 정렬 기준을 함께 사용합니다. 우선순위는 정렬 모델의 순서로 확인합니다.","member":{"name":"multiSort","attribute":"multi-sort","type":"boolean","kind":"boolean","values":[],"default":"false","description":"여러 열의 정렬 기준을 함께 사용합니다. 우선순위는 정렬 모델의 순서로 확인합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 열의 정렬 기준을 함께 사용합니다. 우선순위는 정렬 모델의 순서로 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"multiSort: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","multiSort"],["HTML 속성","multi-sort"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 multi-sort 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/options/enableMultiSort","kind":"option","title":"enableMultiSort","summary":"다중 정렬의 호환 이름입니다. multiSort와 모순되지 않게 설정합니다.","member":{"name":"enableMultiSort","attribute":"enable-multi-sort","type":"boolean","kind":"boolean","values":[],"default":"false","description":"다중 정렬의 호환 이름입니다. multiSort와 모순되지 않게 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"다중 정렬의 호환 이름입니다. multiSort와 모순되지 않게 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"enableMultiSort: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","enableMultiSort"],["HTML 속성","enable-multi-sort"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 enable-multi-sort 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/options/headerFilterRow","kind":"option","title":"headerFilterRow","summary":"머리글 아래에서 열별 필터를 조작하는 행을 표시합니다.","member":{"name":"headerFilterRow","attribute":"header-filter-row","type":"boolean","kind":"boolean","values":[],"default":"false","description":"머리글 아래에서 열별 필터를 조작하는 행을 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"머리글 아래에서 열별 필터를 조작하는 행을 표시합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"headerFilterRow: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","headerFilterRow"],["HTML 속성","header-filter-row"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 header-filter-row 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/options/conditionBuilder","kind":"option","title":"conditionBuilder","summary":"여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다.","member":{"name":"conditionBuilder","attribute":"condition-builder","type":"boolean","kind":"boolean","values":[],"default":"false","description":"여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 조건을 AND·OR로 묶는 조건 구성 UI를 표시합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionBuilder: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","conditionBuilder"],["HTML 속성","condition-builder"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 condition-builder 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/virtualizeColumns","kind":"option","title":"virtualizeColumns","summary":"화면 주변의 열만 렌더링하는 가로 가상화를 설정합니다.","member":{"name":"virtualizeColumns","attribute":"virtualize-columns","type":"boolean","kind":"boolean","values":[],"default":"undefined","description":"화면 주변의 열만 렌더링하는 가로 가상화를 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"화면 주변의 열만 렌더링하는 가로 가상화를 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"virtualizeColumns: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","virtualizeColumns"],["HTML 속성","virtualize-columns"],["기본값","undefined"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 virtualize-columns 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/options/groupBy","kind":"option","title":"groupBy","summary":"같은 값의 행을 그룹으로 묶습니다. 문자열 배열은 앞 항목부터 다단계 그룹을 만듭니다.","member":{"name":"groupBy","attribute":"group-by","type":"string | string[]","kind":"property","values":[],"default":"undefined","description":"같은 값의 행을 그룹으로 묶습니다. 문자열 배열은 앞 항목부터 다단계 그룹을 만듭니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"같은 값의 행을 그룹으로 묶습니다. 문자열 배열은 앞 항목부터 다단계 그룹을 만듭니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"groupBy: string | string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","groupBy"],["HTML 속성","group-by"],["기본값","undefined"],["입력 타입","string | string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/options/pivotMode","kind":"option","title":"pivotMode","summary":"행 축·열 축·값 축으로 데이터를 교차 집계하는 피벗 표시를 켭니다. 세 축 설정을 함께 준비합니다.","member":{"name":"pivotMode","attribute":"pivot-mode","type":"boolean","kind":"boolean","values":[],"default":"false","description":"행 축·열 축·값 축으로 데이터를 교차 집계하는 피벗 표시를 켭니다. 세 축 설정을 함께 준비합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 축·열 축·값 축으로 데이터를 교차 집계하는 피벗 표시를 켭니다. 세 축 설정을 함께 준비합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotMode: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotMode"],["HTML 속성","pivot-mode"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pivot-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotRowGroupColumns","kind":"option","title":"pivotRowGroupColumns","summary":"피벗 결과의 왼쪽 행 축을 구성하는 필드 목록입니다.","member":{"name":"pivotRowGroupColumns","attribute":"pivot-row-group-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"피벗 결과의 왼쪽 행 축을 구성하는 필드 목록입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 결과의 왼쪽 행 축을 구성하는 필드 목록입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotRowGroupColumns: string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotRowGroupColumns"],["HTML 속성","pivot-row-group-columns"],["기본값","undefined"],["입력 타입","string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotColumns","kind":"option","title":"pivotColumns","summary":"고유 값이 피벗의 상단 결과 열로 펼쳐질 필드 목록입니다.","member":{"name":"pivotColumns","attribute":"pivot-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"고유 값이 피벗의 상단 결과 열로 펼쳐질 필드 목록입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"고유 값이 피벗의 상단 결과 열로 펼쳐질 필드 목록입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotColumns: string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotColumns"],["HTML 속성","pivot-columns"],["기본값","undefined"],["입력 타입","string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotValueColumns","kind":"option","title":"pivotValueColumns","summary":"피벗 각 교차 셀에서 집계할 값 필드 목록입니다.","member":{"name":"pivotValueColumns","attribute":"pivot-value-columns","type":"string[]","kind":"property","values":[],"default":"undefined","description":"피벗 각 교차 셀에서 집계할 값 필드 목록입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 각 교차 셀에서 집계할 값 필드 목록입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotValueColumns: string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotValueColumns"],["HTML 속성","pivot-value-columns"],["기본값","undefined"],["입력 타입","string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotAggFuncs","kind":"option","title":"pivotAggFuncs","summary":"값 필드마다 사용할 집계 함수 이름을 지정합니다. 기본 집계와 등록한 사용자 함수를 사용할 수 있습니다.","member":{"name":"pivotAggFuncs","attribute":"pivot-agg-funcs","type":"Record<string, string>","kind":"property","values":[],"default":"undefined","description":"값 필드마다 사용할 집계 함수 이름을 지정합니다. 기본 집계와 등록한 사용자 함수를 사용할 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"값 필드마다 사용할 집계 함수 이름을 지정합니다. 기본 집계와 등록한 사용자 함수를 사용할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotAggFuncs: Record<string, string>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotAggFuncs"],["HTML 속성","pivot-agg-funcs"],["기본값","undefined"],["입력 타입","Record<string, string>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotSubtotals","kind":"option","title":"pivotSubtotals","summary":"다단계 피벗 소계를 숨기거나 펼친 그룹의 위·아래에 배치합니다.","member":{"name":"pivotSubtotals","attribute":"pivot-subtotals","type":"'off' | 'top' | 'bottom'","kind":"string","values":["off","top","bottom"],"default":"'off'","description":"다단계 피벗 소계를 숨기거나 펼친 그룹의 위·아래에 배치합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"다단계 피벗 소계를 숨기거나 펼친 그룹의 위·아래에 배치합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotSubtotals: 'off' | 'top' | 'bottom'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotSubtotals"],["HTML 속성","pivot-subtotals"],["기본값","'off'"],["입력 타입","'off' | 'top' | 'bottom'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pivot-subtotals 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotGrandTotal","kind":"option","title":"pivotGrandTotal","summary":"피벗 전체 합계를 숨기거나 결과의 맨 위·아래에 배치합니다.","member":{"name":"pivotGrandTotal","attribute":"pivot-grand-total","type":"'off' | 'top' | 'bottom'","kind":"string","values":["off","top","bottom"],"default":"'bottom'","description":"피벗 전체 합계를 숨기거나 결과의 맨 위·아래에 배치합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 전체 합계를 숨기거나 결과의 맨 위·아래에 배치합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotGrandTotal: 'off' | 'top' | 'bottom'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotGrandTotal"],["HTML 속성","pivot-grand-total"],["기본값","'bottom'"],["입력 타입","'off' | 'top' | 'bottom'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pivot-grand-total 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotPanelShow","kind":"option","title":"pivotPanelShow","summary":"피벗 패널을 항상 표시할지, 피벗 모드일 때만 표시할지, 숨길지 선택합니다.","member":{"name":"pivotPanelShow","attribute":"pivot-panel-show","type":"'always' | 'onlyWhenPivoting' | 'never'","kind":"string","values":["always","onlyWhenPivoting","never"],"default":"'never'","description":"피벗 패널을 항상 표시할지, 피벗 모드일 때만 표시할지, 숨길지 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 패널을 항상 표시할지, 피벗 모드일 때만 표시할지, 숨길지 선택합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotPanelShow: 'always' | 'onlyWhenPivoting' | 'never'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotPanelShow"],["HTML 속성","pivot-panel-show"],["기본값","'never'"],["입력 타입","'always' | 'onlyWhenPivoting' | 'never'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pivot-panel-show 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/pivotPanel","kind":"option","title":"pivotPanel","summary":"피벗 패널의 호환 boolean 설정입니다. true는 pivotPanelShow의 always에 해당합니다.","member":{"name":"pivotPanel","attribute":"pivot-panel","type":"boolean","kind":"boolean","values":[],"default":"false","description":"피벗 패널의 호환 boolean 설정입니다. true는 pivotPanelShow의 always에 해당합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 패널의 호환 boolean 설정입니다. true는 pivotPanelShow의 always에 해당합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotPanel: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pivotPanel"],["HTML 속성","pivot-panel"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pivot-panel 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/options/groupPanel","kind":"option","title":"groupPanel","summary":"열을 끌어 넣어 행 그룹 기준을 구성하는 패널을 표시합니다.","member":{"name":"groupPanel","attribute":"group-panel","type":"boolean","kind":"boolean","values":[],"default":"false","description":"열을 끌어 넣어 행 그룹 기준을 구성하는 패널을 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열을 끌어 넣어 행 그룹 기준을 구성하는 패널을 표시합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"groupPanel: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","groupPanel"],["HTML 속성","group-panel"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 group-panel 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/options/getDataPath","kind":"option","title":"getDataPath","summary":"행의 루트부터 현재 노드까지 경로 배열을 반환해 트리를 만듭니다. ID 기반 트리 설정보다 우선합니다.","member":{"name":"getDataPath","attribute":"get-data-path","type":"(row: Record<string, unknown>) => readonly string[]","kind":"property","values":[],"default":"undefined","description":"행의 루트부터 현재 노드까지 경로 배열을 반환해 트리를 만듭니다. ID 기반 트리 설정보다 우선합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행의 루트부터 현재 노드까지 경로 배열을 반환해 트리를 만듭니다. ID 기반 트리 설정보다 우선합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDataPath: (row: Record<string, unknown>) => readonly string[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","getDataPath"],["HTML 속성","get-data-path"],["기본값","undefined"],["입력 타입","(row: Record<string, unknown>) => readonly string[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/options/treeIdField","kind":"option","title":"treeIdField","summary":"부모 ID 방식 트리에서 각 노드의 ID를 담은 필드입니다. treeParentField와 함께 지정합니다.","member":{"name":"treeIdField","attribute":"tree-id-field","type":"string","kind":"string","values":[],"default":"undefined","description":"부모 ID 방식 트리에서 각 노드의 ID를 담은 필드입니다. treeParentField와 함께 지정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 ID 방식 트리에서 각 노드의 ID를 담은 필드입니다. treeParentField와 함께 지정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"treeIdField: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","treeIdField"],["HTML 속성","tree-id-field"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 tree-id-field 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/options/treeParentField","kind":"option","title":"treeParentField","summary":"부모 ID 방식 트리에서 부모 노드의 ID를 담은 필드입니다.","member":{"name":"treeParentField","attribute":"tree-parent-field","type":"string","kind":"string","values":[],"default":"undefined","description":"부모 ID 방식 트리에서 부모 노드의 ID를 담은 필드입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 ID 방식 트리에서 부모 노드의 ID를 담은 필드입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"treeParentField: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","treeParentField"],["HTML 속성","tree-parent-field"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 tree-parent-field 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/options/treeLabelField","kind":"option","title":"treeLabelField","summary":"부모 ID 방식 트리에서 표시할 라벨 필드입니다. 지정하지 않으면 ID를 사용합니다.","member":{"name":"treeLabelField","attribute":"tree-label-field","type":"string","kind":"string","values":[],"default":"undefined","description":"부모 ID 방식 트리에서 표시할 라벨 필드입니다. 지정하지 않으면 ID를 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 ID 방식 트리에서 표시할 라벨 필드입니다. 지정하지 않으면 ID를 사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"treeLabelField: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","treeLabelField"],["HTML 속성","tree-label-field"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 tree-label-field 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/options/masterDetail","kind":"option","title":"masterDetail","summary":"주문 아래 품목처럼 원본 행을 펼쳐 전체 폭의 상세 패널을 표시합니다.","member":{"name":"masterDetail","attribute":"master-detail","type":"boolean","kind":"boolean","values":[],"default":"false","description":"주문 아래 품목처럼 원본 행을 펼쳐 전체 폭의 상세 패널을 표시합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"주문 아래 품목처럼 원본 행을 펼쳐 전체 폭의 상세 패널을 표시합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"masterDetail: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","masterDetail"],["HTML 속성","master-detail"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 master-detail 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/detailRowHeight","kind":"option","title":"detailRowHeight","summary":"펼친 상세 패널의 높이를 픽셀로 정합니다.","member":{"name":"detailRowHeight","attribute":"detail-row-height","type":"number","kind":"number","values":[],"default":"160","description":"펼친 상세 패널의 높이를 픽셀로 정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"펼친 상세 패널의 높이를 픽셀로 정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailRowHeight: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","detailRowHeight"],["HTML 속성","detail-row-height"],["기본값","160"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 detail-row-height 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/detailCellRenderer","kind":"option","title":"detailCellRenderer","summary":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다.","member":{"name":"detailCellRenderer","attribute":"detail-cell-renderer","type":"(params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput","kind":"property","values":[],"default":"undefined","description":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailCellRenderer: (params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","detailCellRenderer"],["HTML 속성","detail-cell-renderer"],["기본값","undefined"],["입력 타입","(params: { row: Record<string, unknown>; rowId: string | number }) => CellRenderOutput"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/detailGridOptions","kind":"option","title":"detailGridOptions","summary":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다.","member":{"name":"detailGridOptions","attribute":"detail-grid-options","type":"DetailGridOptions","kind":"property","values":[],"default":"undefined","description":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailGridOptions: DetailGridOptions","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","detailGridOptions"],["HTML 속성","detail-grid-options"],["기본값","undefined"],["입력 타입","DetailGridOptions"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/getDetailRowData","kind":"option","title":"getDetailRowData","summary":"펼친 부모 행에 해당하는 상세 행을 배열 또는 Promise로 반환합니다. 한 번 펼치는 동안 결과를 재사용합니다.","member":{"name":"getDetailRowData","attribute":"get-detail-row-data","type":"(params: { row: Record<string, unknown>; rowId: string | number }) => unknown[] | Promise<unknown[]>","kind":"property","values":[],"default":"undefined","description":"펼친 부모 행에 해당하는 상세 행을 배열 또는 Promise로 반환합니다. 한 번 펼치는 동안 결과를 재사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"펼친 부모 행에 해당하는 상세 행을 배열 또는 Promise로 반환합니다. 한 번 펼치는 동안 결과를 재사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDetailRowData: (params: { row: Record<string, unknown>; rowId: string | number }) => unknown[] | Promise<unknown[]>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","getDetailRowData"],["HTML 속성","get-detail-row-data"],["기본값","undefined"],["입력 타입","(params: { row: Record<string, unknown>; rowId: string | number }) => unknown[] | Promise<unknown[]>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/detailNestingLevel","kind":"option","title":"detailNestingLevel","summary":"중첩 상세 Grid의 깊이입니다. 자동 생성된 하위 Grid는 부모가 설정하며 재귀 깊이 제한에 사용됩니다.","member":{"name":"detailNestingLevel","attribute":"detail-nesting-level","type":"number","kind":"number","values":[],"default":"0","description":"중첩 상세 Grid의 깊이입니다. 자동 생성된 하위 Grid는 부모가 설정하며 재귀 깊이 제한에 사용됩니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"중첩 상세 Grid의 깊이입니다. 자동 생성된 하위 Grid는 부모가 설정하며 재귀 깊이 제한에 사용됩니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailNestingLevel: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","detailNestingLevel"],["HTML 속성","detail-nesting-level"],["기본값","0"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 detail-nesting-level 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/options/rangeSelection","kind":"option","title":"rangeSelection","summary":"셀 사각 범위를 선택할 수 있게 합니다. 행 선택과 독립적이며 복사·채우기·차트 연동의 입력이 됩니다.","member":{"name":"rangeSelection","attribute":"range-selection","type":"boolean","kind":"boolean","values":[],"default":"false","description":"셀 사각 범위를 선택할 수 있게 합니다. 행 선택과 독립적이며 복사·채우기·차트 연동의 입력이 됩니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 사각 범위를 선택할 수 있게 합니다. 행 선택과 독립적이며 복사·채우기·차트 연동의 입력이 됩니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rangeSelection: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rangeSelection"],["HTML 속성","range-selection"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 range-selection 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/options/clipboardEscapeFormulae","kind":"option","title":"clipboardEscapeFormulae","summary":"클립보드로 나가는 텍스트의 스프레드시트 수식 접두사를 이스케이프합니다.","member":{"name":"clipboardEscapeFormulae","attribute":"clipboard-escape-formulae","type":"boolean","kind":"boolean","values":[],"default":"true","description":"클립보드로 나가는 텍스트의 스프레드시트 수식 접두사를 이스케이프합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"클립보드로 나가는 텍스트의 스프레드시트 수식 접두사를 이스케이프합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clipboardEscapeFormulae: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","clipboardEscapeFormulae"],["HTML 속성","clipboard-escape-formulae"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 clipboard-escape-formulae 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/single-cell-copy","title":"셀 복사","description":"셀 하나의 표시 텍스트를 시스템 클립보드로 복사합니다. 셀 안 편집기의 텍스트를 선택한 상태와 Grid 셀에 포커스가 있는 상태는 서로 다른 복사 대상입니다."}]}]}]},{"path":"/ko/docs/options/statusBar","kind":"option","title":"statusBar","summary":"기본 행 수 안내 또는 지정한 상태 패널을 표 아래에 표시합니다. true가 모든 집계 패널을 켜는 것은 아닙니다.","member":{"name":"statusBar","attribute":"status-bar","type":"boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }","kind":"property","values":[],"default":"undefined","description":"기본 행 수 안내 또는 지정한 상태 패널을 표 아래에 표시합니다. true가 모든 집계 패널을 켜는 것은 아닙니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기본 행 수 안내 또는 지정한 상태 패널을 표 아래에 표시합니다. true가 모든 집계 패널을 켜는 것은 아닙니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Status bar"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"statusBar: boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","statusBar"],["HTML 속성","status-bar"],["기본값","undefined"],["입력 타입","boolean | { panels?: ReadonlyArray<{ panel: string; align?: string }> }"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/status-bar","title":"상태와 집계","description":"상태 바는 현재 표의 행 수나 범위 계산 결과처럼 작업 결과를 짧게 보여 주는 영역입니다. 데이터를 편집하는 도구가 아니라 사용자가 보고 있는 범위를 이해하도록 돕습니다."}]}]}]},{"path":"/ko/docs/options/sideBar","kind":"option","title":"sideBar","summary":"열·필터 도구 패널과 기본 열림 패널을 구성합니다. true는 탭을 제공하고 문자열은 지정 패널을 엽니다.","member":{"name":"sideBar","attribute":"side-bar","type":"boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }","kind":"property","values":[],"default":"undefined","description":"열·필터 도구 패널과 기본 열림 패널을 구성합니다. true는 탭을 제공하고 문자열은 지정 패널을 엽니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열·필터 도구 패널과 기본 열림 패널을 구성합니다. true는 탭을 제공하고 문자열은 지정 패널을 엽니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Columns / Filters tool panels"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sideBar: boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","sideBar"],["HTML 속성","side-bar"],["기본값","undefined"],["입력 타입","boolean | string | { panels?: ReadonlyArray<{ id: string } | string>; defaultOpen?: string }"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."}]}]}]},{"path":"/ko/docs/options/rows","kind":"option","title":"rows","summary":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다.","member":{"name":"rows","attribute":"rows","type":"GridRow[]","kind":"property","values":[],"default":"[]","description":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rows: GridRow[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","rows"],["HTML 속성","rows"],["기본값","[]"],["입력 타입","GridRow[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/columns","kind":"option","title":"columns","summary":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다.","member":{"name":"columns","attribute":"columns","type":"GridColumnDef[]","kind":"property","values":[],"default":"[]","description":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columns: GridColumnDef[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","columns"],["HTML 속성","columns"],["기본값","[]"],["입력 타입","GridColumnDef[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnDef","title":"GridColumnDef","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/maxRendered","kind":"option","title":"maxRendered","summary":"한 번에 렌더링할 행 수의 상한을 설정합니다. 데이터 전체 개수와는 별개의 렌더링 제약입니다.","member":{"name":"maxRendered","attribute":"max-rendered","type":"number","kind":"number","values":[],"default":"200","description":"한 번에 렌더링할 행 수의 상한을 설정합니다. 데이터 전체 개수와는 별개의 렌더링 제약입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 번에 렌더링할 행 수의 상한을 설정합니다. 데이터 전체 개수와는 별개의 렌더링 제약입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxRendered: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","maxRendered"],["HTML 속성","max-rendered"],["기본값","200"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 max-rendered 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."}]}]}]},{"path":"/ko/docs/options/engine","kind":"option","title":"engine","summary":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다.","member":{"name":"engine","attribute":"engine","type":"GridEngineMode","kind":"string","values":["auto","standard","pro"],"default":"'auto'","description":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다."},{"kind":"paragraph","text":"WASM 가속은 Pro입니다. Standard JS 엔진은 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"engine: GridEngineMode","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","engine"],["HTML 속성","engine"],["기본값","'auto'"],["입력 타입","GridEngineMode"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 engine 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEngineMode","title":"GridEngineMode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/wasm-acceleration","title":"처리 엔진 선택","description":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다."}]}]}]},{"path":"/ko/docs/options/proThreshold","kind":"option","title":"proThreshold","summary":"자동 엔진 선택에서 Pro 경로를 고려할 데이터 규모 기준입니다.","member":{"name":"proThreshold","attribute":"pro-threshold","type":"number","kind":"number","values":[],"default":"100_000","description":"자동 엔진 선택에서 Pro 경로를 고려할 데이터 규모 기준입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"자동 엔진 선택에서 Pro 경로를 고려할 데이터 규모 기준입니다."},{"kind":"paragraph","text":"Pro 처리 엔진의 전환 기준입니다. Standard JS 엔진은 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"proThreshold: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","proThreshold"],["HTML 속성","pro-threshold"],["기본값","100_000"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 pro-threshold 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/wasm-acceleration","title":"처리 엔진 선택","description":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다."}]}]}]},{"path":"/ko/docs/options/unavailable","kind":"option","title":"unavailable","summary":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다.","member":{"name":"unavailable","attribute":"unavailable","type":"GridUnavailableBehaviour","kind":"string","values":["fallback","error"],"default":"'fallback'","description":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다."},{"kind":"paragraph","text":"Pro 엔진을 사용할 수 없을 때의 동작 설정입니다. Standard JS 엔진은 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"unavailable: GridUnavailableBehaviour","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","unavailable"],["HTML 속성","unavailable"],["기본값","'fallback'"],["입력 타입","GridUnavailableBehaviour"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 unavailable 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridUnavailableBehaviour","title":"GridUnavailableBehaviour","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/wasm-acceleration","title":"처리 엔진 선택","description":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다."}]}]}]},{"path":"/ko/docs/options/brandLogo","kind":"option","title":"brandLogo","summary":"기본 로고·none·지원하는 이미지 data URL 중 하나를 지정합니다. 제거와 변경에는 grid.branding 권한이 필요하며 위치는 표 하단 오른쪽입니다.","member":{"name":"brandLogo","attribute":"brand-logo","type":"string","kind":"string","values":[],"default":"undefined","description":"기본 로고·none·지원하는 이미지 data URL 중 하나를 지정합니다. 제거와 변경에는 grid.branding 권한이 필요하며 위치는 표 하단 오른쪽입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기본 로고·none·지원하는 이미지 data URL 중 하나를 지정합니다. 제거와 변경에는 grid.branding 권한이 필요하며 위치는 표 하단 오른쪽입니다."},{"kind":"paragraph","text":"로고 제거·사용자 정의 로고는 Pro입니다. 기본 로고 표시는 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"brandLogo: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","brandLogo"],["HTML 속성","brand-logo"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 brand-logo 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/branding","title":"로고와 위치","description":"Grid 기본 로고는 표 하단의 전용 영역에서 오른쪽에 정렬됩니다. 셀·페이지 이동·스크롤 컨트롤을 덮지 않도록 데이터 영역과 분리되어 있습니다."}]}]}]},{"path":"/ko/docs/options/collaborationRoom","kind":"option","title":"collaborationRoom","summary":"편집과 참여 상태를 공유할 협업 방 식별자입니다. 여러 기기 연결에는 원격 서비스 설정이 필요합니다.","member":{"name":"collaborationRoom","attribute":"collaboration-room","type":"string","kind":"string","values":[],"default":"undefined","description":"편집과 참여 상태를 공유할 협업 방 식별자입니다. 여러 기기 연결에는 원격 서비스 설정이 필요합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"편집과 참여 상태를 공유할 협업 방 식별자입니다. 여러 기기 연결에는 원격 서비스 설정이 필요합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collaborationRoom: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collaborationRoom"],["HTML 속성","collaboration-room"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collaboration-room 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/realtimeUrl","kind":"option","title":"realtimeUrl","summary":"원격 협업을 연결할 WebSocket 주소입니다. 생략하면 같은 페이지·프로세스의 데모 범위로 사용합니다.","member":{"name":"realtimeUrl","attribute":"realtime-url","type":"string","kind":"string","values":[],"default":"undefined","description":"원격 협업을 연결할 WebSocket 주소입니다. 생략하면 같은 페이지·프로세스의 데모 범위로 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원격 협업을 연결할 WebSocket 주소입니다. 생략하면 같은 페이지·프로세스의 데모 범위로 사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"realtimeUrl: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","realtimeUrl"],["HTML 속성","realtime-url"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 realtime-url 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/collabUserName","kind":"option","title":"collabUserName","summary":"다른 협업 참가자에게 표시할 사용자 이름입니다.","member":{"name":"collabUserName","attribute":"collab-user-name","type":"string","kind":"string","values":[],"default":"undefined","description":"다른 협업 참가자에게 표시할 사용자 이름입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"다른 협업 참가자에게 표시할 사용자 이름입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabUserName: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collabUserName"],["HTML 속성","collab-user-name"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collab-user-name 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/collabUserColor","kind":"option","title":"collabUserColor","summary":"협업 참가자의 커서·표시에 사용할 구분 색상입니다.","member":{"name":"collabUserColor","attribute":"collab-user-color","type":"string","kind":"string","values":[],"default":"undefined","description":"협업 참가자의 커서·표시에 사용할 구분 색상입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 참가자의 커서·표시에 사용할 구분 색상입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabUserColor: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collabUserColor"],["HTML 속성","collab-user-color"],["기본값","undefined"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collab-user-color 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/collabPresence","kind":"option","title":"collabPresence","summary":"협업 참가자의 현재 위치와 참여 상태 표시를 설정합니다.","member":{"name":"collabPresence","attribute":"collab-presence","type":"boolean","kind":"boolean","values":[],"default":"true","description":"협업 참가자의 현재 위치와 참여 상태 표시를 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 참가자의 현재 위치와 참여 상태 표시를 설정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabPresence: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collabPresence"],["HTML 속성","collab-presence"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collab-presence 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/collabConflictUi","kind":"option","title":"collabConflictUi","summary":"동시 편집 충돌에 대한 사용자 안내 UI를 설정합니다.","member":{"name":"collabConflictUi","attribute":"collab-conflict-ui","type":"boolean","kind":"boolean","values":[],"default":"true","description":"동시 편집 충돌에 대한 사용자 안내 UI를 설정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"동시 편집 충돌에 대한 사용자 안내 UI를 설정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabConflictUi: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collabConflictUi"],["HTML 속성","collab-conflict-ui"],["기본값","true"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collab-conflict-ui 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/auditLog","kind":"option","title":"auditLog","summary":"행·셀·선택·편집 이력 전이를 감사 로그로 기록합니다. 기본 비활성 상태이며 장기 서버 보존과는 별개입니다.","member":{"name":"auditLog","attribute":"audit-log","type":"boolean","kind":"boolean","values":[],"default":"false","description":"행·셀·선택·편집 이력 전이를 감사 로그로 기록합니다. 기본 비활성 상태이며 장기 서버 보존과는 별개입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행·셀·선택·편집 이력 전이를 감사 로그로 기록합니다. 기본 비활성 상태이며 장기 서버 보존과는 별개입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"auditLog: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","auditLog"],["HTML 속성","audit-log"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 audit-log 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/options/auditLogMax","kind":"option","title":"auditLogMax","summary":"메모리에 보관할 감사 로그 수의 상한입니다. 초과 시 오래된 기록부터 빠집니다.","member":{"name":"auditLogMax","attribute":"audit-log-max","type":"number","kind":"number","values":[],"default":"1000","description":"메모리에 보관할 감사 로그 수의 상한입니다. 초과 시 오래된 기록부터 빠집니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"메모리에 보관할 감사 로그 수의 상한입니다. 초과 시 오래된 기록부터 빠집니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"auditLogMax: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","auditLogMax"],["HTML 속성","audit-log-max"],["기본값","1000"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 audit-log-max 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/options/canReadCell","kind":"option","title":"canReadCell","summary":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다.","member":{"name":"canReadCell","attribute":"can-read-cell","type":"CanReadCellFn","kind":"property","values":[],"default":"undefined","description":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"canReadCell: CanReadCellFn","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","canReadCell"],["HTML 속성","can-read-cell"],["기본값","undefined"],["입력 타입","CanReadCellFn"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/rbac","title":"셀 접근 제어","description":"셀 읽기와 편집 정책은 사용자 역할에 따라 보이는 값과 수정 가능한 값을 제한합니다. 열을 숨기는 UI 설정과 데이터 접근 정책은 다릅니다."}]}]}]},{"path":"/ko/docs/options/maskedCellValue","kind":"option","title":"maskedCellValue","summary":"읽기 제한된 셀 대신 표시할 마스킹 문구입니다.","member":{"name":"maskedCellValue","attribute":"masked-cell-value","type":"string","kind":"string","values":[],"default":"'•••'","description":"읽기 제한된 셀 대신 표시할 마스킹 문구입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"읽기 제한된 셀 대신 표시할 마스킹 문구입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maskedCellValue: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","maskedCellValue"],["HTML 속성","masked-cell-value"],["기본값","'•••'"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 masked-cell-value 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/rbac","title":"셀 접근 제어","description":"셀 읽기와 편집 정책은 사용자 역할에 따라 보이는 값과 수정 가능한 값을 제한합니다. 열을 숨기는 UI 설정과 데이터 접근 정책은 다릅니다."}]}]}]},{"path":"/ko/docs/options/canEditCell","kind":"option","title":"canEditCell","summary":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다.","member":{"name":"canEditCell","attribute":"can-edit-cell","type":"CanEditCellFn","kind":"property","values":[],"default":"undefined","description":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"canEditCell: CanEditCellFn","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","canEditCell"],["HTML 속성","can-edit-cell"],["기본값","undefined"],["입력 타입","CanEditCellFn"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/rbac","title":"셀 접근 제어","description":"셀 읽기와 편집 정책은 사용자 역할에 따라 보이는 값과 수정 가능한 값을 제한합니다. 열을 숨기는 UI 설정과 데이터 접근 정책은 다릅니다."}]}]}]},{"path":"/ko/docs/options/conditionalFormats","kind":"option","title":"conditionalFormats","summary":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다.","member":{"name":"conditionalFormats","attribute":"conditional-formats","type":"ConditionalFormatRule[]","kind":"property","values":[],"default":"undefined","description":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionalFormats: ConditionalFormatRule[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","conditionalFormats"],["HTML 속성","conditional-formats"],["기본값","undefined"],["입력 타입","ConditionalFormatRule[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/conditional-formats","title":"조건부 서식","description":"조건부 서식은 값의 의미에 따라 배경·글자 등 표시를 바꿉니다. 재고 부족이나 목표 초과를 빠르게 찾는 데 쓰며 원본 값이나 검증 결과를 바꾸지는 않습니다."}]}]}]},{"path":"/ko/docs/options/conditionalFormatUi","kind":"option","title":"conditionalFormatUi","summary":"사용자가 조건부 서식 규칙을 조정하는 UI를 제공합니다.","member":{"name":"conditionalFormatUi","attribute":"conditional-format-ui","type":"boolean","kind":"boolean","values":[],"default":"false","description":"사용자가 조건부 서식 규칙을 조정하는 UI를 제공합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자가 조건부 서식 규칙을 조정하는 UI를 제공합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionalFormatUi: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","conditionalFormatUi"],["HTML 속성","conditional-format-ui"],["기본값","false"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 conditional-format-ui 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/conditional-formats","title":"조건부 서식","description":"조건부 서식은 값의 의미에 따라 배경·글자 등 표시를 바꿉니다. 재고 부족이나 목표 초과를 빠르게 찾는 데 쓰며 원본 값이나 검증 결과를 바꾸지는 않습니다."}]}]}]},{"path":"/ko/docs/options/validationRules","kind":"option","title":"validationRules","summary":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다.","member":{"name":"validationRules","attribute":"validation-rules","type":"ValidationRule[]","kind":"property","values":[],"default":"undefined","description":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"validationRules: ValidationRule[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","validationRules"],["HTML 속성","validation-rules"],["기본값","undefined"],["입력 타입","ValidationRule[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ValidationRule","title":"ValidationRule","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/validation-rules","title":"데이터 검증","description":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다."}]}]}]},{"path":"/ko/docs/options/invalidEditMode","kind":"option","title":"invalidEditMode","summary":"검증 실패 시 오류를 표시하고 반영하는 allow, 기존 값으로 되돌리는 revert, 확정을 막는 block 중 선택합니다.","member":{"name":"invalidEditMode","attribute":"invalid-edit-mode","type":"'allow' | 'revert' | 'block'","kind":"string","values":["allow","revert","block"],"default":"'allow'","description":"검증 실패 시 오류를 표시하고 반영하는 allow, 기존 값으로 되돌리는 revert, 확정을 막는 block 중 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"검증 실패 시 오류를 표시하고 반영하는 allow, 기존 값으로 되돌리는 revert, 확정을 막는 block 중 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"invalidEditMode: 'allow' | 'revert' | 'block'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","invalidEditMode"],["HTML 속성","invalid-edit-mode"],["기본값","'allow'"],["입력 타입","'allow' | 'revert' | 'block'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 invalid-edit-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/validation-rules","title":"데이터 검증","description":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다."}]}]}]},{"path":"/ko/docs/options/maxSnapshots","kind":"option","title":"maxSnapshots","summary":"메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다.","member":{"name":"maxSnapshots","attribute":"max-snapshots","type":"number","kind":"number","values":[],"default":"20","description":"메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"메모리에 보관할 데이터 스냅샷 수의 상한입니다. 오래된 스냅샷이 제거될 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxSnapshots: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","maxSnapshots"],["HTML 속성","max-snapshots"],["기본값","20"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 max-snapshots 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/options/collabPersistence","kind":"option","title":"collabPersistence","summary":"협업 상태의 로컬 영속 저장을 사용하지 않을지 IndexedDB를 사용할지 선택합니다. 서버 백업을 대신하지 않습니다.","member":{"name":"collabPersistence","attribute":"collab-persistence","type":"'none' | 'indexeddb'","kind":"string","values":["none","indexeddb"],"default":"'none'","description":"협업 상태의 로컬 영속 저장을 사용하지 않을지 IndexedDB를 사용할지 선택합니다. 서버 백업을 대신하지 않습니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 상태의 로컬 영속 저장을 사용하지 않을지 IndexedDB를 사용할지 선택합니다. 서버 백업을 대신하지 않습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabPersistence: 'none' | 'indexeddb'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","collabPersistence"],["HTML 속성","collab-persistence"],["기본값","'none'"],["입력 타입","'none' | 'indexeddb'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 collab-persistence 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/options/initialState","kind":"option","title":"initialState","summary":"Grid의 첫 초기화에 한 번 적용할 버전 포함 화면 상태입니다. 실행 중 복원은 setState를 사용합니다.","member":{"name":"initialState","attribute":"initial-state","type":"SyGridState","kind":"property","values":[],"default":"undefined","description":"Grid의 첫 초기화에 한 번 적용할 버전 포함 화면 상태입니다. 실행 중 복원은 setState를 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid의 첫 초기화에 한 번 적용할 버전 포함 화면 상태입니다. 실행 중 복원은 setState를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"initialState: SyGridState","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","initialState"],["HTML 속성","initial-state"],["기본값","undefined"],["입력 타입","SyGridState"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/options/editType","kind":"option","title":"editType","summary":"한 셀씩 편집할지 한 행의 여러 셀을 묶어 편집할지 선택합니다.","member":{"name":"editType","attribute":"edit-type","type":"'cell' | 'fullRow'","kind":"string","values":["cell","fullRow"],"default":"'cell'","description":"한 셀씩 편집할지 한 행의 여러 셀을 묶어 편집할지 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 셀씩 편집할지 한 행의 여러 셀을 묶어 편집할지 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"editType: 'cell' | 'fullRow'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","editType"],["HTML 속성","edit-type"],["기본값","'cell'"],["입력 타입","'cell' | 'fullRow'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 edit-type 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/options/enableFillHandle","kind":"option","title":"enableFillHandle","summary":"선택 범위 모서리의 채우기 핸들을 활성화합니다.","member":{"name":"enableFillHandle","attribute":"enable-fill-handle","type":"boolean","kind":"boolean","values":[],"default":"undefined","description":"선택 범위 모서리의 채우기 핸들을 활성화합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"선택 범위 모서리의 채우기 핸들을 활성화합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"enableFillHandle: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","enableFillHandle"],["HTML 속성","enable-fill-handle"],["기본값","undefined"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 enable-fill-handle 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/options/fillHandleAxes","kind":"option","title":"fillHandleAxes","summary":"채우기를 가로·세로·양방향 중 어디로 허용할지 정합니다.","member":{"name":"fillHandleAxes","attribute":"fill-handle-axes","type":"'both' | 'x' | 'y'","kind":"string","values":["both","x","y"],"default":"undefined","description":"채우기를 가로·세로·양방향 중 어디로 허용할지 정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"채우기를 가로·세로·양방향 중 어디로 허용할지 정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fillHandleAxes: 'both' | 'x' | 'y'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","fillHandleAxes"],["HTML 속성","fill-handle-axes"],["기본값","undefined"],["입력 타입","'both' | 'x' | 'y'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 fill-handle-axes 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/options/fillHandleMode","kind":"option","title":"fillHandleMode","summary":"채우기에서 기존 값을 복사할지 연속 패턴으로 확장할지 선택합니다.","member":{"name":"fillHandleMode","attribute":"fill-handle-mode","type":"'copy' | 'series'","kind":"string","values":["copy","series"],"default":"undefined","description":"채우기에서 기존 값을 복사할지 연속 패턴으로 확장할지 선택합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"채우기에서 기존 값을 복사할지 연속 패턴으로 확장할지 선택합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fillHandleMode: 'copy' | 'series'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","fillHandleMode"],["HTML 속성","fill-handle-mode"],["기본값","undefined"],["입력 타입","'copy' | 'series'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. HTML에서는 fill-handle-mode 속성으로도 지정할 수 있습니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/options/alignedGrids","kind":"option","title":"alignedGrids","summary":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다.","member":{"name":"alignedGrids","attribute":"aligned-grids","type":"SyGridAlignedGridsInput | string","kind":"property","values":[],"default":"undefined","description":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"alignedGrids: SyGridAlignedGridsInput | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","alignedGrids"],["HTML 속성","aligned-grids"],["기본값","undefined"],["입력 타입","SyGridAlignedGridsInput | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/isFullWidthRow","kind":"option","title":"isFullWidthRow","summary":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다.","member":{"name":"isFullWidthRow","attribute":"is-full-width-row","type":"(params: { row: GridRow; rowIndex: number; builtInKind: 'detail' | 'group' | 'group-footer' | 'loading' | 'custom' | null }) => boolean","kind":"property","values":[],"default":"undefined","description":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"isFullWidthRow: (params: { row: GridRow; rowIndex: number; builtInKind: 'detail' | 'group' | 'group-footer' | 'loading' | 'custom' | null }) => boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","isFullWidthRow"],["HTML 속성","is-full-width-row"],["기본값","undefined"],["입력 타입","(params: { row: GridRow; rowIndex: number; builtInKind: 'detail' | 'group' | 'group-footer' | 'loading' | 'custom' | null }) => boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/fullWidthCellRenderer","kind":"option","title":"fullWidthCellRenderer","summary":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다.","member":{"name":"fullWidthCellRenderer","attribute":"full-width-cell-renderer","type":"SyGridFullWidthRenderer<GridRow>","kind":"property","values":[],"default":"undefined","description":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fullWidthCellRenderer: SyGridFullWidthRenderer<GridRow>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","fullWidthCellRenderer"],["HTML 속성","full-width-cell-renderer"],["기본값","undefined"],["입력 타입","SyGridFullWidthRenderer<GridRow>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/fullWidthRowHeight","kind":"option","title":"fullWidthRowHeight","summary":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다.","member":{"name":"fullWidthRowHeight","attribute":"full-width-row-height","type":"number | ((row: GridRow, rowIndex: number) => number)","kind":"property","values":[],"default":"undefined","description":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fullWidthRowHeight: number | ((row: GridRow, rowIndex: number) => number)","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","fullWidthRowHeight"],["HTML 속성","full-width-row-height"],["기본값","undefined"],["입력 타입","number | ((row: GridRow, rowIndex: number) => number)"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/pinnedTopRowData","kind":"option","title":"pinnedTopRowData","summary":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다.","member":{"name":"pinnedTopRowData","attribute":"pinned-top-row-data","type":"GridRow[]","kind":"property","values":[],"default":"undefined","description":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pinnedTopRowData: GridRow[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pinnedTopRowData"],["HTML 속성","pinned-top-row-data"],["기본값","undefined"],["입력 타입","GridRow[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/options/pinnedBottomRowData","kind":"option","title":"pinnedBottomRowData","summary":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다.","member":{"name":"pinnedBottomRowData","attribute":"pinned-bottom-row-data","type":"GridRow[]","kind":"property","values":[],"default":"undefined","description":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다."},"apiKind":"props","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pinnedBottomRowData: GridRow[]","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["JavaScript 이름","pinnedBottomRowData"],["HTML 속성","pinned-bottom-row-data"],["기본값","undefined"],["입력 타입","GridRow[]"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 Grid 요소의 프로퍼티에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/columns","kind":"index","title":"ColumnDef · 열 설정","summary":"sy-grid의 ColumnDef · 열 설정 53개를 이름으로 찾고 설명·타입·예제로 이동할 수 있습니다.","sections":[{"id":"index","title":"전체 목록","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/field","title":"field","description":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다."},{"path":"/ko/docs/columns/colId","title":"colId","description":"열을 API·상태 저장에서 안정적으로 식별할 ID입니다. 제목 변경과 무관하게 유지하세요."},{"path":"/ko/docs/columns/headerName","title":"headerName","description":"사용자에게 보여 줄 열 제목입니다. 원본 데이터 키와 다르게 작성할 수 있습니다."},{"path":"/ko/docs/columns/headerTooltip","title":"headerTooltip","description":"머리글에 제공할 보조 설명입니다."},{"path":"/ko/docs/columns/sortable","title":"sortable","description":"이 열을 사용자 정렬 대상으로 허용할지 정합니다."},{"path":"/ko/docs/columns/sort","title":"sort","description":"열의 초기 오름차순·내림차순 정렬 또는 정렬 해제를 지정합니다."},{"path":"/ko/docs/columns/sortIndex","title":"sortIndex","description":"여러 초기 정렬 기준 중 이 열의 우선순위를 지정합니다."},{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."},{"path":"/ko/docs/columns/valueGetter","title":"valueGetter","description":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다."},{"path":"/ko/docs/columns/formula","title":"formula","description":"이 열에 적용할 수식 문자열입니다. 수식 기능과 원본 좌표 규칙을 함께 확인합니다."},{"path":"/ko/docs/columns/valueFormatter","title":"valueFormatter","description":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다."},{"path":"/ko/docs/columns/tooltipField","title":"tooltipField","description":"툴팁에 사용할 원본 데이터 필드입니다."},{"path":"/ko/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요."},{"path":"/ko/docs/columns/cellRenderer","title":"cellRenderer","description":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다."},{"path":"/ko/docs/columns/cellRendererMeta","title":"cellRendererMeta","description":"셀 렌더러에 전달할 추가 메타데이터입니다."},{"path":"/ko/docs/columns/cellEditor","title":"cellEditor","description":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다."},{"path":"/ko/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다."},{"path":"/ko/docs/columns/cellClass","title":"cellClass","description":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다."},{"path":"/ko/docs/columns/cellClassRules","title":"cellClassRules","description":"조건별로 CSS 클래스를 적용하는 규칙입니다."},{"path":"/ko/docs/columns/cellStyle","title":"cellStyle","description":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다."},{"path":"/ko/docs/columns/width","title":"width","description":"열의 초기 너비를 픽셀로 지정합니다."},{"path":"/ko/docs/columns/minWidth","title":"minWidth","description":"사용자 조정과 자동 크기 계산에서 허용할 최소 너비입니다."},{"path":"/ko/docs/columns/maxWidth","title":"maxWidth","description":"열 너비의 상한입니다."},{"path":"/ko/docs/columns/flex","title":"flex","description":"남는 공간을 나눠 가질 상대 비율입니다. 고정 너비·최소·최대 너비와 함께 확인합니다."},{"path":"/ko/docs/columns/resizable","title":"resizable","description":"이 열의 너비를 사용자가 조절할 수 있는지 정합니다."},{"path":"/ko/docs/columns/reorderable","title":"reorderable","description":"이 열의 위치를 사용자가 바꿀 수 있는지 정합니다."},{"path":"/ko/docs/columns/pinned","title":"pinned","description":"열을 왼쪽·오른쪽에 고정하거나 null로 고정을 해제합니다."},{"path":"/ko/docs/columns/columnGroupShow","title":"columnGroupShow","description":"부모 열 그룹이 펼쳐졌거나 접혔을 때 이 열을 보여 줄지 선택합니다."},{"path":"/ko/docs/columns/aggFunc","title":"aggFunc","description":"행 그룹·분석에서 사용할 기본 또는 등록된 사용자 집계 함수 이름입니다."},{"path":"/ko/docs/columns/hidden","title":"hidden","description":"이 열을 처음에 숨길지 설정합니다. 값 읽기 권한을 차단하는 설정은 아닙니다."},{"path":"/ko/docs/columns/hide","title":"hide","description":"열 숨김의 호환 이름입니다. hidden과 모순된 값으로 중복 지정하지 마세요."},{"path":"/ko/docs/columns/editable","title":"editable","description":"이 열의 편집을 허용합니다. 행별 권한·검증 정책은 추가로 적용됩니다."},{"path":"/ko/docs/columns/editor","title":"editor","description":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다."},{"path":"/ko/docs/columns/valueParser","title":"valueParser","description":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다."},{"path":"/ko/docs/columns/valueSetter","title":"valueSetter","description":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요."},{"path":"/ko/docs/columns/comparator","title":"comparator","description":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다."},{"path":"/ko/docs/columns/options","title":"options","description":"선택형 편집기의 값과 표시 라벨 목록입니다. 일부 선택지를 disabled로 막을 수 있습니다."},{"path":"/ko/docs/columns/min","title":"min","description":"숫자·날짜 편집에서 허용하는 최솟값입니다."},{"path":"/ko/docs/columns/max","title":"max","description":"숫자·날짜 편집에서 허용하는 최댓값입니다."},{"path":"/ko/docs/columns/step","title":"step","description":"숫자 입력의 증가·감소 단위입니다."},{"path":"/ko/docs/columns/decimals","title":"decimals","description":"숫자 편집의 소수 자릿수를 정합니다."},{"path":"/ko/docs/columns/nullable","title":"nullable","description":"편집 값으로 null을 허용할지 지정합니다."},{"path":"/ko/docs/columns/allowEmpty","title":"allowEmpty","description":"편집 중 빈 값을 허용할지 지정합니다. 필수 입력 검증과 함께 확인합니다."},{"path":"/ko/docs/columns/storeAs","title":"storeAs","description":"날짜 편집 결과를 Date 객체 또는 ISO 문자열 중 어떤 형태로 저장할지 정합니다."},{"path":"/ko/docs/columns/rows","title":"rows","description":"여러 줄 텍스트 편집기의 기본 표시 줄 수입니다."},{"path":"/ko/docs/columns/maxRows","title":"maxRows","description":"여러 줄 편집기가 늘어날 수 있는 최대 줄 수입니다."},{"path":"/ko/docs/columns/cols","title":"cols","description":"여러 줄 텍스트 편집기의 표시 폭 기준입니다."},{"path":"/ko/docs/columns/maxLength","title":"maxLength","description":"텍스트 편집에 허용할 최대 길이입니다."},{"path":"/ko/docs/columns/rowDrag","title":"rowDrag","description":"이 열에 행 드래그 핸들을 제공합니다. Grid의 드래그 정책과 함께 사용합니다."},{"path":"/ko/docs/columns/wrapText","title":"wrapText","description":"셀 텍스트 줄바꿈을 허용합니다. 충분한 높이가 없으면 내용이 잘릴 수 있습니다."},{"path":"/ko/docs/columns/autoHeight","title":"autoHeight","description":"셀 내용에 맞춘 행 높이 계산을 사용합니다. 가상화와 큰 데이터의 비용을 함께 확인합니다."},{"path":"/ko/docs/columns/rowSpan","title":"rowSpan","description":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다."},{"path":"/ko/docs/columns/colSpan","title":"colSpan","description":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다."}]}]}]},{"path":"/ko/docs/columns/field","kind":"column","title":"field","summary":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다.","member":{"name":"field","type":"GridFieldPath<TData>","description":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다.","optional":false},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"field: GridFieldPath<TData>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","필수"],["입력 타입","GridFieldPath<TData>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/columns/colId","kind":"column","title":"colId","summary":"열을 API·상태 저장에서 안정적으로 식별할 ID입니다. 제목 변경과 무관하게 유지하세요.","member":{"name":"colId","type":"string","description":"열을 API·상태 저장에서 안정적으로 식별할 ID입니다. 제목 변경과 무관하게 유지하세요.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열을 API·상태 저장에서 안정적으로 식별할 ID입니다. 제목 변경과 무관하게 유지하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"colId?: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/columns/headerName","kind":"column","title":"headerName","summary":"사용자에게 보여 줄 열 제목입니다. 원본 데이터 키와 다르게 작성할 수 있습니다.","member":{"name":"headerName","type":"string","description":"사용자에게 보여 줄 열 제목입니다. 원본 데이터 키와 다르게 작성할 수 있습니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자에게 보여 줄 열 제목입니다. 원본 데이터 키와 다르게 작성할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"headerName?: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/columns/headerTooltip","kind":"column","title":"headerTooltip","summary":"머리글에 제공할 보조 설명입니다.","member":{"name":"headerTooltip","type":"string","description":"머리글에 제공할 보조 설명입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"머리글에 제공할 보조 설명입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"headerTooltip?: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tooltip","title":"셀 툴팁","description":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다."}]}]}]},{"path":"/ko/docs/columns/sortable","kind":"column","title":"sortable","summary":"이 열을 사용자 정렬 대상으로 허용할지 정합니다.","member":{"name":"sortable","type":"boolean","description":"이 열을 사용자 정렬 대상으로 허용할지 정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열을 사용자 정렬 대상으로 허용할지 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sortable?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/columns/sort","kind":"column","title":"sort","summary":"열의 초기 오름차순·내림차순 정렬 또는 정렬 해제를 지정합니다.","member":{"name":"sort","type":"'asc' | 'desc' | null","description":"열의 초기 오름차순·내림차순 정렬 또는 정렬 해제를 지정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열의 초기 오름차순·내림차순 정렬 또는 정렬 해제를 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sort?: 'asc' | 'desc' | null","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'asc' | 'desc' | null"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/columns/sortIndex","kind":"column","title":"sortIndex","summary":"여러 초기 정렬 기준 중 이 열의 우선순위를 지정합니다.","member":{"name":"sortIndex","type":"number","description":"여러 초기 정렬 기준 중 이 열의 우선순위를 지정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 초기 정렬 기준 중 이 열의 우선순위를 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sortIndex?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/columns/filter","kind":"column","title":"filter","summary":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다.","member":{"name":"filter","type":"| ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."},{"kind":"paragraph","text":"Set filter와 Multi filter는 Pro입니다. 기본 text·number·date 필터는 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"filter?: | ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","| ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."},{"path":"/ko/docs/features/set-filter","title":"목록에서 값 선택","description":"지역·상태처럼 반복되는 고유 값에서 포함할 항목을 고르게 하는 필터입니다. 이름 일부를 입력하는 Text filter보다 가능한 선택지를 한눈에 보여 주기 좋습니다."},{"path":"/ko/docs/features/multi-filter","title":"여러 필터 조합","description":"한 열 안에 텍스트 검색과 값 목록 같은 여러 필터를 함께 구성합니다. 서로 다른 열에 각각 필터를 켜는 방식과 다릅니다."}]}]}]},{"path":"/ko/docs/columns/valueGetter","kind":"column","title":"valueGetter","summary":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다.","member":{"name":"valueGetter","type":"GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string","description":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"valueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/value-getter-formatter","title":"계산과 표시 분리","description":"valueGetter는 실제 계산값을 만들고 valueFormatter는 화면에 읽기 좋은 문자열을 만듭니다. 합계·정렬·비교에 숫자가 필요하면 getter는 숫자를 반환해야 합니다."}]}]}]},{"path":"/ko/docs/columns/formula","kind":"column","title":"formula","summary":"이 열에 적용할 수식 문자열입니다. 수식 기능과 원본 좌표 규칙을 함께 확인합니다.","member":{"name":"formula","type":"string","description":"이 열에 적용할 수식 문자열입니다. 수식 기능과 원본 좌표 규칙을 함께 확인합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열에 적용할 수식 문자열입니다. 수식 기능과 원본 좌표 규칙을 함께 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"formula?: string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/columns/valueFormatter","kind":"column","title":"valueFormatter","summary":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다.","member":{"name":"valueFormatter","type":"GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string","description":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"valueFormatter?: GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/value-getter-formatter","title":"계산과 표시 분리","description":"valueGetter는 실제 계산값을 만들고 valueFormatter는 화면에 읽기 좋은 문자열을 만듭니다. 합계·정렬·비교에 숫자가 필요하면 getter는 숫자를 반환해야 합니다."}]}]}]},{"path":"/ko/docs/columns/tooltipField","kind":"column","title":"tooltipField","summary":"툴팁에 사용할 원본 데이터 필드입니다.","member":{"name":"tooltipField","type":"GridFieldPath<TData>","description":"툴팁에 사용할 원본 데이터 필드입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"툴팁에 사용할 원본 데이터 필드입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"tooltipField?: GridFieldPath<TData>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridFieldPath<TData>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tooltip","title":"셀 툴팁","description":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다."}]}]}]},{"path":"/ko/docs/columns/tooltipValueGetter","kind":"column","title":"tooltipValueGetter","summary":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요.","member":{"name":"tooltipValueGetter","type":"GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string","description":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"tooltipValueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tooltip","title":"셀 툴팁","description":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다."}]}]}]},{"path":"/ko/docs/columns/cellRenderer","kind":"column","title":"cellRenderer","summary":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다.","member":{"name":"cellRenderer","type":"| string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>","description":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellRenderer?: | string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","| string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/columns/cellRendererMeta","kind":"column","title":"cellRendererMeta","summary":"셀 렌더러에 전달할 추가 메타데이터입니다.","member":{"name":"cellRendererMeta","type":"Record<string, unknown>","description":"셀 렌더러에 전달할 추가 메타데이터입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 렌더러에 전달할 추가 메타데이터입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellRendererMeta?: Record<string, unknown>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","Record<string, unknown>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/columns/cellEditor","kind":"column","title":"cellEditor","summary":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다.","member":{"name":"cellEditor","type":"GridCellEditorDeclaration<TData, TValue, TContext>","description":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다."},{"kind":"paragraph","text":"Rich Select Editor는 Pro입니다. 사용자 정의 셀 편집기는 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellEditor?: GridCellEditorDeclaration<TData, TValue, TContext>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCellEditorDeclaration<TData, TValue, TContext>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."},{"path":"/ko/docs/features/rich-select","title":"검색 가능한 선택 편집기","description":"후보가 많은 열에서 검색으로 목록을 좁혀 선택하는 Pro 편집기입니다. 기본 Select는 짧은 고정 목록에 적합하고 Rich Select는 많은 후보에서 빠르게 찾을 때 유용합니다."}]}]}]},{"path":"/ko/docs/columns/floatingFilterComponent","kind":"column","title":"floatingFilterComponent","summary":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다.","member":{"name":"floatingFilterComponent","type":"| string\n    | GridFloatingFilterDefinition<unknown, TContext>","description":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"floatingFilterComponent?: | string\n    | GridFloatingFilterDefinition<unknown, TContext>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","| string\n    | GridFloatingFilterDefinition<unknown, TContext>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/columns/cellClass","kind":"column","title":"cellClass","summary":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다.","member":{"name":"cellClass","type":"| string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>","description":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellClass?: | string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","| string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/columns/cellClassRules","kind":"column","title":"cellClassRules","summary":"조건별로 CSS 클래스를 적용하는 규칙입니다.","member":{"name":"cellClassRules","type":"Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >","description":"조건별로 CSS 클래스를 적용하는 규칙입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"조건별로 CSS 클래스를 적용하는 규칙입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellClassRules?: Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/columns/cellStyle","kind":"column","title":"cellStyle","summary":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다.","member":{"name":"cellStyle","type":"| Record<string, string | number>\n    | GridCallback<\n        [CellCallbackParams<TData, TValue, TContext>],\n        Record<string, string | number> | null | undefined\n      >\n    | ReadonlyArray<\n        | Record<string, string | number>\n        | GridCallback<\n            [CellCallbackParams<TData, TValue, TContext>],\n            Record<string, string | number> | null | undefined\n          >\n      >","description":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellStyle?: | Record<string, string | number>\n    | GridCallback<\n        [CellCallbackParams<TData, TValue, TContext>],\n        Record<string, string | number> | null | undefined\n      >\n    | ReadonlyArray<\n        | Record<string, string | number>\n        | GridCallback<\n            [CellCallbackParams<TData, TValue, TContext>],\n            Record<string, string | number> | null | undefined\n          >\n      >","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","| Record<string, string | number>\n    | GridCallback<\n        [CellCallbackParams<TData, TValue, TContext>],\n        Record<string, string | number> | null | undefined\n      >\n    | ReadonlyArray<\n        | Record<string, string | number>\n        | GridCallback<\n            [CellCallbackParams<TData, TValue, TContext>],\n            Record<string, string | number> | null | undefined\n          >\n      >"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/columns/width","kind":"column","title":"width","summary":"열의 초기 너비를 픽셀로 지정합니다.","member":{"name":"width","type":"number","description":"열의 초기 너비를 픽셀로 지정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열의 초기 너비를 픽셀로 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"width?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/minWidth","kind":"column","title":"minWidth","summary":"사용자 조정과 자동 크기 계산에서 허용할 최소 너비입니다.","member":{"name":"minWidth","type":"number","description":"사용자 조정과 자동 크기 계산에서 허용할 최소 너비입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자 조정과 자동 크기 계산에서 허용할 최소 너비입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"minWidth?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/maxWidth","kind":"column","title":"maxWidth","summary":"열 너비의 상한입니다.","member":{"name":"maxWidth","type":"number","description":"열 너비의 상한입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 너비의 상한입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxWidth?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/flex","kind":"column","title":"flex","summary":"남는 공간을 나눠 가질 상대 비율입니다. 고정 너비·최소·최대 너비와 함께 확인합니다.","member":{"name":"flex","type":"number","description":"남는 공간을 나눠 가질 상대 비율입니다. 고정 너비·최소·최대 너비와 함께 확인합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"남는 공간을 나눠 가질 상대 비율입니다. 고정 너비·최소·최대 너비와 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"flex?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/resizable","kind":"column","title":"resizable","summary":"이 열의 너비를 사용자가 조절할 수 있는지 정합니다.","member":{"name":"resizable","type":"boolean","description":"이 열의 너비를 사용자가 조절할 수 있는지 정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열의 너비를 사용자가 조절할 수 있는지 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"resizable?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/reorderable","kind":"column","title":"reorderable","summary":"이 열의 위치를 사용자가 바꿀 수 있는지 정합니다.","member":{"name":"reorderable","type":"boolean","description":"이 열의 위치를 사용자가 바꿀 수 있는지 정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열의 위치를 사용자가 바꿀 수 있는지 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"reorderable?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/pinned","kind":"column","title":"pinned","summary":"열을 왼쪽·오른쪽에 고정하거나 null로 고정을 해제합니다.","member":{"name":"pinned","type":"'left' | 'right' | null","description":"열을 왼쪽·오른쪽에 고정하거나 null로 고정을 해제합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열을 왼쪽·오른쪽에 고정하거나 null로 고정을 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pinned?: 'left' | 'right' | null","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'left' | 'right' | null"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/columnGroupShow","kind":"column","title":"columnGroupShow","summary":"부모 열 그룹이 펼쳐졌거나 접혔을 때 이 열을 보여 줄지 선택합니다.","member":{"name":"columnGroupShow","type":"'open' | 'closed'","description":"부모 열 그룹이 펼쳐졌거나 접혔을 때 이 열을 보여 줄지 선택합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 열 그룹이 펼쳐졌거나 접혔을 때 이 열을 보여 줄지 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnGroupShow?: 'open' | 'closed'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'open' | 'closed'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-groups","title":"다단 헤더","description":"다단 헤더는 관련 열을 하나의 상위 제목 아래 배치합니다. 행을 묶는 그룹화와 달리 데이터 개수나 집계값은 바뀌지 않습니다."}]}]}]},{"path":"/ko/docs/columns/aggFunc","kind":"column","title":"aggFunc","summary":"행 그룹·분석에서 사용할 기본 또는 등록된 사용자 집계 함수 이름입니다.","member":{"name":"aggFunc","type":"'sum' | 'avg' | 'min' | 'max' | 'count' | string","description":"행 그룹·분석에서 사용할 기본 또는 등록된 사용자 집계 함수 이름입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 그룹·분석에서 사용할 기본 또는 등록된 사용자 집계 함수 이름입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"aggFunc?: 'sum' | 'avg' | 'min' | 'max' | 'count' | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'sum' | 'avg' | 'min' | 'max' | 'count' | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/columns/hidden","kind":"column","title":"hidden","summary":"이 열을 처음에 숨길지 설정합니다. 값 읽기 권한을 차단하는 설정은 아닙니다.","member":{"name":"hidden","type":"boolean","description":"이 열을 처음에 숨길지 설정합니다. 값 읽기 권한을 차단하는 설정은 아닙니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열을 처음에 숨길지 설정합니다. 값 읽기 권한을 차단하는 설정은 아닙니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"hidden?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/hide","kind":"column","title":"hide","summary":"열 숨김의 호환 이름입니다. hidden과 모순된 값으로 중복 지정하지 마세요.","member":{"name":"hide","type":"boolean","description":"열 숨김의 호환 이름입니다. hidden과 모순된 값으로 중복 지정하지 마세요.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 숨김의 호환 이름입니다. hidden과 모순된 값으로 중복 지정하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"hide?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/editable","kind":"column","title":"editable","summary":"이 열의 편집을 허용합니다. 행별 권한·검증 정책은 추가로 적용됩니다.","member":{"name":"editable","type":"boolean","description":"이 열의 편집을 허용합니다. 행별 권한·검증 정책은 추가로 적용됩니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열의 편집을 허용합니다. 행별 권한·검증 정책은 추가로 적용됩니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"editable?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/editor","kind":"column","title":"editor","summary":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다.","member":{"name":"editor","type":"'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'","description":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"텍스트·숫자·날짜·선택·체크박스 등 기본 편집기 종류를 지정합니다."},{"kind":"paragraph","text":"Rich Select(autocomplete)는 Pro입니다. 기본 셀 편집기는 Free입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"editor?: 'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."},{"path":"/ko/docs/features/rich-select","title":"검색 가능한 선택 편집기","description":"후보가 많은 열에서 검색으로 목록을 좁혀 선택하는 Pro 편집기입니다. 기본 Select는 짧은 고정 목록에 적합하고 Rich Select는 많은 후보에서 빠르게 찾을 때 유용합니다."}]}]}]},{"path":"/ko/docs/columns/valueParser","kind":"column","title":"valueParser","summary":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다.","member":{"name":"valueParser","type":"GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>","description":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"valueParser?: GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/valueSetter","kind":"column","title":"valueSetter","summary":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요.","member":{"name":"valueSetter","type":"GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >","description":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"valueSetter?: GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/comparator","kind":"column","title":"comparator","summary":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다.","member":{"name":"comparator","type":"GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>","description":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"comparator?: GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/columns/options","kind":"column","title":"options","summary":"선택형 편집기의 값과 표시 라벨 목록입니다. 일부 선택지를 disabled로 막을 수 있습니다.","member":{"name":"options","type":"ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>","description":"선택형 편집기의 값과 표시 라벨 목록입니다. 일부 선택지를 disabled로 막을 수 있습니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"선택형 편집기의 값과 표시 라벨 목록입니다. 일부 선택지를 disabled로 막을 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"options?: ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/min","kind":"column","title":"min","summary":"숫자·날짜 편집에서 허용하는 최솟값입니다.","member":{"name":"min","type":"number | Date | string","description":"숫자·날짜 편집에서 허용하는 최솟값입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숫자·날짜 편집에서 허용하는 최솟값입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"min?: number | Date | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number | Date | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/max","kind":"column","title":"max","summary":"숫자·날짜 편집에서 허용하는 최댓값입니다.","member":{"name":"max","type":"number | Date | string","description":"숫자·날짜 편집에서 허용하는 최댓값입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숫자·날짜 편집에서 허용하는 최댓값입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"max?: number | Date | string","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number | Date | string"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/step","kind":"column","title":"step","summary":"숫자 입력의 증가·감소 단위입니다.","member":{"name":"step","type":"number","description":"숫자 입력의 증가·감소 단위입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숫자 입력의 증가·감소 단위입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"step?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/decimals","kind":"column","title":"decimals","summary":"숫자 편집의 소수 자릿수를 정합니다.","member":{"name":"decimals","type":"number","description":"숫자 편집의 소수 자릿수를 정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숫자 편집의 소수 자릿수를 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"decimals?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/nullable","kind":"column","title":"nullable","summary":"편집 값으로 null을 허용할지 지정합니다.","member":{"name":"nullable","type":"boolean","description":"편집 값으로 null을 허용할지 지정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"편집 값으로 null을 허용할지 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"nullable?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/allowEmpty","kind":"column","title":"allowEmpty","summary":"편집 중 빈 값을 허용할지 지정합니다. 필수 입력 검증과 함께 확인합니다.","member":{"name":"allowEmpty","type":"boolean","description":"편집 중 빈 값을 허용할지 지정합니다. 필수 입력 검증과 함께 확인합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"편집 중 빈 값을 허용할지 지정합니다. 필수 입력 검증과 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"allowEmpty?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/storeAs","kind":"column","title":"storeAs","summary":"날짜 편집 결과를 Date 객체 또는 ISO 문자열 중 어떤 형태로 저장할지 정합니다.","member":{"name":"storeAs","type":"'date' | 'iso'","description":"날짜 편집 결과를 Date 객체 또는 ISO 문자열 중 어떤 형태로 저장할지 정합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"날짜 편집 결과를 Date 객체 또는 ISO 문자열 중 어떤 형태로 저장할지 정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"storeAs?: 'date' | 'iso'","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","'date' | 'iso'"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/rows","kind":"column","title":"rows","summary":"여러 줄 텍스트 편집기의 기본 표시 줄 수입니다.","member":{"name":"rows","type":"number","description":"여러 줄 텍스트 편집기의 기본 표시 줄 수입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 줄 텍스트 편집기의 기본 표시 줄 수입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rows?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/maxRows","kind":"column","title":"maxRows","summary":"여러 줄 편집기가 늘어날 수 있는 최대 줄 수입니다.","member":{"name":"maxRows","type":"number","description":"여러 줄 편집기가 늘어날 수 있는 최대 줄 수입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 줄 편집기가 늘어날 수 있는 최대 줄 수입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxRows?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/cols","kind":"column","title":"cols","summary":"여러 줄 텍스트 편집기의 표시 폭 기준입니다.","member":{"name":"cols","type":"number","description":"여러 줄 텍스트 편집기의 표시 폭 기준입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 줄 텍스트 편집기의 표시 폭 기준입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cols?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/maxLength","kind":"column","title":"maxLength","summary":"텍스트 편집에 허용할 최대 길이입니다.","member":{"name":"maxLength","type":"number","description":"텍스트 편집에 허용할 최대 길이입니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"텍스트 편집에 허용할 최대 길이입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"maxLength?: number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/columns/rowDrag","kind":"column","title":"rowDrag","summary":"이 열에 행 드래그 핸들을 제공합니다. Grid의 드래그 정책과 함께 사용합니다.","member":{"name":"rowDrag","type":"boolean","description":"이 열에 행 드래그 핸들을 제공합니다. Grid의 드래그 정책과 함께 사용합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이 열에 행 드래그 핸들을 제공합니다. Grid의 드래그 정책과 함께 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDrag?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/columns/wrapText","kind":"column","title":"wrapText","summary":"셀 텍스트 줄바꿈을 허용합니다. 충분한 높이가 없으면 내용이 잘릴 수 있습니다.","member":{"name":"wrapText","type":"boolean","description":"셀 텍스트 줄바꿈을 허용합니다. 충분한 높이가 없으면 내용이 잘릴 수 있습니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 텍스트 줄바꿈을 허용합니다. 충분한 높이가 없으면 내용이 잘릴 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"wrapText?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/columns/autoHeight","kind":"column","title":"autoHeight","summary":"셀 내용에 맞춘 행 높이 계산을 사용합니다. 가상화와 큰 데이터의 비용을 함께 확인합니다.","member":{"name":"autoHeight","type":"boolean","description":"셀 내용에 맞춘 행 높이 계산을 사용합니다. 가상화와 큰 데이터의 비용을 함께 확인합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 내용에 맞춘 행 높이 계산을 사용합니다. 가상화와 큰 데이터의 비용을 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"autoHeight?: boolean","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","boolean"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/columns/rowSpan","kind":"column","title":"rowSpan","summary":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다.","member":{"name":"rowSpan","type":"(params: SyGridRowSpanParams<TData>) => number","description":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowSpan?: (params: SyGridRowSpanParams<TData>) => number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","(params: SyGridRowSpanParams<TData>) => number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/columns/colSpan","kind":"column","title":"colSpan","summary":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다.","member":{"name":"colSpan","type":"(params: SyGridColSpanParams<TData>) => number","description":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다.","optional":true},"apiKind":"columns","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"colSpan?: (params: SyGridColSpanParams<TData>) => number","language":"typescript"},{"kind":"table","headers":["항목","값"],"rows":[["필수 여부","선택"],["입력 타입","(params: SyGridColSpanParams<TData>) => number"]]}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"이 항목은 columnDefs 배열 안의 개별 열 객체에 설정합니다. 배열·객체·콜백 함수는 JavaScript로 전달하고, 변경을 반영할 때 새 배열이나 객체를 사용하세요."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods","kind":"index","title":"메서드","summary":"sy-grid의 메서드 203개를 이름으로 찾고 설명·타입·예제로 이동할 수 있습니다.","sections":[{"id":"index","title":"전체 목록","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getAuditLog","title":"getAuditLog","description":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."},{"path":"/ko/docs/methods/clearAuditLog","title":"clearAuditLog","description":"보관 중인 감사 기록을 지웁니다. 기록 순번은 계속 증가하며 재사용되지 않습니다."},{"path":"/ko/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다."},{"path":"/ko/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다."},{"path":"/ko/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"선택한 감사 기록을 CSV 파일로 내려받습니다."},{"path":"/ko/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"선택한 감사 기록을 JSON 파일로 내려받습니다."},{"path":"/ko/docs/methods/openCellCommentPanel","title":"openCellCommentPanel","description":"행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다."},{"path":"/ko/docs/methods/closeCellCommentPanel","title":"closeCellCommentPanel","description":"열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다."},{"path":"/ko/docs/methods/getApi","title":"getApi","description":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."},{"path":"/ko/docs/methods/getColumn","title":"getColumn","description":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."},{"path":"/ko/docs/methods/getColumns","title":"getColumns","description":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."},{"path":"/ko/docs/methods/getColumnGroup","title":"getColumnGroup","description":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."},{"path":"/ko/docs/methods/getColumnGroups","title":"getColumnGroups","description":"현재 열 그룹 객체 목록을 읽습니다."},{"path":"/ko/docs/methods/getRow","title":"getRow","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},{"path":"/ko/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."},{"path":"/ko/docs/methods/forEachRow","title":"forEachRow","description":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."},{"path":"/ko/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."},{"path":"/ko/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다."},{"path":"/ko/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다."},{"path":"/ko/docs/methods/disconnectWorkbook","title":"disconnectWorkbook","description":"워크북 연결을 해제합니다. 다른 시트와 수식 값을 전파하는 흐름에 미치는 영향을 확인하세요."},{"path":"/ko/docs/methods/sortBy","title":"sortBy","description":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다."},{"path":"/ko/docs/methods/setSortModel","title":"setSortModel","description":"정렬 기준 목록과 우선순위를 한 번에 교체합니다. 빈 배열로 전체 정렬을 해제합니다."},{"path":"/ko/docs/methods/getSortModel","title":"getSortModel","description":"현재 정렬 열·방향·우선순위 목록을 읽습니다."},{"path":"/ko/docs/methods/setQuery","title":"setQuery","description":"처리 엔진에 적용할 조회 조건을 전달합니다. GridQuery 계약과 현재 행 모델의 지원 범위를 확인하세요."},{"path":"/ko/docs/methods/getActiveTier","title":"getActiveTier","description":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다."},{"path":"/ko/docs/methods/registerAggFunc","title":"registerAggFunc","description":"이름으로 사용자 집계 함수를 등록합니다. 같은 이름의 기존 함수를 덮어쓸 수 있으므로 고유한 이름을 사용하세요."},{"path":"/ko/docs/methods/unregisterAggFunc","title":"unregisterAggFunc","description":"등록한 사용자 집계 함수를 제거합니다. 사용 중인 열의 aggFunc 설정도 함께 정리합니다."},{"path":"/ko/docs/methods/getRegisteredAggFuncNames","title":"getRegisteredAggFuncNames","description":"현재 등록된 집계 함수 이름을 확인합니다."},{"path":"/ko/docs/methods/setRowGroupExpanded","title":"setRowGroupExpanded","description":"실제 그룹 키에 해당하는 행 그룹을 펼치거나 접습니다. 없는 그룹이나 이미 같은 상태이면 변경하지 않습니다."},{"path":"/ko/docs/methods/expandAllRowGroups","title":"expandAllRowGroups","description":"현재 행 그룹을 모두 펼칩니다. 실제로 바뀐 그룹마다 토글 이벤트가 발생합니다."},{"path":"/ko/docs/methods/collapseAllRowGroups","title":"collapseAllRowGroups","description":"현재 데이터에서 접을 수 있는 행 그룹을 모두 접습니다."},{"path":"/ko/docs/methods/setTreeNodeExpanded","title":"setTreeNodeExpanded","description":"경로로 지정한 트리 노드를 펼치거나 접습니다. 잎 노드나 존재하지 않는 경로는 펼칠 수 없습니다."},{"path":"/ko/docs/methods/expandAllTreeNodes","title":"expandAllTreeNodes","description":"현재 트리의 접을 수 있는 노드를 모두 펼칩니다."},{"path":"/ko/docs/methods/collapseAllTreeNodes","title":"collapseAllTreeNodes","description":"현재 트리의 가지 노드를 모두 접습니다."},{"path":"/ko/docs/methods/setDetailRowExpanded","title":"setDetailRowExpanded","description":"안정적인 부모 행 ID로 상세 패널을 펼치거나 접습니다."},{"path":"/ko/docs/methods/expandAllDetailRows","title":"expandAllDetailRows","description":"현재 필터를 통과한 전체 페이지의 상세 행을 펼칩니다. 지연 조회를 사용하는 경우 요청량을 고려하세요."},{"path":"/ko/docs/methods/collapseAllDetailRows","title":"collapseAllDetailRows","description":"열린 상세 행을 모두 접고 해당 패널의 자원을 정리합니다."},{"path":"/ko/docs/methods/setColumnGroupOpened","title":"setColumnGroupOpened","description":"지정한 열 그룹 머리글을 펼치거나 접습니다."},{"path":"/ko/docs/methods/getValidationErrors","title":"getValidationErrors","description":"현재 입력 검증 오류의 대상 행·필드·값·메시지를 읽습니다. 저장 안내나 오류 목록에 연결합니다."},{"path":"/ko/docs/methods/captureSnapshot","title":"captureSnapshot","description":"현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다."},{"path":"/ko/docs/methods/listSnapshots","title":"listSnapshots","description":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다."},{"path":"/ko/docs/methods/deleteSnapshot","title":"deleteSnapshot","description":"지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다."},{"path":"/ko/docs/methods/diffSnapshots","title":"diffSnapshots","description":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."},{"path":"/ko/docs/methods/restoreSnapshot","title":"restoreSnapshot","description":"스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다."},{"path":"/ko/docs/methods/getCellRanges","title":"getCellRanges","description":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요."},{"path":"/ko/docs/methods/copyRangeToClipboard","title":"copyRangeToClipboard","description":"현재 선택 범위를 클립보드에 복사하고 성공 여부를 반환합니다. 브라우저 권한과 사용자 동작 조건을 확인합니다."},{"path":"/ko/docs/methods/pasteFromClipboard","title":"pasteFromClipboard","description":"클립보드 내용을 현재 대상에 붙여넣습니다. 결과 이벤트에서 적용·건너뛴 셀을 확인합니다."},{"path":"/ko/docs/methods/clearCellRanges","title":"clearCellRanges","description":"셀 선택 범위를 모두 지웁니다. 행 선택은 별도 상태입니다."},{"path":"/ko/docs/methods/refreshInfiniteCache","title":"refreshInfiniteCache","description":"무한 행 모델의 캐시를 새로 조회합니다. 변경된 서버 조건과 데이터 공급자를 먼저 준비합니다."},{"path":"/ko/docs/methods/refreshRowHeights","title":"refreshRowHeights","description":"행 높이를 다시 계산합니다. 내용이나 높이 콜백의 기준이 바뀐 뒤 사용합니다."},{"path":"/ko/docs/methods/scrollToTop","title":"scrollToTop","description":"Grid 스크롤을 맨 위로 이동합니다."},{"path":"/ko/docs/methods/selectRows","title":"selectRows","description":"지정한 행 ID의 선택 상태를 설정합니다. 현재 표시 인덱스가 아닌 안정적인 ID를 사용합니다."},{"path":"/ko/docs/methods/getSelectedRowIds","title":"getSelectedRowIds","description":"현재 선택한 행 ID 목록을 읽습니다. 서버 전체 선택은 전용 서버 선택 상태 API를 사용합니다."},{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."},{"path":"/ko/docs/methods/undo","title":"undo","description":"이전 편집 이력 한 단계를 되돌리고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/redo","title":"redo","description":"실행 취소한 이력 한 단계를 다시 적용하고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/clearHistory","title":"clearHistory","description":"실행 취소·다시 실행 이력을 비웁니다. 현재 데이터 값을 초기값으로 바꾸지는 않습니다."},{"path":"/ko/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다."},{"path":"/ko/docs/methods/preloadChunks","title":"preloadChunks","description":"필요한 기능 코드를 미리 로드합니다. 기능 권한을 활성화하거나 데이터를 미리 조회하는 작업과는 다릅니다."},{"path":"/ko/docs/methods/disconnectCollabRoom","title":"disconnectCollabRoom","description":"현재 협업 방 연결을 해제합니다."},{"path":"/ko/docs/methods/getSyncStatus","title":"getSyncStatus","description":"현재 협업 연결·동기화 상태를 읽습니다."},{"path":"/ko/docs/methods/getCollaborators","title":"getCollaborators","description":"현재 협업 참가자 정보를 읽습니다."},{"path":"/ko/docs/methods/addCellComment","title":"addCellComment","description":"협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다."},{"path":"/ko/docs/methods/getCellComments","title":"getCellComments","description":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다."},{"path":"/ko/docs/methods/setCellCommentResolved","title":"setCellCommentResolved","description":"지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/deleteCellComment","title":"deleteCellComment","description":"지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."},{"path":"/ko/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."},{"path":"/ko/docs/methods/getDataAsExcel","title":"getDataAsExcel","description":"XLSX 파일 내용을 Uint8Array 바이트로 생성합니다. 앱의 첨부·업로드 등에 사용할 수 있습니다."},{"path":"/ko/docs/methods/exportDataAsExcel","title":"exportDataAsExcel","description":"지정한 시트명·열·선택 조건으로 XLSX 파일을 내려받습니다."},{"path":"/ko/docs/methods/importCsvText","title":"importCsvText","description":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요."},{"path":"/ko/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."},{"path":"/ko/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."},{"path":"/ko/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."},{"path":"/ko/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다."},{"path":"/ko/docs/methods/copyCellAt","title":"copyCellAt","description":"지정한 표시 행과 필드의 값을 복사하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/copyRowAt","title":"copyRowAt","description":"지정한 표시 행을 복사하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getCellTooltipText","title":"getCellTooltipText","description":"대상 셀과 오버플로 문맥을 바탕으로 실제 툴팁 문자열을 계산합니다."},{"path":"/ko/docs/methods/getUndoRedoDepth","title":"getUndoRedoDepth","description":"실행 취소와 다시 실행으로 이동할 수 있는 이력 수를 읽습니다."},{"path":"/ko/docs/methods/setColumnWidth","title":"setColumnWidth","description":"현재 열 너비를 지정합니다. 열의 최소·최대 너비 제한을 함께 확인합니다."},{"path":"/ko/docs/methods/resetColumnWidth","title":"resetColumnWidth","description":"지정한 열의 사용자 너비 변경을 초기 설정으로 되돌립니다."},{"path":"/ko/docs/methods/getColumnWidth","title":"getColumnWidth","description":"현재 열 너비를 읽습니다. 대상 열이 없으면 null입니다."},{"path":"/ko/docs/methods/setColumnPinned","title":"setColumnPinned","description":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다."},{"path":"/ko/docs/methods/getColumnPinned","title":"getColumnPinned","description":"현재 열 고정 방향을 읽습니다."},{"path":"/ko/docs/methods/setColumnOrder","title":"setColumnOrder","description":"열 ID 목록으로 표시 순서를 지정합니다."},{"path":"/ko/docs/methods/getColumnOrder","title":"getColumnOrder","description":"현재 열 표시 순서의 ID 목록을 읽습니다."},{"path":"/ko/docs/methods/hideColumn","title":"hideColumn","description":"지정한 열을 숨깁니다. 원본 데이터를 삭제하거나 읽기 권한을 차단하지 않습니다."},{"path":"/ko/docs/methods/showColumn","title":"showColumn","description":"숨겨진 열을 표시합니다."},{"path":"/ko/docs/methods/toggleColumnVisibility","title":"toggleColumnVisibility","description":"열 표시 여부를 반전하고 결과 상태를 반환합니다."},{"path":"/ko/docs/methods/setHiddenColumns","title":"setHiddenColumns","description":"숨길 열 목록을 한 번에 지정합니다."},{"path":"/ko/docs/methods/resetColumnVisibility","title":"resetColumnVisibility","description":"열 표시 상태를 초기 설정으로 되돌립니다."},{"path":"/ko/docs/methods/getHiddenColumns","title":"getHiddenColumns","description":"현재 숨겨진 열의 식별자 목록을 읽습니다."},{"path":"/ko/docs/methods/autoSizeColumn","title":"autoSizeColumn","description":"현재 측정할 수 있는 내용에 맞춰 한 열의 너비를 계산하고 적용합니다."},{"path":"/ko/docs/methods/autoSizeAllColumns","title":"autoSizeAllColumns","description":"각 열에 자동 너비 계산을 적용합니다. 서버 미로드 값까지 측정할 수 있다고 가정하지 마세요."},{"path":"/ko/docs/methods/getColumnState","title":"getColumnState","description":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다."},{"path":"/ko/docs/methods/applyColumnState","title":"applyColumnState","description":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."},{"path":"/ko/docs/methods/getState","title":"getState","description":"버전이 포함된 전체 화면 상태의 불변 스냅샷을 읽습니다. 원본 행 데이터를 백업하는 API가 아닙니다."},{"path":"/ko/docs/methods/setState","title":"setState","description":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."},{"path":"/ko/docs/methods/getFilterModel","title":"getFilterModel","description":"현재 필터 계열을 통합한 상태를 읽습니다."},{"path":"/ko/docs/methods/setFilterModel","title":"setFilterModel","description":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."},{"path":"/ko/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다."},{"path":"/ko/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."},{"path":"/ko/docs/methods/startBatchEdit","title":"startBatchEdit","description":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다."},{"path":"/ko/docs/methods/isBatchEditing","title":"isBatchEditing","description":"현재 일괄 편집이 진행 중인지 확인합니다."},{"path":"/ko/docs/methods/stageBatchCell","title":"stageBatchCell","description":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다."},{"path":"/ko/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다."},{"path":"/ko/docs/methods/cancelBatchEdit","title":"cancelBatchEdit","description":"대기 중인 일괄 편집을 취소하고 취소한 항목 수를 반환합니다."},{"path":"/ko/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."},{"path":"/ko/docs/methods/startRowEdit","title":"startRowEdit","description":"지정한 행 ID의 전체 행 편집을 시작합니다."},{"path":"/ko/docs/methods/stopRowEdit","title":"stopRowEdit","description":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다."},{"path":"/ko/docs/methods/stageRowEditCell","title":"stageRowEditCell","description":"현재 편집 중인 행의 열에 대기 값을 설정합니다."},{"path":"/ko/docs/methods/getStateCaptureReport","title":"getStateCaptureReport","description":"최근 화면 상태 캡처에서 생략·문제가 있었는지 읽습니다. 저장된 상태의 완전성을 확인할 때 사용합니다."},{"path":"/ko/docs/methods/fillRange","title":"fillRange","description":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."},{"path":"/ko/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다."},{"path":"/ko/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다."},{"path":"/ko/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다."},{"path":"/ko/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."},{"path":"/ko/docs/methods/startRowDrag","title":"startRowDrag","description":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."},{"path":"/ko/docs/methods/getRowDragSession","title":"getRowDragSession","description":"현재 행 드래그 세션의 진행 상태를 읽습니다."},{"path":"/ko/docs/methods/registerDropZone","title":"registerDropZone","description":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."},{"path":"/ko/docs/methods/unregisterDropZone","title":"unregisterDropZone","description":"등록한 드롭 영역을 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getDropZones","title":"getDropZones","description":"현재 드롭 영역 등록 상태를 읽습니다."},{"path":"/ko/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다."},{"path":"/ko/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."},{"path":"/ko/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다."},{"path":"/ko/docs/methods/reparentRows","title":"reparentRows","description":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."},{"path":"/ko/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."},{"path":"/ko/docs/methods/setPinnedRows","title":"setPinnedRows","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."},{"path":"/ko/docs/methods/getPinnedRows","title":"getPinnedRows","description":"현재 고정 행 데이터를 보고서로 읽습니다."},{"path":"/ko/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"지정한 고정 행의 세부 정보를 읽습니다."},{"path":"/ko/docs/methods/getRowSpan","title":"getRowSpan","description":"세로 병합 범위의 계산 결과를 읽습니다."},{"path":"/ko/docs/methods/getCellSpan","title":"getCellSpan","description":"특정 셀의 가로·세로 병합 정보를 읽습니다."},{"path":"/ko/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."},{"path":"/ko/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다."},{"path":"/ko/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다."},{"path":"/ko/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다."},{"path":"/ko/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다."},{"path":"/ko/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다."},{"path":"/ko/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다."},{"path":"/ko/docs/methods/refreshServerSide","title":"refreshServerSide","description":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."},{"path":"/ko/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."},{"path":"/ko/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."},{"path":"/ko/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다."},{"path":"/ko/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다."},{"path":"/ko/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다."},{"path":"/ko/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다."},{"path":"/ko/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다."},{"path":"/ko/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다."},{"path":"/ko/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요."},{"path":"/ko/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다."},{"path":"/ko/docs/methods/applySpillFormula","title":"applySpillFormula","description":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."},{"path":"/ko/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."},{"path":"/ko/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."},{"path":"/ko/docs/methods/getSpillReport","title":"getSpillReport","description":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다."},{"path":"/ko/docs/methods/createRangeChart","title":"createRangeChart","description":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."},{"path":"/ko/docs/methods/updateChart","title":"updateChart","description":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."},{"path":"/ko/docs/methods/destroyChart","title":"destroyChart","description":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다."},{"path":"/ko/docs/methods/getChartRefs","title":"getChartRefs","description":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다."},{"path":"/ko/docs/methods/syncCharts","title":"syncCharts","description":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."},{"path":"/ko/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."},{"path":"/ko/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."},{"path":"/ko/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다."},{"path":"/ko/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다."},{"path":"/ko/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다."},{"path":"/ko/docs/methods/getChartModels","title":"getChartModels","description":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다."},{"path":"/ko/docs/methods/restoreChartModels","title":"restoreChartModels","description":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다."},{"path":"/ko/docs/methods/exportChartImage","title":"exportChartImage","description":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."},{"path":"/ko/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."},{"path":"/ko/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다."},{"path":"/ko/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다."},{"path":"/ko/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다."},{"path":"/ko/docs/methods/setHoveredRow","title":"setHoveredRow","description":"상태형 hover의 대상 행을 지정합니다. 실제 행 선택을 바꾸는 API는 아닙니다."},{"path":"/ko/docs/methods/getHoveredRowId","title":"getHoveredRowId","description":"현재 hover 행의 ID 또는 null을 읽습니다."},{"path":"/ko/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다."},{"path":"/ko/docs/methods/commitActiveEdit","title":"commitActiveEdit","description":"현재 셀 편집을 확정하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/cancelActiveEdit","title":"cancelActiveEdit","description":"현재 셀 편집을 취소하고 실행 여부를 반환합니다."},{"path":"/ko/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다."},{"path":"/ko/docs/methods/listRegisteredCellRenderers","title":"listRegisteredCellRenderers","description":"사용 가능한 등록 셀 렌더러 이름 목록을 읽습니다."},{"path":"/ko/docs/methods/unregisterCellRenderer","title":"unregisterCellRenderer","description":"이름으로 등록한 셀 렌더러를 해제합니다."},{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},{"path":"/ko/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."},{"path":"/ko/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."},{"path":"/ko/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다."},{"path":"/ko/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다."},{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."},{"path":"/ko/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."},{"path":"/ko/docs/methods/getColumnFilterModel","title":"getColumnFilterModel","description":"한 열의 현재 필터 모델을 읽습니다."},{"path":"/ko/docs/methods/setColumnFilterModel","title":"setColumnFilterModel","description":"한 열의 필터 모델을 설정하고 결과를 반환합니다. 전체 필터 상태를 바꾸는 setFilterModel과 구분합니다."},{"path":"/ko/docs/methods/onFilterChanged","title":"onFilterChanged","description":"필터 조건이 변경되었음을 알려 현재 행 필터 결과를 다시 계산하게 합니다."},{"path":"/ko/docs/methods/refreshExternalFilter","title":"refreshExternalFilter","description":"외부 필터의 갱신 수명 주기를 실행하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/destroyColumnFilter","title":"destroyColumnFilter","description":"특정 열의 필터 인스턴스를 해제합니다."},{"path":"/ko/docs/methods/recreateColumnFilter","title":"recreateColumnFilter","description":"특정 열의 필터 인스턴스를 다시 생성합니다."},{"path":"/ko/docs/methods/setPivotColumns","title":"setPivotColumns","description":"검증된 변경 경로로 피벗 열 축을 교체하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/setValueColumns","title":"setValueColumns","description":"검증된 변경 경로로 피벗 값 축을 교체하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/setConditionFilter","title":"setConditionFilter","description":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다."},{"path":"/ko/docs/methods/getConditionFilter","title":"getConditionFilter","description":"현재 고급 조건 트리 또는 null을 읽습니다."},{"path":"/ko/docs/methods/setConditionPresets","title":"setConditionPresets","description":"이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다."},{"path":"/ko/docs/methods/getConditionPresets","title":"getConditionPresets","description":"저장된 고급 조건 프리셋 목록을 읽습니다."},{"path":"/ko/docs/methods/openToolPanel","title":"openToolPanel","description":"ID로 열·필터 도구 패널을 열고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/closeToolPanel","title":"closeToolPanel","description":"현재 열린 열·필터 도구 패널을 닫습니다. 적용 중인 설정은 지우지 않습니다."},{"path":"/ko/docs/methods/getOpenedToolPanel","title":"getOpenedToolPanel","description":"현재 열린 도구 패널 ID 또는 null을 읽습니다."}]}]}]},{"path":"/ko/docs/methods/getAuditLog","kind":"method","title":"getAuditLog","summary":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다.","member":{"name":"getAuditLog","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<AuditEntry[]>","description":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getAuditLog(filter?: AuditLogFilter): Promise<AuditEntry[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["filter","선택","AuditLogFilter"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<AuditEntry[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getAuditLog(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/clearAuditLog","kind":"method","title":"clearAuditLog","summary":"보관 중인 감사 기록을 지웁니다. 기록 순번은 계속 증가하며 재사용되지 않습니다.","member":{"name":"clearAuditLog","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"보관 중인 감사 기록을 지웁니다. 기록 순번은 계속 증가하며 재사용되지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"보관 중인 감사 기록을 지웁니다. 기록 순번은 계속 증가하며 재사용되지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clearAuditLog(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.clearAuditLog(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/getAuditLogAsCsv","kind":"method","title":"getAuditLogAsCsv","summary":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다.","member":{"name":"getAuditLogAsCsv","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<string>","description":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getAuditLogAsCsv(filter?: AuditLogFilter): Promise<string>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["filter","선택","AuditLogFilter"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<string>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getAuditLogAsCsv(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/getAuditLogAsJson","kind":"method","title":"getAuditLogAsJson","summary":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다.","member":{"name":"getAuditLogAsJson","typeParameters":[],"parameters":[{"name":"filter","type":"AuditLogFilter","optional":true},{"name":"pretty","type":"boolean","optional":true}],"returns":"Promise<string>","description":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getAuditLogAsJson(filter?: AuditLogFilter, pretty?: boolean): Promise<string>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["filter","선택","AuditLogFilter"],["pretty","선택","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<string>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getAuditLogAsJson(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/exportAuditLogAsCsv","kind":"method","title":"exportAuditLogAsCsv","summary":"선택한 감사 기록을 CSV 파일로 내려받습니다.","member":{"name":"exportAuditLogAsCsv","typeParameters":[],"parameters":[{"name":"fileName","type":"string","optional":true},{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<void>","description":"선택한 감사 기록을 CSV 파일로 내려받습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"선택한 감사 기록을 CSV 파일로 내려받습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportAuditLogAsCsv(fileName?: string, filter?: AuditLogFilter): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["fileName","선택","string"],["filter","선택","AuditLogFilter"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportAuditLogAsCsv(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/exportAuditLogAsJson","kind":"method","title":"exportAuditLogAsJson","summary":"선택한 감사 기록을 JSON 파일로 내려받습니다.","member":{"name":"exportAuditLogAsJson","typeParameters":[],"parameters":[{"name":"fileName","type":"string","optional":true},{"name":"filter","type":"AuditLogFilter","optional":true}],"returns":"Promise<void>","description":"선택한 감사 기록을 JSON 파일로 내려받습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"선택한 감사 기록을 JSON 파일로 내려받습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportAuditLogAsJson(fileName?: string, filter?: AuditLogFilter): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["fileName","선택","string"],["filter","선택","AuditLogFilter"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportAuditLogAsJson(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/methods/openCellCommentPanel","kind":"method","title":"openCellCommentPanel","summary":"행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다.","member":{"name":"openCellCommentPanel","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<void>","description":"행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 ID와 필드로 지정한 협업 댓글 패널을 엽니다. 독립 셀 메모 어댑터와는 다른 댓글 기능입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"openCellCommentPanel(rowId: string | number, field: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["field","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.openCellCommentPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/closeCellCommentPanel","kind":"method","title":"closeCellCommentPanel","summary":"열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다.","member":{"name":"closeCellCommentPanel","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열린 협업 댓글 패널을 닫습니다. 댓글 데이터 자체를 삭제하지 않습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"closeCellCommentPanel(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.closeCellCommentPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getApi","kind":"method","title":"getApi","summary":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요.","member":{"name":"getApi","typeParameters":["TData = GridData","TContext = unknown","TValue = unknown","TFilterModel = unknown"],"parameters":[],"returns":"Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>","description":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getApi<TData = GridData, TContext = unknown, TValue = unknown, TFilterModel = unknown>(): Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridApi<TData, TContext, TValue, TFilterModel>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getApi(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getColumn","kind":"method","title":"getColumn","summary":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다.","member":{"name":"getColumn","typeParameters":["TValue = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<GridColumnRef<GridData, TValue, unknown> | null>","description":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumn<TValue = unknown>(columnId: string): Promise<GridColumnRef<GridData, TValue, unknown> | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridColumnRef<GridData, TValue, unknown> | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumn(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-api","title":"실시간 열 API","description":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다."}]}]}]},{"path":"/ko/docs/methods/getColumns","kind":"method","title":"getColumns","summary":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다.","member":{"name":"getColumns","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>","description":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumns(): Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ReadonlyArray<GridColumnRef<GridData, unknown, unknown>>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-api","title":"실시간 열 API","description":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다."}]}]}]},{"path":"/ko/docs/methods/getColumnGroup","kind":"method","title":"getColumnGroup","summary":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다.","member":{"name":"getColumnGroup","typeParameters":[],"parameters":[{"name":"groupId","type":"string","optional":false}],"returns":"Promise<GridColumnGroupRef<GridData, unknown> | null>","description":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnGroup(groupId: string): Promise<GridColumnGroupRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["groupId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridColumnGroupRef<GridData, unknown> | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnGroup(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-api","title":"실시간 열 API","description":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다."}]}]}]},{"path":"/ko/docs/methods/getColumnGroups","kind":"method","title":"getColumnGroups","summary":"현재 열 그룹 객체 목록을 읽습니다.","member":{"name":"getColumnGroups","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>","description":"현재 열 그룹 객체 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 그룹 객체 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnGroups(): Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ReadonlyArray<GridColumnGroupRef<GridData, unknown>>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnGroups(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-api","title":"실시간 열 API","description":"실시간 열 객체는 현재 Grid와 연결된 참조입니다. 저장 가능한 열 상태 배열과 목적이 다릅니다. 특정 열을 조작하는 앱 UI에는 참조가 유용하고 사용자 설정 저장에는 상태 배열이 적합합니다."}]}]}]},{"path":"/ko/docs/methods/getRow","kind":"method","title":"getRow","summary":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다.","member":{"name":"getRow","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false}],"returns":"Promise<GridRowRef<GridData, unknown> | null>","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRow(rowId: GridRowId): Promise<GridRowRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridRowRef<GridData, unknown> | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getRow(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getDisplayedRowAtIndex","kind":"method","title":"getDisplayedRowAtIndex","summary":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다.","member":{"name":"getDisplayedRowAtIndex","typeParameters":[],"parameters":[{"name":"index","type":"number","optional":false}],"returns":"Promise<GridRowRef<GridData, unknown> | null>","description":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDisplayedRowAtIndex(index: number): Promise<GridRowRef<GridData, unknown> | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["index","필수","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridRowRef<GridData, unknown> | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDisplayedRowAtIndex(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/forEachRow","kind":"method","title":"forEachRow","summary":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다.","member":{"name":"forEachRow","typeParameters":[],"parameters":[{"name":"callback","type":"(row: GridRowRef<GridData, unknown>) => void","optional":false}],"returns":"Promise<void>","description":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"forEachRow(callback: (row: GridRowRef<GridData, unknown>) => void): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["callback","필수","(row: GridRowRef<GridData, unknown>) => void"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.forEachRow(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/forEachDisplayedRow","kind":"method","title":"forEachDisplayedRow","summary":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다.","member":{"name":"forEachDisplayedRow","typeParameters":[],"parameters":[{"name":"callback","type":"(row: GridRowRef<GridData, unknown>) => void","optional":false}],"returns":"Promise<void>","description":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"forEachDisplayedRow(callback: (row: GridRowRef<GridData, unknown>) => void): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["callback","필수","(row: GridRowRef<GridData, unknown>) => void"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.forEachDisplayedRow(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getWorkbookBinding","kind":"method","title":"getWorkbookBinding","summary":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다.","member":{"name":"getWorkbookBinding","typeParameters":[],"parameters":[],"returns":"Promise<GridWorkbookBinding | null>","description":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getWorkbookBinding(): Promise<GridWorkbookBinding | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridWorkbookBinding | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getWorkbookBinding(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/reconnectWorkbook","kind":"method","title":"reconnectWorkbook","summary":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다.","member":{"name":"reconnectWorkbook","typeParameters":[],"parameters":[],"returns":"Promise<GridWorkbookBinding | null>","description":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"reconnectWorkbook(): Promise<GridWorkbookBinding | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridWorkbookBinding | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.reconnectWorkbook(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/disconnectWorkbook","kind":"method","title":"disconnectWorkbook","summary":"워크북 연결을 해제합니다. 다른 시트와 수식 값을 전파하는 흐름에 미치는 영향을 확인하세요.","member":{"name":"disconnectWorkbook","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"워크북 연결을 해제합니다. 다른 시트와 수식 값을 전파하는 흐름에 미치는 영향을 확인하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"워크북 연결을 해제합니다. 다른 시트와 수식 값을 전파하는 흐름에 미치는 영향을 확인하세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"disconnectWorkbook(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.disconnectWorkbook(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/sortBy","kind":"method","title":"sortBy","summary":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다.","member":{"name":"sortBy","typeParameters":[],"parameters":[{"name":"column","type":"string","optional":false},{"name":"direction","type":"GridSortDirection | null","optional":true}],"returns":"Promise<void>","description":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sortBy(column: string, direction?: GridSortDirection | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["column","필수","string"],["direction","선택","GridSortDirection | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.sortBy(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSortDirection","title":"GridSortDirection","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/methods/setSortModel","kind":"method","title":"setSortModel","summary":"정렬 기준 목록과 우선순위를 한 번에 교체합니다. 빈 배열로 전체 정렬을 해제합니다.","member":{"name":"setSortModel","typeParameters":[],"parameters":[{"name":"model","type":"ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>","optional":false}],"returns":"Promise<void>","description":"정렬 기준 목록과 우선순위를 한 번에 교체합니다. 빈 배열로 전체 정렬을 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"정렬 기준 목록과 우선순위를 한 번에 교체합니다. 빈 배열로 전체 정렬을 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setSortModel(model: ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["model","필수","ReadonlyArray<{ field: string; direction: 'asc' | 'desc' }>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setSortModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/methods/getSortModel","kind":"method","title":"getSortModel","summary":"현재 정렬 열·방향·우선순위 목록을 읽습니다.","member":{"name":"getSortModel","typeParameters":[],"parameters":[],"returns":"Promise<SortModelEntry[]>","description":"현재 정렬 열·방향·우선순위 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 정렬 열·방향·우선순위 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getSortModel(): Promise<SortModelEntry[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SortModelEntry[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getSortModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SortModelEntry","title":"SortModelEntry","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/methods/setQuery","kind":"method","title":"setQuery","summary":"처리 엔진에 적용할 조회 조건을 전달합니다. GridQuery 계약과 현재 행 모델의 지원 범위를 확인하세요.","member":{"name":"setQuery","typeParameters":[],"parameters":[{"name":"query","type":"string","optional":false}],"returns":"Promise<void>","description":"처리 엔진에 적용할 조회 조건을 전달합니다. GridQuery 계약과 현재 행 모델의 지원 범위를 확인하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"처리 엔진에 적용할 조회 조건을 전달합니다. GridQuery 계약과 현재 행 모델의 지원 범위를 확인하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setQuery(query: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["query","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setQuery(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getActiveTier","kind":"method","title":"getActiveTier","summary":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다.","member":{"name":"getActiveTier","typeParameters":[],"parameters":[],"returns":"Promise<GridEngineTier>","description":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다."},{"kind":"paragraph","text":"현재 처리 엔진을 조회합니다. Standard JS 엔진은 Free이고 WASM 가속은 Pro입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getActiveTier(): Promise<GridEngineTier>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridEngineTier>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getActiveTier(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/wasm-acceleration","title":"처리 엔진 선택","description":"Pro 처리 엔진은 지원하는 정렬·필터·집계 작업에 가속 경로를 사용합니다. 브라우저·패키지·라이선스·현재 기능 조합에 따라 실제 실행 경로가 결정됩니다."}]}]}]},{"path":"/ko/docs/methods/registerAggFunc","kind":"method","title":"registerAggFunc","summary":"이름으로 사용자 집계 함수를 등록합니다. 같은 이름의 기존 함수를 덮어쓸 수 있으므로 고유한 이름을 사용하세요.","member":{"name":"registerAggFunc","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false},{"name":"fn","type":"(values: unknown[], rows: readonly unknown[]) => unknown","optional":false}],"returns":"Promise<void>","description":"이름으로 사용자 집계 함수를 등록합니다. 같은 이름의 기존 함수를 덮어쓸 수 있으므로 고유한 이름을 사용하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이름으로 사용자 집계 함수를 등록합니다. 같은 이름의 기존 함수를 덮어쓸 수 있으므로 고유한 이름을 사용하세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"registerAggFunc(name: string, fn: (values: unknown[], rows: readonly unknown[]) => unknown): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["name","필수","string"],["fn","필수","(values: unknown[], rows: readonly unknown[]) => unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.registerAggFunc(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/unregisterAggFunc","kind":"method","title":"unregisterAggFunc","summary":"등록한 사용자 집계 함수를 제거합니다. 사용 중인 열의 aggFunc 설정도 함께 정리합니다.","member":{"name":"unregisterAggFunc","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false}],"returns":"Promise<void>","description":"등록한 사용자 집계 함수를 제거합니다. 사용 중인 열의 aggFunc 설정도 함께 정리합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"등록한 사용자 집계 함수를 제거합니다. 사용 중인 열의 aggFunc 설정도 함께 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"unregisterAggFunc(name: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["name","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.unregisterAggFunc(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/getRegisteredAggFuncNames","kind":"method","title":"getRegisteredAggFuncNames","summary":"현재 등록된 집계 함수 이름을 확인합니다.","member":{"name":"getRegisteredAggFuncNames","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"현재 등록된 집계 함수 이름을 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 등록된 집계 함수 이름을 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRegisteredAggFuncNames(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<string[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getRegisteredAggFuncNames(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/setRowGroupExpanded","kind":"method","title":"setRowGroupExpanded","summary":"실제 그룹 키에 해당하는 행 그룹을 펼치거나 접습니다. 없는 그룹이나 이미 같은 상태이면 변경하지 않습니다.","member":{"name":"setRowGroupExpanded","typeParameters":[],"parameters":[{"name":"key","type":"string | null","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"실제 그룹 키에 해당하는 행 그룹을 펼치거나 접습니다. 없는 그룹이나 이미 같은 상태이면 변경하지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실제 그룹 키에 해당하는 행 그룹을 펼치거나 접습니다. 없는 그룹이나 이미 같은 상태이면 변경하지 않습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setRowGroupExpanded(key: string | null, expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["key","필수","string | null"],["expanded","필수","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setRowGroupExpanded(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/expandAllRowGroups","kind":"method","title":"expandAllRowGroups","summary":"현재 행 그룹을 모두 펼칩니다. 실제로 바뀐 그룹마다 토글 이벤트가 발생합니다.","member":{"name":"expandAllRowGroups","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 행 그룹을 모두 펼칩니다. 실제로 바뀐 그룹마다 토글 이벤트가 발생합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 행 그룹을 모두 펼칩니다. 실제로 바뀐 그룹마다 토글 이벤트가 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"expandAllRowGroups(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.expandAllRowGroups(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/collapseAllRowGroups","kind":"method","title":"collapseAllRowGroups","summary":"현재 데이터에서 접을 수 있는 행 그룹을 모두 접습니다.","member":{"name":"collapseAllRowGroups","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 데이터에서 접을 수 있는 행 그룹을 모두 접습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 데이터에서 접을 수 있는 행 그룹을 모두 접습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collapseAllRowGroups(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.collapseAllRowGroups(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/setTreeNodeExpanded","kind":"method","title":"setTreeNodeExpanded","summary":"경로로 지정한 트리 노드를 펼치거나 접습니다. 잎 노드나 존재하지 않는 경로는 펼칠 수 없습니다.","member":{"name":"setTreeNodeExpanded","typeParameters":[],"parameters":[{"name":"path","type":"readonly string[]","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"경로로 지정한 트리 노드를 펼치거나 접습니다. 잎 노드나 존재하지 않는 경로는 펼칠 수 없습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"경로로 지정한 트리 노드를 펼치거나 접습니다. 잎 노드나 존재하지 않는 경로는 펼칠 수 없습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setTreeNodeExpanded(path: readonly string[], expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["path","필수","readonly string[]"],["expanded","필수","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setTreeNodeExpanded(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/methods/expandAllTreeNodes","kind":"method","title":"expandAllTreeNodes","summary":"현재 트리의 접을 수 있는 노드를 모두 펼칩니다.","member":{"name":"expandAllTreeNodes","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 트리의 접을 수 있는 노드를 모두 펼칩니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 트리의 접을 수 있는 노드를 모두 펼칩니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"expandAllTreeNodes(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.expandAllTreeNodes(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/methods/collapseAllTreeNodes","kind":"method","title":"collapseAllTreeNodes","summary":"현재 트리의 가지 노드를 모두 접습니다.","member":{"name":"collapseAllTreeNodes","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 트리의 가지 노드를 모두 접습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 트리의 가지 노드를 모두 접습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collapseAllTreeNodes(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.collapseAllTreeNodes(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/methods/setDetailRowExpanded","kind":"method","title":"setDetailRowExpanded","summary":"안정적인 부모 행 ID로 상세 패널을 펼치거나 접습니다.","member":{"name":"setDetailRowExpanded","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"expanded","type":"boolean","optional":false}],"returns":"Promise<void>","description":"안정적인 부모 행 ID로 상세 패널을 펼치거나 접습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"안정적인 부모 행 ID로 상세 패널을 펼치거나 접습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setDetailRowExpanded(rowId: string | number, expanded: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["expanded","필수","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setDetailRowExpanded(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/methods/expandAllDetailRows","kind":"method","title":"expandAllDetailRows","summary":"현재 필터를 통과한 전체 페이지의 상세 행을 펼칩니다. 지연 조회를 사용하는 경우 요청량을 고려하세요.","member":{"name":"expandAllDetailRows","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 필터를 통과한 전체 페이지의 상세 행을 펼칩니다. 지연 조회를 사용하는 경우 요청량을 고려하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 필터를 통과한 전체 페이지의 상세 행을 펼칩니다. 지연 조회를 사용하는 경우 요청량을 고려하세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"expandAllDetailRows(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.expandAllDetailRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/methods/collapseAllDetailRows","kind":"method","title":"collapseAllDetailRows","summary":"열린 상세 행을 모두 접고 해당 패널의 자원을 정리합니다.","member":{"name":"collapseAllDetailRows","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"열린 상세 행을 모두 접고 해당 패널의 자원을 정리합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열린 상세 행을 모두 접고 해당 패널의 자원을 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collapseAllDetailRows(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.collapseAllDetailRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/methods/setColumnGroupOpened","kind":"method","title":"setColumnGroupOpened","summary":"지정한 열 그룹 머리글을 펼치거나 접습니다.","member":{"name":"setColumnGroupOpened","typeParameters":[],"parameters":[{"name":"groupId","type":"string","optional":false},{"name":"open","type":"boolean","optional":false}],"returns":"Promise<void>","description":"지정한 열 그룹 머리글을 펼치거나 접습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 열 그룹 머리글을 펼치거나 접습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setColumnGroupOpened(groupId: string, open: boolean): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["groupId","필수","string"],["open","필수","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setColumnGroupOpened(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-groups","title":"다단 헤더","description":"다단 헤더는 관련 열을 하나의 상위 제목 아래 배치합니다. 행을 묶는 그룹화와 달리 데이터 개수나 집계값은 바뀌지 않습니다."}]}]}]},{"path":"/ko/docs/methods/getValidationErrors","kind":"method","title":"getValidationErrors","summary":"현재 입력 검증 오류의 대상 행·필드·값·메시지를 읽습니다. 저장 안내나 오류 목록에 연결합니다.","member":{"name":"getValidationErrors","typeParameters":[],"parameters":[],"returns":"Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >","description":"현재 입력 검증 오류의 대상 행·필드·값·메시지를 읽습니다. 저장 안내나 오류 목록에 연결합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 입력 검증 오류의 대상 행·필드·값·메시지를 읽습니다. 저장 안내나 오류 목록에 연결합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getValidationErrors(): Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<\n    Array<{ rowIndex: number; rowId: unknown; field: string; value: unknown; message: string }>\n  >`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getValidationErrors(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/validation-rules","title":"데이터 검증","description":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다."}]}]}]},{"path":"/ko/docs/methods/captureSnapshot","kind":"method","title":"captureSnapshot","summary":"현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다.","member":{"name":"captureSnapshot","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":true}],"returns":"Promise<string>","description":"현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 원본 데이터의 이름 있는 스냅샷을 만들고 ID를 반환합니다. 화면 열 배치 저장과는 다릅니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"captureSnapshot(name?: string): Promise<string>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["name","선택","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<string>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.captureSnapshot(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/listSnapshots","kind":"method","title":"listSnapshots","summary":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다.","member":{"name":"listSnapshots","typeParameters":[],"parameters":[],"returns":"Promise<SnapshotMeta[]>","description":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"listSnapshots(): Promise<SnapshotMeta[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SnapshotMeta[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.listSnapshots(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/deleteSnapshot","kind":"method","title":"deleteSnapshot","summary":"지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다.","member":{"name":"deleteSnapshot","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 데이터 스냅샷을 삭제하고 성공 여부를 반환합니다. 현재 데이터는 변경하지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"deleteSnapshot(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["id","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.deleteSnapshot(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/diffSnapshots","kind":"method","title":"diffSnapshots","summary":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다.","member":{"name":"diffSnapshots","typeParameters":[],"parameters":[{"name":"idA","type":"string","optional":false},{"name":"idB","type":"string","optional":true}],"returns":"Promise<SnapshotDiff<GridRow>>","description":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"diffSnapshots(idA: string, idB?: string): Promise<SnapshotDiff<GridRow>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["idA","필수","string"],["idB","선택","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SnapshotDiff<GridRow>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.diffSnapshots(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/restoreSnapshot","kind":"method","title":"restoreSnapshot","summary":"스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다.","member":{"name":"restoreSnapshot","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"스냅샷의 원본 데이터로 복원합니다. 서버 저장이나 화면 상태 복원까지 자동 수행하지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"restoreSnapshot(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["id","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.restoreSnapshot(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/getCellRanges","kind":"method","title":"getCellRanges","summary":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요.","member":{"name":"getCellRanges","typeParameters":[],"parameters":[],"returns":"Promise<CellRangeBounds[]>","description":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellRanges(): Promise<CellRangeBounds[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<CellRangeBounds[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellRanges(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/methods/copyRangeToClipboard","kind":"method","title":"copyRangeToClipboard","summary":"현재 선택 범위를 클립보드에 복사하고 성공 여부를 반환합니다. 브라우저 권한과 사용자 동작 조건을 확인합니다.","member":{"name":"copyRangeToClipboard","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"현재 선택 범위를 클립보드에 복사하고 성공 여부를 반환합니다. 브라우저 권한과 사용자 동작 조건을 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 선택 범위를 클립보드에 복사하고 성공 여부를 반환합니다. 브라우저 권한과 사용자 동작 조건을 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Range copy / paste"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"copyRangeToClipboard(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.copyRangeToClipboard(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-clipboard","title":"범위 복사와 붙여넣기","description":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다."}]}]}]},{"path":"/ko/docs/methods/pasteFromClipboard","kind":"method","title":"pasteFromClipboard","summary":"클립보드 내용을 현재 대상에 붙여넣습니다. 결과 이벤트에서 적용·건너뛴 셀을 확인합니다.","member":{"name":"pasteFromClipboard","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"클립보드 내용을 현재 대상에 붙여넣습니다. 결과 이벤트에서 적용·건너뛴 셀을 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"클립보드 내용을 현재 대상에 붙여넣습니다. 결과 이벤트에서 적용·건너뛴 셀을 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Range copy / paste"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pasteFromClipboard(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.pasteFromClipboard(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-clipboard","title":"범위 복사와 붙여넣기","description":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다."}]}]}]},{"path":"/ko/docs/methods/clearCellRanges","kind":"method","title":"clearCellRanges","summary":"셀 선택 범위를 모두 지웁니다. 행 선택은 별도 상태입니다.","member":{"name":"clearCellRanges","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"셀 선택 범위를 모두 지웁니다. 행 선택은 별도 상태입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 선택 범위를 모두 지웁니다. 행 선택은 별도 상태입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clearCellRanges(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.clearCellRanges(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/methods/refreshInfiniteCache","kind":"method","title":"refreshInfiniteCache","summary":"무한 행 모델의 캐시를 새로 조회합니다. 변경된 서버 조건과 데이터 공급자를 먼저 준비합니다.","member":{"name":"refreshInfiniteCache","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"무한 행 모델의 캐시를 새로 조회합니다. 변경된 서버 조건과 데이터 공급자를 먼저 준비합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"무한 행 모델의 캐시를 새로 조회합니다. 변경된 서버 조건과 데이터 공급자를 먼저 준비합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"refreshInfiniteCache(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.refreshInfiniteCache(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/infinite-row-model","title":"필요한 블록만 요청","description":"한 번에 모든 주문을 내려받기 어려울 때 스크롤에 필요한 구간만 요청합니다. datasource는 시작·끝 행과 검색 조건을 받아 데이터를 공급하는 연결 객체입니다."}]}]}]},{"path":"/ko/docs/methods/refreshRowHeights","kind":"method","title":"refreshRowHeights","summary":"행 높이를 다시 계산합니다. 내용이나 높이 콜백의 기준이 바뀐 뒤 사용합니다.","member":{"name":"refreshRowHeights","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"행 높이를 다시 계산합니다. 내용이나 높이 콜백의 기준이 바뀐 뒤 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 높이를 다시 계산합니다. 내용이나 높이 콜백의 기준이 바뀐 뒤 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"refreshRowHeights(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.refreshRowHeights(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/methods/scrollToTop","kind":"method","title":"scrollToTop","summary":"Grid 스크롤을 맨 위로 이동합니다.","member":{"name":"scrollToTop","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"Grid 스크롤을 맨 위로 이동합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 스크롤을 맨 위로 이동합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"scrollToTop(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.scrollToTop(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/virtualization","title":"대량 데이터","description":"가상화는 전체 데이터 중 화면 주변에 필요한 행·열 DOM만 렌더링합니다. 데이터 자체를 서버에서 일부만 가져오는 행 모델과는 다른 성능 기능입니다."}]}]}]},{"path":"/ko/docs/methods/selectRows","kind":"method","title":"selectRows","summary":"지정한 행 ID의 선택 상태를 설정합니다. 현재 표시 인덱스가 아닌 안정적인 ID를 사용합니다.","member":{"name":"selectRows","typeParameters":[],"parameters":[{"name":"ids","type":"Array<string | number>","optional":false}],"returns":"Promise<void>","description":"지정한 행 ID의 선택 상태를 설정합니다. 현재 표시 인덱스가 아닌 안정적인 ID를 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 행 ID의 선택 상태를 설정합니다. 현재 표시 인덱스가 아닌 안정적인 ID를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"selectRows(ids: Array<string | number>): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["ids","필수","Array<string | number>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.selectRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getSelectedRowIds","kind":"method","title":"getSelectedRowIds","summary":"현재 선택한 행 ID 목록을 읽습니다. 서버 전체 선택은 전용 서버 선택 상태 API를 사용합니다.","member":{"name":"getSelectedRowIds","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<string | number>>","description":"현재 선택한 행 ID 목록을 읽습니다. 서버 전체 선택은 전용 서버 선택 상태 API를 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 선택한 행 ID 목록을 읽습니다. 서버 전체 선택은 전용 서버 선택 상태 API를 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getSelectedRowIds(): Promise<ReadonlyArray<string | number>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ReadonlyArray<string | number>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getSelectedRowIds(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/methods/applyTransaction","kind":"method","title":"applyTransaction","summary":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다.","member":{"name":"applyTransaction","typeParameters":[],"parameters":[{"name":"transaction","type":"RowDataTransaction<GridRow>","optional":false},{"name":"label","type":"string","optional":true},{"name":"opts","type":"{ source?: GridEditSource; origin?: unknown }","optional":true}],"returns":"Promise<ApplyRowTransactionResult<GridRow>>","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applyTransaction(transaction: RowDataTransaction<GridRow>, label?: string, opts?: { source?: GridEditSource; origin?: unknown }): Promise<ApplyRowTransactionResult<GridRow>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["transaction","필수","RowDataTransaction<GridRow>"],["label","선택","string"],["opts","선택","{ source?: GridEditSource; origin?: unknown }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<ApplyRowTransactionResult<GridRow>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applyTransaction(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RowDataTransaction","title":"RowDataTransaction","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/GridEditSource","title":"GridEditSource","description":""},{"path":"/ko/docs/types/ApplyRowTransactionResult","title":"ApplyRowTransactionResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/methods/undo","kind":"method","title":"undo","summary":"이전 편집 이력 한 단계를 되돌리고 실행 여부를 반환합니다.","member":{"name":"undo","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"이전 편집 이력 한 단계를 되돌리고 실행 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이전 편집 이력 한 단계를 되돌리고 실행 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"undo(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.undo(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."}]}]}]},{"path":"/ko/docs/methods/redo","kind":"method","title":"redo","summary":"실행 취소한 이력 한 단계를 다시 적용하고 실행 여부를 반환합니다.","member":{"name":"redo","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"실행 취소한 이력 한 단계를 다시 적용하고 실행 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실행 취소한 이력 한 단계를 다시 적용하고 실행 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"redo(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.redo(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."}]}]}]},{"path":"/ko/docs/methods/clearHistory","kind":"method","title":"clearHistory","summary":"실행 취소·다시 실행 이력을 비웁니다. 현재 데이터 값을 초기값으로 바꾸지는 않습니다.","member":{"name":"clearHistory","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"실행 취소·다시 실행 이력을 비웁니다. 현재 데이터 값을 초기값으로 바꾸지는 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실행 취소·다시 실행 이력을 비웁니다. 현재 데이터 값을 초기값으로 바꾸지는 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clearHistory(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.clearHistory(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."}]}]}]},{"path":"/ko/docs/methods/connectCollabRoom","kind":"method","title":"connectCollabRoom","summary":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다.","member":{"name":"connectCollabRoom","typeParameters":[],"parameters":[{"name":"opts","type":"{ realtimeUrl?: string; userName?: string; userColor?: string; presence?: boolean; persistence?: 'none' | 'indexeddb' }","optional":true}],"returns":"Promise<GridSyncStatus>","description":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"connectCollabRoom(opts?: { realtimeUrl?: string; userName?: string; userColor?: string; presence?: boolean; persistence?: 'none' | 'indexeddb' }): Promise<GridSyncStatus>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["opts","선택","{ realtimeUrl?: string; userName?: string; userColor?: string; presence?: boolean; persistence?: 'none' | 'indexeddb' }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridSyncStatus>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.connectCollabRoom(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/preloadChunks","kind":"method","title":"preloadChunks","summary":"필요한 기능 코드를 미리 로드합니다. 기능 권한을 활성화하거나 데이터를 미리 조회하는 작업과는 다릅니다.","member":{"name":"preloadChunks","typeParameters":[],"parameters":[{"name":"ids","type":"GridChunkId[]","optional":false}],"returns":"Promise<void>","description":"필요한 기능 코드를 미리 로드합니다. 기능 권한을 활성화하거나 데이터를 미리 조회하는 작업과는 다릅니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"필요한 기능 코드를 미리 로드합니다. 기능 권한을 활성화하거나 데이터를 미리 조회하는 작업과는 다릅니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"preloadChunks(ids: GridChunkId[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["ids","필수","GridChunkId[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.preloadChunks(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkId","title":"GridChunkId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/methods/disconnectCollabRoom","kind":"method","title":"disconnectCollabRoom","summary":"현재 협업 방 연결을 해제합니다.","member":{"name":"disconnectCollabRoom","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 협업 방 연결을 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 협업 방 연결을 해제합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"disconnectCollabRoom(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.disconnectCollabRoom(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/getSyncStatus","kind":"method","title":"getSyncStatus","summary":"현재 협업 연결·동기화 상태를 읽습니다.","member":{"name":"getSyncStatus","typeParameters":[],"parameters":[],"returns":"Promise<GridSyncStatus>","description":"현재 협업 연결·동기화 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 협업 연결·동기화 상태를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getSyncStatus(): Promise<GridSyncStatus>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridSyncStatus>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getSyncStatus(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/getCollaborators","kind":"method","title":"getCollaborators","summary":"현재 협업 참가자 정보를 읽습니다.","member":{"name":"getCollaborators","typeParameters":[],"parameters":[],"returns":"Promise<GridCollaboratorInfo[]>","description":"현재 협업 참가자 정보를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 협업 참가자 정보를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCollaborators(): Promise<GridCollaboratorInfo[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridCollaboratorInfo[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCollaborators(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/addCellComment","kind":"method","title":"addCellComment","summary":"협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다.","member":{"name":"addCellComment","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false},{"name":"text","type":"string","optional":false},{"name":"parentId","type":"string","optional":true}],"returns":"Promise<string | null>","description":"협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 세션에서 셀 댓글을 추가하고 ID 또는 null을 반환합니다. 활성 세션이 필요합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"addCellComment(rowId: string | number, field: string, text: string, parentId?: string): Promise<string | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["field","필수","string"],["text","필수","string"],["parentId","선택","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<string | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.addCellComment(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getCellComments","kind":"method","title":"getCellComments","summary":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다.","member":{"name":"getCellComments","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<GridCellComment[]>","description":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellComments(rowId: string | number, field: string): Promise<GridCellComment[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["field","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridCellComment[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellComments(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/setCellCommentResolved","kind":"method","title":"setCellCommentResolved","summary":"지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다.","member":{"name":"setCellCommentResolved","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false},{"name":"commentId","type":"string","optional":false},{"name":"resolved","type":"boolean","optional":false}],"returns":"Promise<boolean>","description":"지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정 댓글의 해결 여부를 변경하고 성공 여부를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setCellCommentResolved(rowId: string | number, field: string, commentId: string, resolved: boolean): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["field","필수","string"],["commentId","필수","string"],["resolved","필수","boolean"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setCellCommentResolved(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/deleteCellComment","kind":"method","title":"deleteCellComment","summary":"지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다.","member":{"name":"deleteCellComment","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number","optional":false},{"name":"field","type":"string","optional":false},{"name":"commentId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 협업 댓글을 삭제하고 성공 여부를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"deleteCellComment(rowId: string | number, field: string, commentId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number"],["field","필수","string"],["commentId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.deleteCellComment(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getDataAsCsv","kind":"method","title":"getDataAsCsv","summary":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다.","member":{"name":"getDataAsCsv","typeParameters":[],"parameters":[{"name":"options","type":"Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>","optional":true}],"returns":"Promise<CsvExportResult>","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDataAsCsv(options?: Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>): Promise<CsvExportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","Omit<CsvExportOptions<GridRow>, 'columns' | 'rows'>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<CsvExportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDataAsCsv(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/CsvExportResult","title":"CsvExportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-export","title":"CSV 내보내기","description":"CSV 내보내기는 표 데이터를 다른 도구로 넘기기 쉬운 텍스트 파일로 만듭니다. 셀 색·열 너비·상세 패널 같은 화면 모양을 보존하는 형식은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/exportDataAsCsv","kind":"method","title":"exportDataAsCsv","summary":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다.","member":{"name":"exportDataAsCsv","typeParameters":[],"parameters":[{"name":"options","type":"Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>","optional":true}],"returns":"Promise<CsvExportResult>","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportDataAsCsv(options?: Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>): Promise<CsvExportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","Omit<CsvDownloadOptions<GridRow>, 'columns' | 'rows'>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<CsvExportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportDataAsCsv(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/CsvExportResult","title":"CsvExportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-export","title":"CSV 내보내기","description":"CSV 내보내기는 표 데이터를 다른 도구로 넘기기 쉬운 텍스트 파일로 만듭니다. 셀 색·열 너비·상세 패널 같은 화면 모양을 보존하는 형식은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/getDataAsExcel","kind":"method","title":"getDataAsExcel","summary":"XLSX 파일 내용을 Uint8Array 바이트로 생성합니다. 앱의 첨부·업로드 등에 사용할 수 있습니다.","member":{"name":"getDataAsExcel","typeParameters":[],"parameters":[{"name":"options","type":"{\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }","optional":true}],"returns":"Promise<Uint8Array>","description":"XLSX 파일 내용을 Uint8Array 바이트로 생성합니다. 앱의 첨부·업로드 등에 사용할 수 있습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"XLSX 파일 내용을 Uint8Array 바이트로 생성합니다. 앱의 첨부·업로드 등에 사용할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in Excel export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDataAsExcel(options?: {\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }): Promise<Uint8Array>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","{\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<Uint8Array>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDataAsExcel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/excel-export","title":"Excel 내보내기","description":"Excel 내보내기는 XLSX 바이트를 생성하거나 파일로 내려받습니다. CSV보다 시트 이름과 워크북 형식이 필요한 교환 작업에 적합하며 Pro 기능입니다."}]}]}]},{"path":"/ko/docs/methods/exportDataAsExcel","kind":"method","title":"exportDataAsExcel","summary":"지정한 시트명·열·선택 조건으로 XLSX 파일을 내려받습니다.","member":{"name":"exportDataAsExcel","typeParameters":[],"parameters":[{"name":"options","type":"{\n      fileName?: string;\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }","optional":true}],"returns":"Promise<void>","description":"지정한 시트명·열·선택 조건으로 XLSX 파일을 내려받습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 시트명·열·선택 조건으로 XLSX 파일을 내려받습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in Excel export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportDataAsExcel(options?: {\n      fileName?: string;\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","{\n      fileName?: string;\n      sheetName?: string;\n      onlySelected?: boolean;\n      columnKeys?: readonly string[];\n      skipHeaders?: boolean;\n    }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportDataAsExcel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/excel-export","title":"Excel 내보내기","description":"Excel 내보내기는 XLSX 바이트를 생성하거나 파일로 내려받습니다. CSV보다 시트 이름과 워크북 형식이 필요한 교환 작업에 적합하며 Pro 기능입니다."}]}]}]},{"path":"/ko/docs/methods/importCsvText","kind":"method","title":"importCsvText","summary":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요.","member":{"name":"importCsvText","typeParameters":[],"parameters":[{"name":"text","type":"string","optional":false},{"name":"options","type":"{ delimiter?: CsvDelimiter; hasHeader?: boolean }","optional":true}],"returns":"Promise<{ rowCount: number; columnCount: number }>","description":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"importCsvText(text: string, options?: { delimiter?: CsvDelimiter; hasHeader?: boolean }): Promise<{ rowCount: number; columnCount: number }>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["text","필수","string"],["options","선택","{ delimiter?: CsvDelimiter; hasHeader?: boolean }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<{ rowCount: number; columnCount: number }>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.importCsvText(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-import","title":"CSV 가져오기","description":"CSV 가져오기는 구분자로 나뉜 텍스트를 새 열과 행으로 바꿉니다. 기존 표에 일부 행을 추가하는 트랜잭션과 달리 importCsvText는 columnDefs와 rowData를 교체합니다."}]}]}]},{"path":"/ko/docs/methods/getDataAsPdf","kind":"method","title":"getDataAsPdf","summary":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다.","member":{"name":"getDataAsPdf","typeParameters":[],"parameters":[{"name":"options","type":"SyGridPdfExportOptions","optional":true}],"returns":"Promise<PdfExportResult>","description":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in PDF export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDataAsPdf(options?: SyGridPdfExportOptions): Promise<PdfExportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","SyGridPdfExportOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<PdfExportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDataAsPdf(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""},{"path":"/ko/docs/types/PdfExportResult","title":"PdfExportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pdf-export","title":"PDF 내보내기","description":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다."}]}]}]},{"path":"/ko/docs/methods/exportDataAsPdf","kind":"method","title":"exportDataAsPdf","summary":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다.","member":{"name":"exportDataAsPdf","typeParameters":[],"parameters":[{"name":"options","type":"SyGridPdfDownloadOptions","optional":true}],"returns":"Promise<PdfExportResult>","description":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in PDF export"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportDataAsPdf(options?: SyGridPdfDownloadOptions): Promise<PdfExportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","SyGridPdfDownloadOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<PdfExportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportDataAsPdf(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/ko/docs/types/PdfExportResult","title":"PdfExportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pdf-export","title":"PDF 내보내기","description":"PDF 내보내기는 표를 공유 가능한 문서 형태로 고정합니다. 다른 앱에서 다시 계산하는 것이 목적이면 CSV·XLSX, 읽기와 배포가 목적이면 PDF를 선택합니다."}]}]}]},{"path":"/ko/docs/methods/importDataFromXlsx","kind":"method","title":"importDataFromXlsx","summary":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다.","member":{"name":"importDataFromXlsx","typeParameters":[],"parameters":[{"name":"source","type":"ArrayBuffer | Uint8Array","optional":false},{"name":"options","type":"{ sheetName?: string; snapshot?: SheetToRowDataOptions }","optional":true}],"returns":"Promise<XlsxImportResult>","description":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"importDataFromXlsx(source: ArrayBuffer | Uint8Array, options?: { sheetName?: string; snapshot?: SheetToRowDataOptions }): Promise<XlsxImportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["source","필수","ArrayBuffer | Uint8Array"],["options","선택","{ sheetName?: string; snapshot?: SheetToRowDataOptions }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<XlsxImportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.importDataFromXlsx(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""},{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/xlsx-import","title":"Excel 가져오기","description":"XLSX 가져오기는 파일을 워크북으로 읽고 선택한 시트를 Grid용 열·행 스냅샷으로 변환합니다. 워크북 전체 파싱 결과와 화면용 스냅샷은 다른 데이터입니다."}]}]}]},{"path":"/ko/docs/methods/getContextMenuItems","kind":"method","title":"getContextMenuItems","summary":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다.","member":{"name":"getContextMenuItems","typeParameters":[],"parameters":[{"name":"target","type":"{ rowIndex: number; field?: string }","optional":false}],"returns":"Promise<ContextMenuItem[]>","description":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in context menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getContextMenuItems(target: { rowIndex: number; field?: string }): Promise<ContextMenuItem[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["target","필수","{ rowIndex: number; field?: string }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<ContextMenuItem[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getContextMenuItems(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/context-menu","title":"셀 컨텍스트 메뉴","description":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다."}]}]}]},{"path":"/ko/docs/methods/copyCellAt","kind":"method","title":"copyCellAt","summary":"지정한 표시 행과 필드의 값을 복사하고 성공 여부를 반환합니다.","member":{"name":"copyCellAt","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false},{"name":"field","type":"string","optional":false}],"returns":"Promise<boolean>","description":"지정한 표시 행과 필드의 값을 복사하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 표시 행과 필드의 값을 복사하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"copyCellAt(rowIndex: number, field: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowIndex","필수","number"],["field","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.copyCellAt(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/single-cell-copy","title":"셀 복사","description":"셀 하나의 표시 텍스트를 시스템 클립보드로 복사합니다. 셀 안 편집기의 텍스트를 선택한 상태와 Grid 셀에 포커스가 있는 상태는 서로 다른 복사 대상입니다."}]}]}]},{"path":"/ko/docs/methods/copyRowAt","kind":"method","title":"copyRowAt","summary":"지정한 표시 행을 복사하고 성공 여부를 반환합니다.","member":{"name":"copyRowAt","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false}],"returns":"Promise<boolean>","description":"지정한 표시 행을 복사하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 표시 행을 복사하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"copyRowAt(rowIndex: number): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowIndex","필수","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.copyRowAt(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-copy","title":"행 복사","description":"한 행의 표시 열을 탭으로 구분해 복사합니다. 스프레드시트에 붙여 넣으면 각 열이 셀로 나뉘므로 한 주문의 여러 값을 옮길 때 유용합니다."}]}]}]},{"path":"/ko/docs/methods/getCellTooltipText","kind":"method","title":"getCellTooltipText","summary":"대상 셀과 오버플로 문맥을 바탕으로 실제 툴팁 문자열을 계산합니다.","member":{"name":"getCellTooltipText","typeParameters":[],"parameters":[{"name":"target","type":"{ rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }","optional":false}],"returns":"Promise<string>","description":"대상 셀과 오버플로 문맥을 바탕으로 실제 툴팁 문자열을 계산합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"대상 셀과 오버플로 문맥을 바탕으로 실제 툴팁 문자열을 계산합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellTooltipText(target: { rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }): Promise<string>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["target","필수","{ rowIndex: number; field: string; displayedText?: string; isOverflowing?: boolean }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<string>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellTooltipText(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tooltip","title":"셀 툴팁","description":"툴팁은 잘린 이름이나 긴 설명을 잠시 확인하는 보조 수단입니다. 사용자가 반드시 알아야 하는 오류나 중요한 안내는 툴팁 안에만 숨기지 않습니다."}]}]}]},{"path":"/ko/docs/methods/getUndoRedoDepth","kind":"method","title":"getUndoRedoDepth","summary":"실행 취소와 다시 실행으로 이동할 수 있는 이력 수를 읽습니다.","member":{"name":"getUndoRedoDepth","typeParameters":[],"parameters":[],"returns":"Promise<{ undo: number; redo: number }>","description":"실행 취소와 다시 실행으로 이동할 수 있는 이력 수를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실행 취소와 다시 실행으로 이동할 수 있는 이력 수를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getUndoRedoDepth(): Promise<{ undo: number; redo: number }>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<{ undo: number; redo: number }>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getUndoRedoDepth(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."}]}]}]},{"path":"/ko/docs/methods/setColumnWidth","kind":"method","title":"setColumnWidth","summary":"현재 열 너비를 지정합니다. 열의 최소·최대 너비 제한을 함께 확인합니다.","member":{"name":"setColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false},{"name":"width","type":"number","optional":false}],"returns":"Promise<void>","description":"현재 열 너비를 지정합니다. 열의 최소·최대 너비 제한을 함께 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 너비를 지정합니다. 열의 최소·최대 너비 제한을 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setColumnWidth(colId: string, width: number): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"],["width","필수","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setColumnWidth(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/resetColumnWidth","kind":"method","title":"resetColumnWidth","summary":"지정한 열의 사용자 너비 변경을 초기 설정으로 되돌립니다.","member":{"name":"resetColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"지정한 열의 사용자 너비 변경을 초기 설정으로 되돌립니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 열의 사용자 너비 변경을 초기 설정으로 되돌립니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"resetColumnWidth(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.resetColumnWidth(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getColumnWidth","kind":"method","title":"getColumnWidth","summary":"현재 열 너비를 읽습니다. 대상 열이 없으면 null입니다.","member":{"name":"getColumnWidth","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<number | null>","description":"현재 열 너비를 읽습니다. 대상 열이 없으면 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 너비를 읽습니다. 대상 열이 없으면 null입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnWidth(colId: string): Promise<number | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<number | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnWidth(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/setColumnPinned","kind":"method","title":"setColumnPinned","summary":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다.","member":{"name":"setColumnPinned","typeParameters":[],"parameters":[{"name":"field","type":"string","optional":false},{"name":"side","type":"ColumnPinSide | null","optional":false}],"returns":"Promise<void>","description":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setColumnPinned(field: string, side: ColumnPinSide | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["field","필수","string"],["side","필수","ColumnPinSide | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setColumnPinned(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getColumnPinned","kind":"method","title":"getColumnPinned","summary":"현재 열 고정 방향을 읽습니다.","member":{"name":"getColumnPinned","typeParameters":[],"parameters":[{"name":"field","type":"string","optional":false}],"returns":"Promise<ColumnPinSide | null>","description":"현재 열 고정 방향을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 고정 방향을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnPinned(field: string): Promise<ColumnPinSide | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["field","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<ColumnPinSide | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnPinned(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/setColumnOrder","kind":"method","title":"setColumnOrder","summary":"열 ID 목록으로 표시 순서를 지정합니다.","member":{"name":"setColumnOrder","typeParameters":[],"parameters":[{"name":"orderedColIds","type":"string[]","optional":false}],"returns":"Promise<void>","description":"열 ID 목록으로 표시 순서를 지정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 ID 목록으로 표시 순서를 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setColumnOrder(orderedColIds: string[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["orderedColIds","필수","string[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setColumnOrder(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getColumnOrder","kind":"method","title":"getColumnOrder","summary":"현재 열 표시 순서의 ID 목록을 읽습니다.","member":{"name":"getColumnOrder","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"현재 열 표시 순서의 ID 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열 표시 순서의 ID 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnOrder(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<string[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnOrder(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/hideColumn","kind":"method","title":"hideColumn","summary":"지정한 열을 숨깁니다. 원본 데이터를 삭제하거나 읽기 권한을 차단하지 않습니다.","member":{"name":"hideColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"지정한 열을 숨깁니다. 원본 데이터를 삭제하거나 읽기 권한을 차단하지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 열을 숨깁니다. 원본 데이터를 삭제하거나 읽기 권한을 차단하지 않습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"hideColumn(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.hideColumn(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/showColumn","kind":"method","title":"showColumn","summary":"숨겨진 열을 표시합니다.","member":{"name":"showColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<void>","description":"숨겨진 열을 표시합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숨겨진 열을 표시합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"showColumn(colId: string): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.showColumn(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/toggleColumnVisibility","kind":"method","title":"toggleColumnVisibility","summary":"열 표시 여부를 반전하고 결과 상태를 반환합니다.","member":{"name":"toggleColumnVisibility","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"열 표시 여부를 반전하고 결과 상태를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 표시 여부를 반전하고 결과 상태를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"toggleColumnVisibility(colId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.toggleColumnVisibility(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/setHiddenColumns","kind":"method","title":"setHiddenColumns","summary":"숨길 열 목록을 한 번에 지정합니다.","member":{"name":"setHiddenColumns","typeParameters":[],"parameters":[{"name":"colIds","type":"string[]","optional":false}],"returns":"Promise<void>","description":"숨길 열 목록을 한 번에 지정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"숨길 열 목록을 한 번에 지정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setHiddenColumns(colIds: string[]): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colIds","필수","string[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setHiddenColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/resetColumnVisibility","kind":"method","title":"resetColumnVisibility","summary":"열 표시 상태를 초기 설정으로 되돌립니다.","member":{"name":"resetColumnVisibility","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"열 표시 상태를 초기 설정으로 되돌립니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 표시 상태를 초기 설정으로 되돌립니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"resetColumnVisibility(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.resetColumnVisibility(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getHiddenColumns","kind":"method","title":"getHiddenColumns","summary":"현재 숨겨진 열의 식별자 목록을 읽습니다.","member":{"name":"getHiddenColumns","typeParameters":[],"parameters":[],"returns":"Promise<string[]>","description":"현재 숨겨진 열의 식별자 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 숨겨진 열의 식별자 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getHiddenColumns(): Promise<string[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<string[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getHiddenColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/autoSizeColumn","kind":"method","title":"autoSizeColumn","summary":"현재 측정할 수 있는 내용에 맞춰 한 열의 너비를 계산하고 적용합니다.","member":{"name":"autoSizeColumn","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<number | null>","description":"현재 측정할 수 있는 내용에 맞춰 한 열의 너비를 계산하고 적용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 측정할 수 있는 내용에 맞춰 한 열의 너비를 계산하고 적용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"autoSizeColumn(colId: string): Promise<number | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<number | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.autoSizeColumn(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/autoSizeAllColumns","kind":"method","title":"autoSizeAllColumns","summary":"각 열에 자동 너비 계산을 적용합니다. 서버 미로드 값까지 측정할 수 있다고 가정하지 마세요.","member":{"name":"autoSizeAllColumns","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"각 열에 자동 너비 계산을 적용합니다. 서버 미로드 값까지 측정할 수 있다고 가정하지 마세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"각 열에 자동 너비 계산을 적용합니다. 서버 미로드 값까지 측정할 수 있다고 가정하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"autoSizeAllColumns(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.autoSizeAllColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getColumnState","kind":"method","title":"getColumnState","summary":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다.","member":{"name":"getColumnState","typeParameters":[],"parameters":[],"returns":"Promise<ColumnStateEntry[]>","description":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnState(): Promise<ColumnStateEntry[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ColumnStateEntry[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/applyColumnState","kind":"method","title":"applyColumnState","summary":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요.","member":{"name":"applyColumnState","typeParameters":[],"parameters":[{"name":"state","type":"ColumnStateEntry[]","optional":false},{"name":"opts","type":"ApplyColumnStateOptions","optional":true}],"returns":"Promise<void>","description":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applyColumnState(state: ColumnStateEntry[], opts?: ApplyColumnStateOptions): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["state","필수","ColumnStateEntry[]"],["opts","선택","ApplyColumnStateOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applyColumnState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""},{"path":"/ko/docs/types/ApplyColumnStateOptions","title":"ApplyColumnStateOptions","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getState","kind":"method","title":"getState","summary":"버전이 포함된 전체 화면 상태의 불변 스냅샷을 읽습니다. 원본 행 데이터를 백업하는 API가 아닙니다.","member":{"name":"getState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridState>","description":"버전이 포함된 전체 화면 상태의 불변 스냅샷을 읽습니다. 원본 행 데이터를 백업하는 API가 아닙니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"버전이 포함된 전체 화면 상태의 불변 스냅샷을 읽습니다. 원본 행 데이터를 백업하는 API가 아닙니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getState(): Promise<SyGridState>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridState>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/methods/setState","kind":"method","title":"setState","summary":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다.","member":{"name":"setState","typeParameters":[],"parameters":[{"name":"state","type":"SyGridState","optional":false},{"name":"options","type":"GridStateApplyOptions","optional":true}],"returns":"Promise<SyGridStateApplyReport>","description":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setState(state: SyGridState, options?: GridStateApplyOptions): Promise<SyGridStateApplyReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["state","필수","SyGridState"],["options","선택","GridStateApplyOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridStateApplyReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/ko/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/methods/getFilterModel","kind":"method","title":"getFilterModel","summary":"현재 필터 계열을 통합한 상태를 읽습니다.","member":{"name":"getFilterModel","typeParameters":[],"parameters":[],"returns":"Promise<SyGridFilterSlice>","description":"현재 필터 계열을 통합한 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 필터 계열을 통합한 상태를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getFilterModel(): Promise<SyGridFilterSlice>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridFilterSlice>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getFilterModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/setFilterModel","kind":"method","title":"setFilterModel","summary":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다.","member":{"name":"setFilterModel","typeParameters":[],"parameters":[{"name":"model","type":"SyGridFilterSlice | null","optional":false}],"returns":"Promise<FilterSliceApplyResult['report']>","description":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setFilterModel(model: SyGridFilterSlice | null): Promise<FilterSliceApplyResult['report']>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["model","필수","SyGridFilterSlice | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<FilterSliceApplyResult['report']>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setFilterModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/getCanonicalRanges","kind":"method","title":"getCanonicalRanges","summary":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다.","member":{"name":"getCanonicalRanges","typeParameters":[],"parameters":[],"returns":"Promise<SyGridCanonicalRange[]>","description":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCanonicalRanges(): Promise<SyGridCanonicalRange[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridCanonicalRange[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCanonicalRanges(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/methods/setCanonicalRanges","kind":"method","title":"setCanonicalRanges","summary":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다.","member":{"name":"setCanonicalRanges","typeParameters":[],"parameters":[{"name":"ranges","type":"SyGridCellRangeInput[]","optional":false}],"returns":"Promise<SyGridCanonicalChange[]>","description":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setCanonicalRanges(ranges: SyGridCellRangeInput[]): Promise<SyGridCanonicalChange[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["ranges","필수","SyGridCellRangeInput[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridCanonicalChange[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setCanonicalRanges(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/ko/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/methods/startBatchEdit","kind":"method","title":"startBatchEdit","summary":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다.","member":{"name":"startBatchEdit","typeParameters":[],"parameters":[{"name":"options","type":"SyGridBatchStartOptions","optional":true}],"returns":"Promise<boolean>","description":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"startBatchEdit(options?: SyGridBatchStartOptions): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","SyGridBatchStartOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.startBatchEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/isBatchEditing","kind":"method","title":"isBatchEditing","summary":"현재 일괄 편집이 진행 중인지 확인합니다.","member":{"name":"isBatchEditing","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"현재 일괄 편집이 진행 중인지 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 일괄 편집이 진행 중인지 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"isBatchEditing(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.isBatchEditing(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/stageBatchCell","kind":"method","title":"stageBatchCell","summary":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다.","member":{"name":"stageBatchCell","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false},{"name":"value","type":"unknown","optional":false}],"returns":"Promise<boolean>","description":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"stageBatchCell(rowId: GridRowId, colId: string, value: unknown): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"],["colId","필수","string"],["value","필수","unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.stageBatchCell(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/getPendingBatchCells","kind":"method","title":"getPendingBatchCells","summary":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다.","member":{"name":"getPendingBatchCells","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPendingBatchCell[]>","description":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getPendingBatchCells(): Promise<SyGridPendingBatchCell[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPendingBatchCell[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getPendingBatchCells(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/cancelBatchEdit","kind":"method","title":"cancelBatchEdit","summary":"대기 중인 일괄 편집을 취소하고 취소한 항목 수를 반환합니다.","member":{"name":"cancelBatchEdit","typeParameters":[],"parameters":[],"returns":"Promise<number>","description":"대기 중인 일괄 편집을 취소하고 취소한 항목 수를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"대기 중인 일괄 편집을 취소하고 취소한 항목 수를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cancelBatchEdit(): Promise<number>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<number>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.cancelBatchEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/commitBatchEdit","kind":"method","title":"commitBatchEdit","summary":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다.","member":{"name":"commitBatchEdit","typeParameters":[],"parameters":[{"name":"options","type":"SyGridBatchCommitOptions","optional":true}],"returns":"Promise<SyGridBatchCommitReport>","description":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"commitBatchEdit(options?: SyGridBatchCommitOptions): Promise<SyGridBatchCommitReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","SyGridBatchCommitOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridBatchCommitReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.commitBatchEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/methods/startRowEdit","kind":"method","title":"startRowEdit","summary":"지정한 행 ID의 전체 행 편집을 시작합니다.","member":{"name":"startRowEdit","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false}],"returns":"Promise<boolean>","description":"지정한 행 ID의 전체 행 편집을 시작합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 행 ID의 전체 행 편집을 시작합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"startRowEdit(rowId: GridRowId): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.startRowEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/stopRowEdit","kind":"method","title":"stopRowEdit","summary":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다.","member":{"name":"stopRowEdit","typeParameters":[],"parameters":[{"name":"reason","type":"'commit' | 'cancel'","optional":true}],"returns":"Promise<SyGridRowEditReport>","description":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"stopRowEdit(reason?: 'commit' | 'cancel'): Promise<SyGridRowEditReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["reason","선택","'commit' | 'cancel'"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridRowEditReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.stopRowEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/stageRowEditCell","kind":"method","title":"stageRowEditCell","summary":"현재 편집 중인 행의 열에 대기 값을 설정합니다.","member":{"name":"stageRowEditCell","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false},{"name":"value","type":"unknown","optional":false}],"returns":"Promise<boolean>","description":"현재 편집 중인 행의 열에 대기 값을 설정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 편집 중인 행의 열에 대기 값을 설정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"stageRowEditCell(colId: string, value: unknown): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"],["value","필수","unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.stageRowEditCell(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/getStateCaptureReport","kind":"method","title":"getStateCaptureReport","summary":"최근 화면 상태 캡처에서 생략·문제가 있었는지 읽습니다. 저장된 상태의 완전성을 확인할 때 사용합니다.","member":{"name":"getStateCaptureReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridStateCaptureReport>","description":"최근 화면 상태 캡처에서 생략·문제가 있었는지 읽습니다. 저장된 상태의 완전성을 확인할 때 사용합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"최근 화면 상태 캡처에서 생략·문제가 있었는지 읽습니다. 저장된 상태의 완전성을 확인할 때 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getStateCaptureReport(): Promise<SyGridStateCaptureReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridStateCaptureReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getStateCaptureReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/methods/fillRange","kind":"method","title":"fillRange","summary":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다.","member":{"name":"fillRange","typeParameters":[],"parameters":[{"name":"options","type":"SyGridFillRangeOptions","optional":false}],"returns":"Promise<SyGridFillRangeReport>","description":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fillRange(options: SyGridFillRangeOptions): Promise<SyGridFillRangeReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","필수","SyGridFillRangeOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridFillRangeReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.fillRange(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/methods/getDisplayRowInfo","kind":"method","title":"getDisplayRowInfo","summary":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다.","member":{"name":"getDisplayRowInfo","typeParameters":[],"parameters":[{"name":"index","type":"number","optional":false}],"returns":"Promise<SyGridDisplayRowInfo | null>","description":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDisplayRowInfo(index: number): Promise<SyGridDisplayRowInfo | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["index","필수","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridDisplayRowInfo | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDisplayRowInfo(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/getPivotCombinationReport","kind":"method","title":"getPivotCombinationReport","summary":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다.","member":{"name":"getPivotCombinationReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPivotCombinationReport>","description":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getPivotCombinationReport(): Promise<SyGridPivotCombinationReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPivotCombinationReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getPivotCombinationReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/methods/getPivotSecondaryColumns","kind":"method","title":"getPivotSecondaryColumns","summary":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다.","member":{"name":"getPivotSecondaryColumns","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPivotSecondaryColumns | null>","description":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getPivotSecondaryColumns(): Promise<SyGridPivotSecondaryColumns | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPivotSecondaryColumns | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getPivotSecondaryColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/methods/getGroupCheckStates","kind":"method","title":"getGroupCheckStates","summary":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다.","member":{"name":"getGroupCheckStates","typeParameters":[],"parameters":[{"name":"options","type":"SyGridGroupCheckStatesOptions","optional":true}],"returns":"Promise<SyGridGroupCheckStatesReport>","description":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getGroupCheckStates(options?: SyGridGroupCheckStatesOptions): Promise<SyGridGroupCheckStatesReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["options","선택","SyGridGroupCheckStatesOptions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridGroupCheckStatesReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getGroupCheckStates(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/methods/startRowDrag","kind":"method","title":"startRowDrag","summary":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다.","member":{"name":"startRowDrag","typeParameters":[],"parameters":[{"name":"input","type":"SyGridRowDragStartInput","optional":false}],"returns":"Promise<SyGridRowDragStartResult>","description":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"startRowDrag(input: SyGridRowDragStartInput): Promise<SyGridRowDragStartResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","SyGridRowDragStartInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridRowDragStartResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.startRowDrag(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/ko/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getRowDragSession","kind":"method","title":"getRowDragSession","summary":"현재 행 드래그 세션의 진행 상태를 읽습니다.","member":{"name":"getRowDragSession","typeParameters":[],"parameters":[],"returns":"Promise<SyGridRowDragSessionReport>","description":"현재 행 드래그 세션의 진행 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 행 드래그 세션의 진행 상태를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRowDragSession(): Promise<SyGridRowDragSessionReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridRowDragSessionReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getRowDragSession(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/registerDropZone","kind":"method","title":"registerDropZone","summary":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다.","member":{"name":"registerDropZone","typeParameters":[],"parameters":[{"name":"input","type":"SyGridDropZoneInput","optional":false}],"returns":"Promise<SyGridDropZoneRegistration>","description":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"registerDropZone(input: SyGridDropZoneInput): Promise<SyGridDropZoneRegistration>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","SyGridDropZoneInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridDropZoneRegistration>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.registerDropZone(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/ko/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/unregisterDropZone","kind":"method","title":"unregisterDropZone","summary":"등록한 드롭 영역을 해제하고 성공 여부를 반환합니다.","member":{"name":"unregisterDropZone","typeParameters":[],"parameters":[{"name":"zoneId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"등록한 드롭 영역을 해제하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"등록한 드롭 영역을 해제하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"unregisterDropZone(zoneId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["zoneId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.unregisterDropZone(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getDropZones","kind":"method","title":"getDropZones","summary":"현재 드롭 영역 등록 상태를 읽습니다.","member":{"name":"getDropZones","typeParameters":[],"parameters":[],"returns":"Promise<SyGridDropZonesReport>","description":"현재 드롭 영역 등록 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 드롭 영역 등록 상태를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDropZones(): Promise<SyGridDropZonesReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridDropZonesReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDropZones(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getDragSafetyReport","kind":"method","title":"getDragSafetyReport","summary":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다.","member":{"name":"getDragSafetyReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridDragSafetyReport>","description":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getDragSafetyReport(): Promise<SyGridDragSafetyReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridDragSafetyReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getDragSafetyReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/setAlignedGrids","kind":"method","title":"setAlignedGrids","summary":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다.","member":{"name":"setAlignedGrids","typeParameters":[],"parameters":[{"name":"input","type":"SyGridAlignedGridsInput","optional":false}],"returns":"Promise<SyGridAlignedGridsResult>","description":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setAlignedGrids(input: SyGridAlignedGridsInput): Promise<SyGridAlignedGridsResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","SyGridAlignedGridsInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridAlignedGridsResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setAlignedGrids(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getAlignedGrids","kind":"method","title":"getAlignedGrids","summary":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다.","member":{"name":"getAlignedGrids","typeParameters":[],"parameters":[],"returns":"Promise<SyGridAlignedGridsReport>","description":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getAlignedGrids(): Promise<SyGridAlignedGridsReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridAlignedGridsReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getAlignedGrids(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/reparentRows","kind":"method","title":"reparentRows","summary":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다.","member":{"name":"reparentRows","typeParameters":[],"parameters":[{"name":"request","type":"SyGridReparentRequest","optional":false}],"returns":"Promise<SyGridReparentResult>","description":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"reparentRows(request: SyGridReparentRequest): Promise<SyGridReparentResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["request","필수","SyGridReparentRequest"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridReparentResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.reparentRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/ko/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/methods/getFullWidthRowInfo","kind":"method","title":"getFullWidthRowInfo","summary":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다.","member":{"name":"getFullWidthRowInfo","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":true}],"returns":"Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getFullWidthRowInfo(rowIndex?: number): Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowIndex","선택","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridFullWidthRowInfo<GridRow> | SyGridFullWidthLayoutReport | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getFullWidthRowInfo(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/setPinnedRows","kind":"method","title":"setPinnedRows","summary":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다.","member":{"name":"setPinnedRows","typeParameters":[],"parameters":[{"name":"input","type":"SyGridPinnedRowSetInput<GridRow>","optional":false}],"returns":"Promise<SyGridPinnedRowsResult<GridRow>>","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setPinnedRows(input: SyGridPinnedRowSetInput<GridRow>): Promise<SyGridPinnedRowsResult<GridRow>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","SyGridPinnedRowSetInput<GridRow>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPinnedRowsResult<GridRow>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setPinnedRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getPinnedRows","kind":"method","title":"getPinnedRows","summary":"현재 고정 행 데이터를 보고서로 읽습니다.","member":{"name":"getPinnedRows","typeParameters":[],"parameters":[],"returns":"Promise<SyGridPinnedRowsReport<GridRow>>","description":"현재 고정 행 데이터를 보고서로 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 고정 행 데이터를 보고서로 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getPinnedRows(): Promise<SyGridPinnedRowsReport<GridRow>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPinnedRowsReport<GridRow>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getPinnedRows(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getPinnedRowInfo","kind":"method","title":"getPinnedRowInfo","summary":"지정한 고정 행의 세부 정보를 읽습니다.","member":{"name":"getPinnedRowInfo","typeParameters":[],"parameters":[{"name":"displayIndex","type":"number","optional":false}],"returns":"Promise<SyGridPinnedRowInfo<GridRow> | null>","description":"지정한 고정 행의 세부 정보를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 고정 행의 세부 정보를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getPinnedRowInfo(displayIndex: number): Promise<SyGridPinnedRowInfo<GridRow> | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["displayIndex","필수","number"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridPinnedRowInfo<GridRow> | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getPinnedRowInfo(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getRowSpan","kind":"method","title":"getRowSpan","summary":"세로 병합 범위의 계산 결과를 읽습니다.","member":{"name":"getRowSpan","typeParameters":[],"parameters":[{"name":"colId","type":"string","optional":false}],"returns":"Promise<SyGridRowSpanReport | null>","description":"세로 병합 범위의 계산 결과를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"세로 병합 범위의 계산 결과를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRowSpan(colId: string): Promise<SyGridRowSpanReport | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridRowSpanReport | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getRowSpan(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getCellSpan","kind":"method","title":"getCellSpan","summary":"특정 셀의 가로·세로 병합 정보를 읽습니다.","member":{"name":"getCellSpan","typeParameters":[],"parameters":[{"name":"rowIndex","type":"number","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<SyGridCellSpanInfo | null>","description":"특정 셀의 가로·세로 병합 정보를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 셀의 가로·세로 병합 정보를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellSpan(rowIndex: number, colId: string): Promise<SyGridCellSpanInfo | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowIndex","필수","number"],["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridCellSpanInfo | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellSpan(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getSpanInteraction","kind":"method","title":"getSpanInteraction","summary":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다.","member":{"name":"getSpanInteraction","typeParameters":[],"parameters":[{"name":"query","type":"SyGridSpanInteractionQuery","optional":true}],"returns":"Promise<SyGridSpanInteractionReport>","description":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getSpanInteraction(query?: SyGridSpanInteractionQuery): Promise<SyGridSpanInteractionReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["query","선택","SyGridSpanInteractionQuery"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridSpanInteractionReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getSpanInteraction(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/methods/getServerSideSelectionState","kind":"method","title":"getServerSideSelectionState","summary":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다.","member":{"name":"getServerSideSelectionState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerSelectionState>","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getServerSideSelectionState(): Promise<SyGridServerSelectionState>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerSelectionState>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getServerSideSelectionState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/getServerGroupSelectionState","kind":"method","title":"getServerGroupSelectionState","summary":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다.","member":{"name":"getServerGroupSelectionState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerSelectionState>","description":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getServerGroupSelectionState(): Promise<SyGridServerSelectionState>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerSelectionState>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getServerGroupSelectionState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/setServerSideSelectionState","kind":"method","title":"setServerSideSelectionState","summary":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다.","member":{"name":"setServerSideSelectionState","typeParameters":[],"parameters":[{"name":"input","type":"unknown","optional":false}],"returns":"Promise<SyGridServerSelectionSetResult>","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setServerSideSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerSelectionSetResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setServerSideSelectionState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/setServerGroupSelectionState","kind":"method","title":"setServerGroupSelectionState","summary":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다.","member":{"name":"setServerGroupSelectionState","typeParameters":[],"parameters":[{"name":"input","type":"unknown","optional":false}],"returns":"Promise<SyGridServerSelectionSetResult>","description":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setServerGroupSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerSelectionSetResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setServerGroupSelectionState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/selectAllServerSide","kind":"method","title":"selectAllServerSide","summary":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다.","member":{"name":"selectAllServerSide","typeParameters":[],"parameters":[{"name":"action","type":"'select' | 'clear'","optional":true}],"returns":"Promise<SyGridServerSelectAllResult>","description":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"selectAllServerSide(action?: 'select' | 'clear'): Promise<SyGridServerSelectAllResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["action","선택","'select' | 'clear'"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerSelectAllResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.selectAllServerSide(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/selectServerGroupChildren","kind":"method","title":"selectServerGroupChildren","summary":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다.","member":{"name":"selectServerGroupChildren","typeParameters":[],"parameters":[{"name":"groupKeys","type":"ReadonlyArray<string>","optional":false},{"name":"action","type":"'select' | 'deselect'","optional":true}],"returns":"Promise<SyGridServerGroupChildrenResult>","description":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"selectServerGroupChildren(groupKeys: ReadonlyArray<string>, action?: 'select' | 'deselect'): Promise<SyGridServerGroupChildrenResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["groupKeys","필수","ReadonlyArray<string>"],["action","선택","'select' | 'deselect'"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerGroupChildrenResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.selectServerGroupChildren(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/refreshServerSide","kind":"method","title":"refreshServerSide","summary":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다.","member":{"name":"refreshServerSide","typeParameters":[],"parameters":[{"name":"input","type":"SyGridServerRefreshInput","optional":true}],"returns":"Promise<SyGridServerRefreshResult>","description":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"refreshServerSide(input?: SyGridServerRefreshInput): Promise<SyGridServerRefreshResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","선택","SyGridServerRefreshInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerRefreshResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.refreshServerSide(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/ko/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/applyServerSideTransaction","kind":"method","title":"applyServerSideTransaction","summary":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다.","member":{"name":"applyServerSideTransaction","typeParameters":[],"parameters":[{"name":"transaction","type":"SyGridServerTransactionInput","optional":false}],"returns":"Promise<SyGridServerTransactionResult>","description":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applyServerSideTransaction(transaction: SyGridServerTransactionInput): Promise<SyGridServerTransactionResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["transaction","필수","SyGridServerTransactionInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerTransactionResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applyServerSideTransaction(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/ko/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/applyServerSideTransactionAsync","kind":"method","title":"applyServerSideTransactionAsync","summary":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다.","member":{"name":"applyServerSideTransactionAsync","typeParameters":[],"parameters":[{"name":"transaction","type":"SyGridServerTransactionInput","optional":false},{"name":"onSettle","type":"(settlement: SyGridServerTransactionSettlement) => void","optional":true}],"returns":"Promise<SyGridServerTransactionEnqueue>","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applyServerSideTransactionAsync(transaction: SyGridServerTransactionInput, onSettle?: (settlement: SyGridServerTransactionSettlement) => void): Promise<SyGridServerTransactionEnqueue>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["transaction","필수","SyGridServerTransactionInput"],["onSettle","선택","(settlement: SyGridServerTransactionSettlement) => void"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerTransactionEnqueue>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applyServerSideTransactionAsync(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/ko/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/ko/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/flushServerSideAsyncTransactions","kind":"method","title":"flushServerSideAsyncTransactions","summary":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다.","member":{"name":"flushServerSideAsyncTransactions","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerFlushReport>","description":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"flushServerSideAsyncTransactions(): Promise<SyGridServerFlushReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerFlushReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.flushServerSideAsyncTransactions(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/getServerSideStoreState","kind":"method","title":"getServerSideStoreState","summary":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다.","member":{"name":"getServerSideStoreState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerStateReport | null>","description":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getServerSideStoreState(): Promise<SyGridServerStateReport | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerStateReport | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getServerSideStoreState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/getServerPivotResultColumns","kind":"method","title":"getServerPivotResultColumns","summary":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다.","member":{"name":"getServerPivotResultColumns","typeParameters":[],"parameters":[],"returns":"Promise<SyGridServerPivotColumnsReport | null>","description":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getServerPivotResultColumns(): Promise<SyGridServerPivotColumnsReport | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerPivotColumnsReport | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getServerPivotResultColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/auditServerPivotResultColumns","kind":"method","title":"auditServerPivotResultColumns","summary":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다.","member":{"name":"auditServerPivotResultColumns","typeParameters":[],"parameters":[{"name":"colIds","type":"ReadonlyArray<string>","optional":false}],"returns":"Promise<SyGridServerPivotColumnAudit | null>","description":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"auditServerPivotResultColumns(colIds: ReadonlyArray<string>): Promise<SyGridServerPivotColumnAudit | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["colIds","필수","ReadonlyArray<string>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridServerPivotColumnAudit | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.auditServerPivotResultColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/methods/getWorkbookPropagationState","kind":"method","title":"getWorkbookPropagationState","summary":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다.","member":{"name":"getWorkbookPropagationState","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookPropagationState>","description":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getWorkbookPropagationState(): Promise<SyGridWorkbookPropagationState>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridWorkbookPropagationState>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getWorkbookPropagationState(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/flushWorkbookPropagation","kind":"method","title":"flushWorkbookPropagation","summary":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다.","member":{"name":"flushWorkbookPropagation","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookFlushReport>","description":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"flushWorkbookPropagation(): Promise<SyGridWorkbookFlushReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridWorkbookFlushReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.flushWorkbookPropagation(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/getWorkbookSnapshotReport","kind":"method","title":"getWorkbookSnapshotReport","summary":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요.","member":{"name":"getWorkbookSnapshotReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookSnapshotReport>","description":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getWorkbookSnapshotReport(): Promise<SyGridWorkbookSnapshotReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridWorkbookSnapshotReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getWorkbookSnapshotReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/getWorkbookIntegrityReport","kind":"method","title":"getWorkbookIntegrityReport","summary":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다.","member":{"name":"getWorkbookIntegrityReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridWorkbookIntegrityReport>","description":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getWorkbookIntegrityReport(): Promise<SyGridWorkbookIntegrityReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridWorkbookIntegrityReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getWorkbookIntegrityReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/applySpillFormula","kind":"method","title":"applySpillFormula","summary":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다.","member":{"name":"applySpillFormula","typeParameters":[],"parameters":[{"name":"input","type":"SyGridSpillApplyInput","optional":false}],"returns":"Promise<SyGridSpillApplyResult>","description":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applySpillFormula(input: SyGridSpillApplyInput): Promise<SyGridSpillApplyResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["input","필수","SyGridSpillApplyInput"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridSpillApplyResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applySpillFormula(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/clearSpillFormula","kind":"method","title":"clearSpillFormula","summary":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다.","member":{"name":"clearSpillFormula","typeParameters":[],"parameters":[{"name":"target","type":"SyGridSpillTarget","optional":false}],"returns":"Promise<SyGridSpillClearResult>","description":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clearSpillFormula(target: SyGridSpillTarget): Promise<SyGridSpillClearResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["target","필수","SyGridSpillTarget"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridSpillClearResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.clearSpillFormula(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/undoSpillTransaction","kind":"method","title":"undoSpillTransaction","summary":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다.","member":{"name":"undoSpillTransaction","typeParameters":[],"parameters":[{"name":"mutationId","type":"GridMutationId","optional":false}],"returns":"Promise<SyGridSpillUndoResult>","description":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"undoSpillTransaction(mutationId: GridMutationId): Promise<SyGridSpillUndoResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["mutationId","필수","GridMutationId"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridSpillUndoResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.undoSpillTransaction(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/getSpillReport","kind":"method","title":"getSpillReport","summary":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다.","member":{"name":"getSpillReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridSpillReport>","description":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getSpillReport(): Promise<SyGridSpillReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridSpillReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getSpillReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/methods/createRangeChart","kind":"method","title":"createRangeChart","summary":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다.","member":{"name":"createRangeChart","typeParameters":[],"parameters":[{"name":"params","type":"SyGridChartCreateParams","optional":false}],"returns":"Promise<SyGridChartCreateResult>","description":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"createRangeChart(params: SyGridChartCreateParams): Promise<SyGridChartCreateResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["params","필수","SyGridChartCreateParams"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartCreateResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.createRangeChart(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/ko/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/updateChart","kind":"method","title":"updateChart","summary":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다.","member":{"name":"updateChart","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false},{"name":"patch","type":"SyGridChartUpdatePatch","optional":false}],"returns":"Promise<SyGridChartUpdateResult>","description":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"updateChart(chartId: string, patch: SyGridChartUpdatePatch): Promise<SyGridChartUpdateResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["chartId","필수","string"],["patch","필수","SyGridChartUpdatePatch"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartUpdateResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.updateChart(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/ko/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/destroyChart","kind":"method","title":"destroyChart","summary":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다.","member":{"name":"destroyChart","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false}],"returns":"Promise<SyGridChartDestroyResult>","description":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"destroyChart(chartId: string): Promise<SyGridChartDestroyResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["chartId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartDestroyResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.destroyChart(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartRefs","kind":"method","title":"getChartRefs","summary":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다.","member":{"name":"getChartRefs","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartReport[]>","description":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartRefs(): Promise<SyGridChartReport[]>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartReport[]>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartRefs(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/syncCharts","kind":"method","title":"syncCharts","summary":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다.","member":{"name":"syncCharts","typeParameters":[],"parameters":[{"name":"mutation","type":"SyGridChartSyncMutation","optional":true}],"returns":"Promise<SyGridChartSyncReport>","description":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"syncCharts(mutation?: SyGridChartSyncMutation): Promise<SyGridChartSyncReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["mutation","선택","SyGridChartSyncMutation"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartSyncReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.syncCharts(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/ko/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartMenuModel","kind":"method","title":"getChartMenuModel","summary":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다.","member":{"name":"getChartMenuModel","typeParameters":[],"parameters":[{"name":"permissions","type":"SyGridChartPermissions","optional":true}],"returns":"Promise<SyGridChartMenuReport>","description":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartMenuModel(permissions?: SyGridChartPermissions): Promise<SyGridChartMenuReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["permissions","선택","SyGridChartPermissions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartMenuReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartMenuModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/ko/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/openChartToolPanel","kind":"method","title":"openChartToolPanel","summary":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다.","member":{"name":"openChartToolPanel","typeParameters":[],"parameters":[{"name":"permissions","type":"SyGridChartPermissions","optional":true}],"returns":"Promise<SyGridChartPanelReport>","description":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"openChartToolPanel(permissions?: SyGridChartPermissions): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["permissions","선택","SyGridChartPermissions"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartPanelReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.openChartToolPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/closeChartToolPanel","kind":"method","title":"closeChartToolPanel","summary":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다.","member":{"name":"closeChartToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartPanelReport>","description":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"closeChartToolPanel(): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartPanelReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.closeChartToolPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartToolPanelReport","kind":"method","title":"getChartToolPanelReport","summary":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다.","member":{"name":"getChartToolPanelReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartPanelReport>","description":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartToolPanelReport(): Promise<SyGridChartPanelReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartPanelReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartToolPanelReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/activateChartToolPanelItem","kind":"method","title":"activateChartToolPanelItem","summary":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다.","member":{"name":"activateChartToolPanelItem","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCreateResult>","description":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"activateChartToolPanelItem(): Promise<SyGridChartCreateResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartCreateResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.activateChartToolPanelItem(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartModels","kind":"method","title":"getChartModels","summary":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다.","member":{"name":"getChartModels","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCaptureResult>","description":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartModels(): Promise<SyGridChartCaptureResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartCaptureResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartModels(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/restoreChartModels","kind":"method","title":"restoreChartModels","summary":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다.","member":{"name":"restoreChartModels","typeParameters":[],"parameters":[{"name":"envelope","type":"unknown","optional":false}],"returns":"Promise<SyGridChartRestoreResult>","description":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"restoreChartModels(envelope: unknown): Promise<SyGridChartRestoreResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["envelope","필수","unknown"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartRestoreResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.restoreChartModels(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/exportChartImage","kind":"method","title":"exportChartImage","summary":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다.","member":{"name":"exportChartImage","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false},{"name":"request","type":"SyGridChartExportRequest","optional":false}],"returns":"Promise<SyGridChartExportResult>","description":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"exportChartImage(chartId: string, request: SyGridChartExportRequest): Promise<SyGridChartExportResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["chartId","필수","string"],["request","필수","SyGridChartExportRequest"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartExportResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.exportChartImage(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/ko/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/applyChartCrossFilter","kind":"method","title":"applyChartCrossFilter","summary":"차트의 선택 동작을 Grid 필터 모델에 반영합니다.","member":{"name":"applyChartCrossFilter","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false},{"name":"colId","type":"string","optional":false},{"name":"action","type":"SyGridChartCrossFilterAction","optional":false},{"name":"categories","type":"unknown[]","optional":false}],"returns":"Promise<SyGridChartCrossFilterResult>","description":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"applyChartCrossFilter(chartId: string, colId: string, action: SyGridChartCrossFilterAction, categories: unknown[]): Promise<SyGridChartCrossFilterResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["chartId","필수","string"],["colId","필수","string"],["action","필수","SyGridChartCrossFilterAction"],["categories","필수","unknown[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartCrossFilterResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.applyChartCrossFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/ko/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/resetChartCrossFilter","kind":"method","title":"resetChartCrossFilter","summary":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다.","member":{"name":"resetChartCrossFilter","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartCrossFilterResult>","description":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"resetChartCrossFilter(): Promise<SyGridChartCrossFilterResult>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartCrossFilterResult>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.resetChartCrossFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartAccessibleSummary","kind":"method","title":"getChartAccessibleSummary","summary":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다.","member":{"name":"getChartAccessibleSummary","typeParameters":[],"parameters":[{"name":"chartId","type":"string","optional":false}],"returns":"Promise<SyGridChartAccessibleReport | null>","description":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartAccessibleSummary(chartId: string): Promise<SyGridChartAccessibleReport | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["chartId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartAccessibleReport | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartAccessibleSummary(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/getChartFleetReport","kind":"method","title":"getChartFleetReport","summary":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다.","member":{"name":"getChartFleetReport","typeParameters":[],"parameters":[],"returns":"Promise<SyGridChartFleetReport>","description":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getChartFleetReport(): Promise<SyGridChartFleetReport>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<SyGridChartFleetReport>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getChartFleetReport(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/methods/setHoveredRow","kind":"method","title":"setHoveredRow","summary":"상태형 hover의 대상 행을 지정합니다. 실제 행 선택을 바꾸는 API는 아닙니다.","member":{"name":"setHoveredRow","typeParameters":[],"parameters":[{"name":"rowId","type":"string | number | null","optional":false}],"returns":"Promise<void>","description":"상태형 hover의 대상 행을 지정합니다. 실제 행 선택을 바꾸는 API는 아닙니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"상태형 hover의 대상 행을 지정합니다. 실제 행 선택을 바꾸는 API는 아닙니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setHoveredRow(rowId: string | number | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","string | number | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setHoveredRow(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-hover","title":"행 따라가기","description":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/getHoveredRowId","kind":"method","title":"getHoveredRowId","summary":"현재 hover 행의 ID 또는 null을 읽습니다.","member":{"name":"getHoveredRowId","typeParameters":[],"parameters":[],"returns":"Promise<string | number | null>","description":"현재 hover 행의 ID 또는 null을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 hover 행의 ID 또는 null을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getHoveredRowId(): Promise<string | number | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<string | number | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getHoveredRowId(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-hover","title":"행 따라가기","description":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/methods/getActiveEditTransaction","kind":"method","title":"getActiveEditTransaction","summary":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다.","member":{"name":"getActiveEditTransaction","typeParameters":[],"parameters":[],"returns":"Promise<EditTransaction | null>","description":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getActiveEditTransaction(): Promise<EditTransaction | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<EditTransaction | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getActiveEditTransaction(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/EditTransaction","title":"EditTransaction","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/commitActiveEdit","kind":"method","title":"commitActiveEdit","summary":"현재 셀 편집을 확정하고 성공 여부를 반환합니다.","member":{"name":"commitActiveEdit","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"현재 셀 편집을 확정하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 셀 편집을 확정하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"commitActiveEdit(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.commitActiveEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/cancelActiveEdit","kind":"method","title":"cancelActiveEdit","summary":"현재 셀 편집을 취소하고 실행 여부를 반환합니다.","member":{"name":"cancelActiveEdit","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"현재 셀 편집을 취소하고 실행 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 셀 편집을 취소하고 실행 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cancelActiveEdit(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.cancelActiveEdit(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/registerCellRenderer","kind":"method","title":"registerCellRenderer","summary":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다.","member":{"name":"registerCellRenderer","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false},{"name":"renderer","type":"CellRenderer","optional":false}],"returns":"Promise<boolean>","description":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"registerCellRenderer(name: string, renderer: CellRenderer): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["name","필수","string"],["renderer","필수","CellRenderer"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.registerCellRenderer(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/listRegisteredCellRenderers","kind":"method","title":"listRegisteredCellRenderers","summary":"사용 가능한 등록 셀 렌더러 이름 목록을 읽습니다.","member":{"name":"listRegisteredCellRenderers","typeParameters":[],"parameters":[],"returns":"Promise<ReadonlyArray<string>>","description":"사용 가능한 등록 셀 렌더러 이름 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용 가능한 등록 셀 렌더러 이름 목록을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"listRegisteredCellRenderers(): Promise<ReadonlyArray<string>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ReadonlyArray<string>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.listRegisteredCellRenderers(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/unregisterCellRenderer","kind":"method","title":"unregisterCellRenderer","summary":"이름으로 등록한 셀 렌더러를 해제합니다.","member":{"name":"unregisterCellRenderer","typeParameters":[],"parameters":[{"name":"name","type":"string","optional":false}],"returns":"Promise<boolean>","description":"이름으로 등록한 셀 렌더러를 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이름으로 등록한 셀 렌더러를 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"unregisterCellRenderer(name: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["name","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.unregisterCellRenderer(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/registerGridComponent","kind":"method","title":"registerGridComponent","summary":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다.","member":{"name":"registerGridComponent","typeParameters":["TKind extends GridComponentKind"],"parameters":[{"name":"scope","type":"GridComponentRegistrationScope","optional":false},{"name":"kind","type":"TKind","optional":false},{"name":"name","type":"string","optional":false},{"name":"definition","type":"GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >","optional":false}],"returns":"Promise<void>","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"registerGridComponent<TKind extends GridComponentKind>(scope: GridComponentRegistrationScope, kind: TKind, name: string, definition: GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["scope","필수","GridComponentRegistrationScope"],["kind","필수","TKind"],["name","필수","string"],["definition","필수","GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.registerGridComponent(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/replaceGridComponent","kind":"method","title":"replaceGridComponent","summary":"등록된 사용자 컴포넌트 정의를 교체합니다.","member":{"name":"replaceGridComponent","typeParameters":["TKind extends GridComponentKind"],"parameters":[{"name":"scope","type":"GridComponentRegistrationScope","optional":false},{"name":"kind","type":"TKind","optional":false},{"name":"name","type":"string","optional":false},{"name":"definition","type":"GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >","optional":false}],"returns":"Promise<void>","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"등록된 사용자 컴포넌트 정의를 교체합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"replaceGridComponent<TKind extends GridComponentKind>(scope: GridComponentRegistrationScope, kind: TKind, name: string, definition: GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["scope","필수","GridComponentRegistrationScope"],["kind","필수","TKind"],["name","필수","string"],["definition","필수","GridComponentDefinitionFor<\n      TKind,\n      GridData,\n      unknown,\n      unknown,\n      unknown\n    >"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.replaceGridComponent(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/unregisterGridComponent","kind":"method","title":"unregisterGridComponent","summary":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다.","member":{"name":"unregisterGridComponent","typeParameters":[],"parameters":[{"name":"scope","type":"GridComponentRegistrationScope","optional":false},{"name":"kind","type":"GridComponentKind","optional":false},{"name":"name","type":"string","optional":false}],"returns":"Promise<boolean>","description":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"unregisterGridComponent(scope: GridComponentRegistrationScope, kind: GridComponentKind, name: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["scope","필수","GridComponentRegistrationScope"],["kind","필수","GridComponentKind"],["name","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.unregisterGridComponent(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/getRegisteredGridComponentNames","kind":"method","title":"getRegisteredGridComponentNames","summary":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다.","member":{"name":"getRegisteredGridComponentNames","typeParameters":[],"parameters":[{"name":"scope","type":"GridComponentRegistrationScope","optional":false},{"name":"kind","type":"GridComponentKind","optional":false}],"returns":"Promise<ReadonlyArray<string>>","description":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getRegisteredGridComponentNames(scope: GridComponentRegistrationScope, kind: GridComponentKind): Promise<ReadonlyArray<string>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["scope","필수","GridComponentRegistrationScope"],["kind","필수","GridComponentKind"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<ReadonlyArray<string>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getRegisteredGridComponentNames(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/getCellRendererInstance","kind":"method","title":"getCellRendererInstance","summary":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다.","member":{"name":"getCellRendererInstance","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<GridRendererDiscovery<GridData, unknown, unknown>>","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellRendererInstance(rowId: GridRowId, colId: string): Promise<GridRendererDiscovery<GridData, unknown, unknown>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"],["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<GridRendererDiscovery<GridData, unknown, unknown>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellRendererInstance(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/destroyCellRendererInstance","kind":"method","title":"destroyCellRendererInstance","summary":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다.","member":{"name":"destroyCellRendererInstance","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"destroyCellRendererInstance(rowId: GridRowId, colId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"],["colId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.destroyCellRendererInstance(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/focusCellRendererInstance","kind":"method","title":"focusCellRendererInstance","summary":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다.","member":{"name":"focusCellRendererInstance","typeParameters":[],"parameters":[{"name":"rowId","type":"GridRowId","optional":false},{"name":"colId","type":"string","optional":false},{"name":"direction","type":"'in' | 'out'","optional":false}],"returns":"Promise<boolean>","description":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"focusCellRendererInstance(rowId: GridRowId, colId: string, direction: 'in' | 'out'): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["rowId","필수","GridRowId"],["colId","필수","string"],["direction","필수","'in' | 'out'"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.focusCellRendererInstance(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/methods/getCellEditorInstance","kind":"method","title":"getCellEditorInstance","summary":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다.","member":{"name":"getCellEditorInstance","typeParameters":[],"parameters":[],"returns":"Promise<\n    GridMountedComponentLookup<\n      GridEditorInstance<GridData, unknown, unknown>,\n      GridEditorParams<GridData, unknown, unknown>,\n      HTMLElement\n    >\n    | null\n  >","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getCellEditorInstance(): Promise<\n    GridMountedComponentLookup<\n      GridEditorInstance<GridData, unknown, unknown>,\n      GridEditorParams<GridData, unknown, unknown>,\n      HTMLElement\n    >\n    | null\n  >","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<\n    GridMountedComponentLookup<\n      GridEditorInstance<GridData, unknown, unknown>,\n      GridEditorParams<GridData, unknown, unknown>,\n      HTMLElement\n    >\n    | null\n  >`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getCellEditorInstance(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/methods/getColumnFilterInstance","kind":"method","title":"getColumnFilterInstance","summary":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다.","member":{"name":"getColumnFilterInstance","typeParameters":["TColumnValue = unknown","TModel = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<\n    GridFilterInstance<GridData, TColumnValue, TModel, unknown> | null\n  >","description":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnFilterInstance<TColumnValue = unknown, TModel = unknown>(columnId: string): Promise<\n    GridFilterInstance<GridData, TColumnValue, TModel, unknown> | null\n  >","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<\n    GridFilterInstance<GridData, TColumnValue, TModel, unknown> | null\n  >`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnFilterInstance(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/getColumnFilterModel","kind":"method","title":"getColumnFilterModel","summary":"한 열의 현재 필터 모델을 읽습니다.","member":{"name":"getColumnFilterModel","typeParameters":["TModel = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<TModel | null>","description":"한 열의 현재 필터 모델을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 열의 현재 필터 모델을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getColumnFilterModel<TModel = unknown>(columnId: string): Promise<TModel | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<TModel | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getColumnFilterModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/setColumnFilterModel","kind":"method","title":"setColumnFilterModel","summary":"한 열의 필터 모델을 설정하고 결과를 반환합니다. 전체 필터 상태를 바꾸는 setFilterModel과 구분합니다.","member":{"name":"setColumnFilterModel","typeParameters":["TModel = unknown"],"parameters":[{"name":"columnId","type":"string","optional":false},{"name":"model","type":"TModel | null","optional":false}],"returns":"Promise<boolean>","description":"한 열의 필터 모델을 설정하고 결과를 반환합니다. 전체 필터 상태를 바꾸는 setFilterModel과 구분합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"한 열의 필터 모델을 설정하고 결과를 반환합니다. 전체 필터 상태를 바꾸는 setFilterModel과 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setColumnFilterModel<TModel = unknown>(columnId: string, model: TModel | null): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"],["model","필수","TModel | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setColumnFilterModel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/onFilterChanged","kind":"method","title":"onFilterChanged","summary":"필터 조건이 변경되었음을 알려 현재 행 필터 결과를 다시 계산하게 합니다.","member":{"name":"onFilterChanged","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"필터 조건이 변경되었음을 알려 현재 행 필터 결과를 다시 계산하게 합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"필터 조건이 변경되었음을 알려 현재 행 필터 결과를 다시 계산하게 합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"onFilterChanged(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.onFilterChanged(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/refreshExternalFilter","kind":"method","title":"refreshExternalFilter","summary":"외부 필터의 갱신 수명 주기를 실행하고 성공 여부를 반환합니다.","member":{"name":"refreshExternalFilter","typeParameters":[],"parameters":[],"returns":"Promise<boolean>","description":"외부 필터의 갱신 수명 주기를 실행하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"외부 필터의 갱신 수명 주기를 실행하고 성공 여부를 반환합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"refreshExternalFilter(): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.refreshExternalFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/external-filter","title":"업무 조건으로 필터링","description":"Grid 밖의 업무 조건을 행 판정 함수로 연결합니다. 미완료만 보기, 내 담당 건만 보기처럼 외부 UI에 있는 선택이 표의 결과를 제어할 때 사용합니다."}]}]}]},{"path":"/ko/docs/methods/destroyColumnFilter","kind":"method","title":"destroyColumnFilter","summary":"특정 열의 필터 인스턴스를 해제합니다.","member":{"name":"destroyColumnFilter","typeParameters":[],"parameters":[{"name":"columnId","type":"string","optional":false}],"returns":"Promise<boolean>","description":"특정 열의 필터 인스턴스를 해제합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 열의 필터 인스턴스를 해제합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"destroyColumnFilter(columnId: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.destroyColumnFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/recreateColumnFilter","kind":"method","title":"recreateColumnFilter","summary":"특정 열의 필터 인스턴스를 다시 생성합니다.","member":{"name":"recreateColumnFilter","typeParameters":[],"parameters":[{"name":"columnId","type":"string","optional":false},{"name":"options","type":"{ preserveModel?: boolean }","optional":true}],"returns":"Promise<boolean>","description":"특정 열의 필터 인스턴스를 다시 생성합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"특정 열의 필터 인스턴스를 다시 생성합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"recreateColumnFilter(columnId: string, options?: { preserveModel?: boolean }): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columnId","필수","string"],["options","선택","{ preserveModel?: boolean }"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.recreateColumnFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/methods/setPivotColumns","kind":"method","title":"setPivotColumns","summary":"검증된 변경 경로로 피벗 열 축을 교체하고 성공 여부를 반환합니다.","member":{"name":"setPivotColumns","typeParameters":[],"parameters":[{"name":"columns","type":"string[]","optional":false}],"returns":"Promise<boolean>","description":"검증된 변경 경로로 피벗 열 축을 교체하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"검증된 변경 경로로 피벗 열 축을 교체하고 성공 여부를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setPivotColumns(columns: string[]): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columns","필수","string[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setPivotColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/methods/setValueColumns","kind":"method","title":"setValueColumns","summary":"검증된 변경 경로로 피벗 값 축을 교체하고 성공 여부를 반환합니다.","member":{"name":"setValueColumns","typeParameters":[],"parameters":[{"name":"columns","type":"string[]","optional":false}],"returns":"Promise<boolean>","description":"검증된 변경 경로로 피벗 값 축을 교체하고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"검증된 변경 경로로 피벗 값 축을 교체하고 성공 여부를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setValueColumns(columns: string[]): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["columns","필수","string[]"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setValueColumns(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/methods/setConditionFilter","kind":"method","title":"setConditionFilter","summary":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다.","member":{"name":"setConditionFilter","typeParameters":[],"parameters":[{"name":"model","type":"ConditionNode | null","optional":false}],"returns":"Promise<void>","description":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setConditionFilter(model: ConditionNode | null): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["model","필수","ConditionNode | null"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setConditionFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getConditionFilter","kind":"method","title":"getConditionFilter","summary":"현재 고급 조건 트리 또는 null을 읽습니다.","member":{"name":"getConditionFilter","typeParameters":[],"parameters":[],"returns":"Promise<ConditionNode | null>","description":"현재 고급 조건 트리 또는 null을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 고급 조건 트리 또는 null을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getConditionFilter(): Promise<ConditionNode | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<ConditionNode | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getConditionFilter(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/setConditionPresets","kind":"method","title":"setConditionPresets","summary":"이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다.","member":{"name":"setConditionPresets","typeParameters":[],"parameters":[{"name":"presets","type":"ReadonlyArray<{ name: string; json: string }>","optional":false}],"returns":"Promise<void>","description":"이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"이름과 JSON으로 구성된 고급 조건 프리셋 목록을 설정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"setConditionPresets(presets: ReadonlyArray<{ name: string; json: string }>): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["presets","필수","ReadonlyArray<{ name: string; json: string }>"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.setConditionPresets(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/getConditionPresets","kind":"method","title":"getConditionPresets","summary":"저장된 고급 조건 프리셋 목록을 읽습니다.","member":{"name":"getConditionPresets","typeParameters":[],"parameters":[],"returns":"Promise<Array<{ name: string; json: string }>>","description":"저장된 고급 조건 프리셋 목록을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"저장된 고급 조건 프리셋 목록을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getConditionPresets(): Promise<Array<{ name: string; json: string }>>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<Array<{ name: string; json: string }>>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getConditionPresets(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/methods/openToolPanel","kind":"method","title":"openToolPanel","summary":"ID로 열·필터 도구 패널을 열고 성공 여부를 반환합니다.","member":{"name":"openToolPanel","typeParameters":[],"parameters":[{"name":"id","type":"string","optional":false}],"returns":"Promise<boolean>","description":"ID로 열·필터 도구 패널을 열고 성공 여부를 반환합니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"ID로 열·필터 도구 패널을 열고 성공 여부를 반환합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Columns / Filters tool panels"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"openToolPanel(id: string): Promise<boolean>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[["id","필수","string"]]},{"kind":"paragraph","text":"반환 타입은 `Promise<boolean>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.openToolPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."}]}]}]},{"path":"/ko/docs/methods/closeToolPanel","kind":"method","title":"closeToolPanel","summary":"현재 열린 열·필터 도구 패널을 닫습니다. 적용 중인 설정은 지우지 않습니다.","member":{"name":"closeToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<void>","description":"현재 열린 열·필터 도구 패널을 닫습니다. 적용 중인 설정은 지우지 않습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열린 열·필터 도구 패널을 닫습니다. 적용 중인 설정은 지우지 않습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Columns / Filters tool panels"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"closeToolPanel(): Promise<void>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<void>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.closeToolPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."}]}]}]},{"path":"/ko/docs/methods/getOpenedToolPanel","kind":"method","title":"getOpenedToolPanel","summary":"현재 열린 도구 패널 ID 또는 null을 읽습니다.","member":{"name":"getOpenedToolPanel","typeParameters":[],"parameters":[],"returns":"Promise<string | null>","description":"현재 열린 도구 패널 ID 또는 null을 읽습니다."},"apiKind":"methods","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 열린 도구 패널 ID 또는 null을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Columns / Filters tool panels"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"getOpenedToolPanel(): Promise<string | null>","language":"typescript"},{"kind":"table","headers":["인수","필수 여부","타입"],"rows":[]},{"kind":"paragraph","text":"반환 타입은 `Promise<string | null>`입니다."}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"등록과 초기화를 마친 Grid 요소에서 grid.getOpenedToolPanel(…)를 호출합니다. 반환값은 await로 읽으세요. boolean이나 보고서를 반환하는 메서드는 결과를 확인한 뒤 다음 작업을 진행합니다."}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."}]}]}]},{"path":"/ko/docs/events","kind":"index","title":"이벤트","summary":"sy-grid의 이벤트 93개를 이름으로 찾고 설명·타입·예제로 이동할 수 있습니다.","sections":[{"id":"index","title":"전체 목록","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/queryComplete","title":"queryComplete","description":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."},{"path":"/ko/docs/events/sortChanged","title":"sortChanged","description":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다."},{"path":"/ko/docs/events/filterChanged","title":"filterChanged","description":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다."},{"path":"/ko/docs/events/filterModified","title":"filterModified","description":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다."},{"path":"/ko/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다."},{"path":"/ko/docs/events/conditionPresetsChanged","title":"conditionPresetsChanged","description":"고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다."},{"path":"/ko/docs/events/columnGroupToggled","title":"columnGroupToggled","description":"열 그룹 머리글을 펼치거나 접었을 때 발생합니다. groupId와 open으로 현재 상태를 읽습니다."},{"path":"/ko/docs/events/rowGroupToggled","title":"rowGroupToggled","description":"행 그룹을 펼치거나 접었을 때 발생합니다. 표시 라벨 대신 detail의 실제 key를 재사용합니다."},{"path":"/ko/docs/events/treeNodeToggled","title":"treeNodeToggled","description":"트리 노드의 펼침 상태가 바뀌었을 때 발생합니다. 경로와 expanded를 확인합니다."},{"path":"/ko/docs/events/detailRowToggled","title":"detailRowToggled","description":"부모 행의 상세 패널 펼침 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/detailRowCreated","title":"detailRowCreated","description":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다."},{"path":"/ko/docs/events/detailRowDestroyed","title":"detailRowDestroyed","description":"상세 패널이 해제되었을 때 발생합니다. 앱에서 연결한 자원도 해당 rowId 기준으로 정리합니다."},{"path":"/ko/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다."},{"path":"/ko/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/csvImported","title":"csvImported","description":"CSV 가져오기를 마쳤을 때 발생합니다. 실제 적용된 행 수와 열 수를 사용자에게 안내합니다."},{"path":"/ko/docs/events/clipboardCopied","title":"clipboardCopied","description":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다."},{"path":"/ko/docs/events/clipboardPasted","title":"clipboardPasted","description":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다."},{"path":"/ko/docs/events/paginationChanged","title":"paginationChanged","description":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다."},{"path":"/ko/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다."},{"path":"/ko/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다."},{"path":"/ko/docs/events/activeCellChanged","title":"activeCellChanged","description":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다."},{"path":"/ko/docs/events/cellClicked","title":"cellClicked","description":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다."},{"path":"/ko/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다."},{"path":"/ko/docs/events/rowClicked","title":"rowClicked","description":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다."},{"path":"/ko/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다."},{"path":"/ko/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요."},{"path":"/ko/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다."},{"path":"/ko/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다."},{"path":"/ko/docs/events/formulaError","title":"formulaError","description":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다."},{"path":"/ko/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/workbookBindingError","title":"workbookBindingError","description":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다."},{"path":"/ko/docs/events/chunkLoading","title":"chunkLoading","description":"기능 코드 조각의 로딩이 시작되었을 때 발생합니다. 행 데이터 조회 이벤트와 구분합니다."},{"path":"/ko/docs/events/chunkLoaded","title":"chunkLoaded","description":"기능 코드 조각을 불러왔을 때 발생합니다."},{"path":"/ko/docs/events/chunkLoadFailed","title":"chunkLoadFailed","description":"기능 코드 로딩이 실패했을 때 발생합니다. 오류와 대상 기능을 확인해 재시도·대체 안내에 연결합니다."},{"path":"/ko/docs/events/componentError","title":"componentError","description":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다."},{"path":"/ko/docs/events/rowDataChanged","title":"rowDataChanged","description":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다."},{"path":"/ko/docs/events/cellValueChanged","title":"cellValueChanged","description":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다."},{"path":"/ko/docs/events/rowMoved","title":"rowMoved","description":"행 순서가 이동되었을 때 발생합니다. 이동 전후 인덱스와 해당 행을 읽습니다."},{"path":"/ko/docs/events/rowGroupChanged","title":"rowGroupChanged","description":"행 그룹 기준이 바뀌었을 때 발생합니다. 기준 필드와 그룹 해제 상태를 확인합니다."},{"path":"/ko/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다."},{"path":"/ko/docs/events/pivotChanged","title":"pivotChanged","description":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요."},{"path":"/ko/docs/events/pivotModeChanged","title":"pivotModeChanged","description":"피벗 모드의 켜짐·꺼짐이 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/contextMenuItemClicked","title":"contextMenuItemClicked","description":"셀 우클릭 메뉴 항목을 실행했을 때 발생합니다. 항목 ID와 대상 셀 위치를 읽습니다."},{"path":"/ko/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다."},{"path":"/ko/docs/events/presenceChanged","title":"presenceChanged","description":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다."},{"path":"/ko/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"협업 방에 참가자가 들어왔을 때 발생합니다."},{"path":"/ko/docs/events/collaboratorLeft","title":"collaboratorLeft","description":"협업 방에서 참가자가 나갔을 때 발생합니다. ID로 앱의 참가자 목록을 갱신합니다."},{"path":"/ko/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다."},{"path":"/ko/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다."},{"path":"/ko/docs/events/commentMentioned","title":"commentMentioned","description":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다."},{"path":"/ko/docs/events/auditLogChanged","title":"auditLogChanged","description":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다."},{"path":"/ko/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다."},{"path":"/ko/docs/events/cellValidationFailed","title":"cellValidationFailed","description":"입력 검증이 실패했을 때 발생합니다. 대상 셀·입력값·메시지를 읽어 수정할 위치를 안내합니다."},{"path":"/ko/docs/events/snapshotCaptured","title":"snapshotCaptured","description":"데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다."},{"path":"/ko/docs/events/snapshotRestored","title":"snapshotRestored","description":"데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다."},{"path":"/ko/docs/events/xlsxImported","title":"xlsxImported","description":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다."},{"path":"/ko/docs/events/historyChanged","title":"historyChanged","description":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다."},{"path":"/ko/docs/events/columnResized","title":"columnResized","description":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다."},{"path":"/ko/docs/events/columnReordered","title":"columnReordered","description":"열 순서가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"열 표시·숨김 상태가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/selectionChanged","title":"selectionChanged","description":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다."},{"path":"/ko/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다."},{"path":"/ko/docs/events/themeChanged","title":"themeChanged","description":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다."},{"path":"/ko/docs/events/localeChanged","title":"localeChanged","description":"Grid 언어 설정이 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."},{"path":"/ko/docs/events/stateUpdated","title":"stateUpdated","description":"통합 화면 상태가 갱신되었을 때 발생합니다. 잦은 이벤트는 앱에서 저장 주기를 조절하세요."},{"path":"/ko/docs/events/preDestroyed","title":"preDestroyed","description":"Grid가 해제되기 전에 상태와 캡처 문제를 전달합니다. 화면 설정 저장과 자원 정리에 사용합니다."},{"path":"/ko/docs/events/batchEditStart","title":"batchEditStart","description":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다."},{"path":"/ko/docs/events/batchEditEnd","title":"batchEditEnd","description":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다."},{"path":"/ko/docs/events/rowValueChanged","title":"rowValueChanged","description":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다."},{"path":"/ko/docs/events/rowEditStart","title":"rowEditStart","description":"전체 행 편집이 시작되었을 때 발생합니다."},{"path":"/ko/docs/events/rowEditStop","title":"rowEditStop","description":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다."},{"path":"/ko/docs/events/fillStart","title":"fillStart","description":"범위 채우기가 시작되었을 때 발생합니다."},{"path":"/ko/docs/events/fillEnd","title":"fillEnd","description":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다."},{"path":"/ko/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다."},{"path":"/ko/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다."},{"path":"/ko/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다."},{"path":"/ko/docs/events/rowDragEnter","title":"rowDragEnter","description":"행 드래그가 대상 영역에 진입했을 때 발생합니다."},{"path":"/ko/docs/events/rowDragMove","title":"rowDragMove","description":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요."},{"path":"/ko/docs/events/rowDragLeave","title":"rowDragLeave","description":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다."},{"path":"/ko/docs/events/rowDragEnd","title":"rowDragEnd","description":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다."},{"path":"/ko/docs/events/rowDragCancel","title":"rowDragCancel","description":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요."},{"path":"/ko/docs/events/rowsTransferred","title":"rowsTransferred","description":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다."},{"path":"/ko/docs/events/spanConflict","title":"spanConflict","description":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다."},{"path":"/ko/docs/events/treeReparented","title":"treeReparented","description":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다."},{"path":"/ko/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다."},{"path":"/ko/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다."},{"path":"/ko/docs/events/chartCreated","title":"chartCreated","description":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다."},{"path":"/ko/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다."},{"path":"/ko/docs/events/chartDestroyed","title":"chartDestroyed","description":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다."}]}]}]},{"path":"/ko/docs/events/queryComplete","kind":"event","title":"queryComplete","summary":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다.","member":{"name":"queryComplete","type":"GridQueryResult & { tier: GridEngineTier }","description":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"queryComplete: GridQueryResult & { tier: GridEngineTier }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('queryComplete', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('queryComplete', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/js-processing","title":"JavaScript 처리 엔진","description":"JavaScript 처리 엔진은 브라우저에서 표 데이터를 정렬·필터·가공하는 표준 실행 경로입니다. 배포 환경과 기능 조합을 단순하게 확인하는 출발점으로 사용할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/sortChanged","kind":"event","title":"sortChanged","summary":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다.","member":{"name":"sortChanged","type":"GridSortChangedDetail","description":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"sortChanged: GridSortChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('sortChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('sortChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/sorting","title":"단일·다중 정렬","description":"정렬은 데이터 값을 수정하지 않고 표시 순서를 바꿉니다. 단일 정렬은 한 기준만, 다중 정렬은 우선순위가 있는 여러 기준을 사용합니다."}]}]}]},{"path":"/ko/docs/events/filterChanged","kind":"event","title":"filterChanged","summary":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다.","member":{"name":"filterChanged","type":"GridFilterChangedDetail","description":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"filterChanged: GridFilterChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('filterChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('filterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/events/filterModified","kind":"event","title":"filterModified","summary":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다.","member":{"name":"filterModified","type":"GridFilterModifiedDetail","description":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"filterModified: GridFilterModifiedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('filterModified', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('filterModified', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFilterModifiedDetail","title":"GridFilterModifiedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-filters","title":"열마다 다른 조건","description":"열 필터는 특정 열에 조건을 적용합니다. 텍스트·숫자·날짜별로 입력과 비교 방식이 다르며 여러 열의 조건은 함께 결과를 좁힙니다."}]}]}]},{"path":"/ko/docs/events/conditionFilterChanged","kind":"event","title":"conditionFilterChanged","summary":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다.","member":{"name":"conditionFilterChanged","type":"{ model: ConditionNode | null }","description":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionFilterChanged: { model: ConditionNode | null }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('conditionFilterChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionFilterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/conditionPresetsChanged","kind":"event","title":"conditionPresetsChanged","summary":"고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다.","member":{"name":"conditionPresetsChanged","type":"{ presets: Array<{ name: string; json: string }> }","description":"고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"고급 조건 프리셋 목록이 바뀌었을 때 발생합니다. presets를 사용자 설정 저장에 연결합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Advanced filter and built-in compound condition editor"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionPresetsChanged: { presets: Array<{ name: string; json: string }> }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('conditionPresetsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionPresetsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/advanced-filter","title":"조건 트리","description":"여러 열의 조건을 AND·OR 트리로 조합합니다. 예를 들어 APAC의 대량 주문 또는 특정 제품 주문처럼 업무 규칙을 표현할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/columnGroupToggled","kind":"event","title":"columnGroupToggled","summary":"열 그룹 머리글을 펼치거나 접었을 때 발생합니다. groupId와 open으로 현재 상태를 읽습니다.","member":{"name":"columnGroupToggled","type":"{ groupId: string; open: boolean }","description":"열 그룹 머리글을 펼치거나 접었을 때 발생합니다. groupId와 open으로 현재 상태를 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 그룹 머리글을 펼치거나 접었을 때 발생합니다. groupId와 open으로 현재 상태를 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnGroupToggled: { groupId: string; open: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('columnGroupToggled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnGroupToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-groups","title":"다단 헤더","description":"다단 헤더는 관련 열을 하나의 상위 제목 아래 배치합니다. 행을 묶는 그룹화와 달리 데이터 개수나 집계값은 바뀌지 않습니다."}]}]}]},{"path":"/ko/docs/events/rowGroupToggled","kind":"event","title":"rowGroupToggled","summary":"행 그룹을 펼치거나 접었을 때 발생합니다. 표시 라벨 대신 detail의 실제 key를 재사용합니다.","member":{"name":"rowGroupToggled","type":"{ key: string | null; expanded: boolean }","description":"행 그룹을 펼치거나 접었을 때 발생합니다. 표시 라벨 대신 detail의 실제 key를 재사용합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 그룹을 펼치거나 접었을 때 발생합니다. 표시 라벨 대신 detail의 실제 key를 재사용합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowGroupToggled: { key: string | null; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowGroupToggled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowGroupToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/events/treeNodeToggled","kind":"event","title":"treeNodeToggled","summary":"트리 노드의 펼침 상태가 바뀌었을 때 발생합니다. 경로와 expanded를 확인합니다.","member":{"name":"treeNodeToggled","type":"{ path: readonly string[]; expanded: boolean }","description":"트리 노드의 펼침 상태가 바뀌었을 때 발생합니다. 경로와 expanded를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"트리 노드의 펼침 상태가 바뀌었을 때 발생합니다. 경로와 expanded를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"treeNodeToggled: { path: readonly string[]; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('treeNodeToggled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('treeNodeToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/events/detailRowToggled","kind":"event","title":"detailRowToggled","summary":"부모 행의 상세 패널 펼침 상태가 바뀌었을 때 발생합니다.","member":{"name":"detailRowToggled","type":"{ rowId: string | number; expanded: boolean }","description":"부모 행의 상세 패널 펼침 상태가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 행의 상세 패널 펼침 상태가 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailRowToggled: { rowId: string | number; expanded: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('detailRowToggled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/events/detailRowCreated","kind":"event","title":"detailRowCreated","summary":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다.","member":{"name":"detailRowCreated","type":"{ rowId: string | number; master: GridRow | null }","description":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailRowCreated: { rowId: string | number; master: GridRow | null }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('detailRowCreated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowCreated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/events/detailRowDestroyed","kind":"event","title":"detailRowDestroyed","summary":"상세 패널이 해제되었을 때 발생합니다. 앱에서 연결한 자원도 해당 rowId 기준으로 정리합니다.","member":{"name":"detailRowDestroyed","type":"{ rowId: string | number }","description":"상세 패널이 해제되었을 때 발생합니다. 앱에서 연결한 자원도 해당 rowId 기준으로 정리합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"상세 패널이 해제되었을 때 발생합니다. 앱에서 연결한 자원도 해당 rowId 기준으로 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in master / detail"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"detailRowDestroyed: { rowId: string | number }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('detailRowDestroyed', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('detailRowDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/master-detail","title":"행 상세","description":"마스터·상세는 주문 목록에서 한 주문의 품목이나 배송 이력을 펼쳐 보는 구성입니다. 상위 행은 요약이고 그 아래 전체 폭의 패널이 상세 내용을 담습니다."}]}]}]},{"path":"/ko/docs/events/rangeSelectionChanged","kind":"event","title":"rangeSelectionChanged","summary":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다.","member":{"name":"rangeSelectionChanged","type":"{ ranges: CellRangeBounds[] }","description":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell range selection"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rangeSelectionChanged: { ranges: CellRangeBounds[] }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rangeSelectionChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rangeSelectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-selection","title":"셀 범위 선택","description":"셀 범위는 여러 행·열에 걸친 직사각형입니다. 복사·붙여넣기·채우기·차트 생성이 사용할 범위를 정하며, 선택 자체는 값을 수정하지 않습니다."}]}]}]},{"path":"/ko/docs/events/toolPanelToggled","kind":"event","title":"toolPanelToggled","summary":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다.","member":{"name":"toolPanelToggled","type":"{ id: SideBarPanelId; open: boolean }","description":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Columns / Filters tool panels"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"toolPanelToggled: { id: SideBarPanelId; open: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('toolPanelToggled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('toolPanelToggled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tool-panels","title":"도구 패널","description":"도구 패널은 열 표시나 필터 설정처럼 여러 열에 걸친 작업을 한 곳에 모읍니다. 표 안의 데이터 공간과 설정 공간을 나누고 필요할 때만 여는 방식입니다."}]}]}]},{"path":"/ko/docs/events/csvImported","kind":"event","title":"csvImported","summary":"CSV 가져오기를 마쳤을 때 발생합니다. 실제 적용된 행 수와 열 수를 사용자에게 안내합니다.","member":{"name":"csvImported","type":"{ rowCount: number; columnCount: number }","description":"CSV 가져오기를 마쳤을 때 발생합니다. 실제 적용된 행 수와 열 수를 사용자에게 안내합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"CSV 가져오기를 마쳤을 때 발생합니다. 실제 적용된 행 수와 열 수를 사용자에게 안내합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"csvImported: { rowCount: number; columnCount: number }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('csvImported', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('csvImported', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/csv-import","title":"CSV 가져오기","description":"CSV 가져오기는 구분자로 나뉜 텍스트를 새 열과 행으로 바꿉니다. 기존 표에 일부 행을 추가하는 트랜잭션과 달리 importCsvText는 columnDefs와 rowData를 교체합니다."}]}]}]},{"path":"/ko/docs/events/clipboardCopied","kind":"event","title":"clipboardCopied","summary":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다.","member":{"name":"clipboardCopied","type":"{ text: string; ranges: CellRangeBounds[] }","description":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Range copy / paste"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clipboardCopied: { text: string; ranges: CellRangeBounds[] }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('clipboardCopied', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('clipboardCopied', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-clipboard","title":"범위 복사와 붙여넣기","description":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다."}]}]}]},{"path":"/ko/docs/events/clipboardPasted","kind":"event","title":"clipboardPasted","summary":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다.","member":{"name":"clipboardPasted","type":"{\n    applied: number;\n    skipped: number;\n    top: number;\n    left: number;\n    changes: GridCellValueChangedDetail[];\n  }","description":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Range copy / paste"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"clipboardPasted: {\n    applied: number;\n    skipped: number;\n    top: number;\n    left: number;\n    changes: GridCellValueChangedDetail[];\n  }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('clipboardPasted', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('clipboardPasted', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/range-clipboard","title":"범위 복사와 붙여넣기","description":"직사각형 범위의 값을 복사하고 같은 행·열 배치로 붙여넣습니다. 시작 셀을 기준으로 대상이 결정되며 편집 불가·권한·검증 규칙을 함께 적용합니다."}]}]}]},{"path":"/ko/docs/events/paginationChanged","kind":"event","title":"paginationChanged","summary":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다.","member":{"name":"paginationChanged","type":"GridPaginationChangedDetail","description":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"paginationChanged: GridPaginationChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('paginationChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('paginationChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pagination","title":"페이지 단위 탐색","description":"페이지 나누기는 한 번에 표시하는 행 수와 이동 위치를 제어합니다. 전체 데이터 양과 한 페이지의 크기는 별도 설정입니다."}]}]}]},{"path":"/ko/docs/events/quickFilterChanged","kind":"event","title":"quickFilterChanged","summary":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다.","member":{"name":"quickFilterChanged","type":"GridQuickFilterChangedDetail","description":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"quickFilterChanged: GridQuickFilterChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('quickFilterChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('quickFilterChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridQuickFilterChangedDetail","title":"GridQuickFilterChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/quick-filter","title":"모든 열에서 빠르게 찾기","description":"빠른 검색은 열을 지정하지 않고 여러 열의 표시 대상에서 문자열을 찾습니다. 사용자가 제품명인지 지역인지 모를 때 진입점으로 적합합니다."}]}]}]},{"path":"/ko/docs/events/emptyStateActionClicked","kind":"event","title":"emptyStateActionClicked","summary":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다.","member":{"name":"emptyStateActionClicked","type":"GridEmptyStateActionDetail","description":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"emptyStateActionClicked: GridEmptyStateActionDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('emptyStateActionClicked', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('emptyStateActionClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/overlays","title":"로딩과 빈 결과","description":"로딩과 빈 데이터 안내는 표가 아무것도 보여 주지 않는 이유를 설명합니다. 요청 중·조회 결과 없음·실패는 서로 다른 상태이므로 같은 빈 화면으로 처리하지 않습니다."}]}]}]},{"path":"/ko/docs/events/activeCellChanged","kind":"event","title":"activeCellChanged","summary":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다.","member":{"name":"activeCellChanged","type":"GridActiveCellChangedDetail","description":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"activeCellChanged: GridActiveCellChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('activeCellChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('activeCellChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/keyboard-a11y-i18n","title":"키보드와 다국어","description":"Grid는 많은 행과 열을 키보드로 탐색하는 작업 공간입니다. 셀 이동·편집·메뉴 진입과 화면 밖 앱 버튼으로 나가는 경로가 모두 이해 가능해야 합니다."}]}]}]},{"path":"/ko/docs/events/cellClicked","kind":"event","title":"cellClicked","summary":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다.","member":{"name":"cellClicked","type":"GridCellClickedDetail","description":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellClicked: GridCellClickedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellClicked', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/cellDoubleClicked","kind":"event","title":"cellDoubleClicked","summary":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다.","member":{"name":"cellDoubleClicked","type":"GridCellDoubleClickedDetail","description":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellDoubleClicked: GridCellDoubleClickedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellDoubleClicked', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellDoubleClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowClicked","kind":"event","title":"rowClicked","summary":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다.","member":{"name":"rowClicked","type":"GridRowClickedDetail","description":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowClicked: GridRowClickedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowClicked', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/cellEditingRequested","kind":"event","title":"cellEditingRequested","summary":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다.","member":{"name":"cellEditingRequested","type":"GridCellEditingRequestedDetail","description":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellEditingRequested: GridCellEditingRequestedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellEditingRequested', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingRequested', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/cellEditingCancelled","kind":"event","title":"cellEditingCancelled","summary":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요.","member":{"name":"cellEditingCancelled","type":"GridCellEditingCancelledDetail","description":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellEditingCancelled: GridCellEditingCancelledDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellEditingCancelled', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingCancelled', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditingCancelledDetail","title":"GridCellEditingCancelledDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/cellEditingCommitted","kind":"event","title":"cellEditingCommitted","summary":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다.","member":{"name":"cellEditingCommitted","type":"GridCellEditingCommittedDetail","description":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellEditingCommitted: GridCellEditingCommittedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellEditingCommitted', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellEditingCommitted', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditingCommittedDetail","title":"GridCellEditingCommittedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/formulaEvaluated","kind":"event","title":"formulaEvaluated","summary":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다.","member":{"name":"formulaEvaluated","type":"GridFormulaEvaluatedDetail","description":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"formulaEvaluated: GridFormulaEvaluatedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('formulaEvaluated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('formulaEvaluated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFormulaEvaluatedDetail","title":"GridFormulaEvaluatedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/events/formulaError","kind":"event","title":"formulaError","summary":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다.","member":{"name":"formulaError","type":"GridFormulaErrorDetail","description":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"formulaError: GridFormulaErrorDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('formulaError', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('formulaError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFormulaErrorDetail","title":"GridFormulaErrorDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/events/workbookBindingChanged","kind":"event","title":"workbookBindingChanged","summary":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다.","member":{"name":"workbookBindingChanged","type":"GridWorkbookBindingChangedDetail","description":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"workbookBindingChanged: GridWorkbookBindingChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('workbookBindingChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookBindingChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/events/workbookBindingError","kind":"event","title":"workbookBindingError","summary":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다.","member":{"name":"workbookBindingError","type":"GridWorkbookBindingErrorDetail","description":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"workbookBindingError: GridWorkbookBindingErrorDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('workbookBindingError', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookBindingError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/events/chunkLoading","kind":"event","title":"chunkLoading","summary":"기능 코드 조각의 로딩이 시작되었을 때 발생합니다. 행 데이터 조회 이벤트와 구분합니다.","member":{"name":"chunkLoading","type":"GridChunkLoadEventDetail","description":"기능 코드 조각의 로딩이 시작되었을 때 발생합니다. 행 데이터 조회 이벤트와 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기능 코드 조각의 로딩이 시작되었을 때 발생합니다. 행 데이터 조회 이벤트와 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chunkLoading: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chunkLoading', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoading', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/events/chunkLoaded","kind":"event","title":"chunkLoaded","summary":"기능 코드 조각을 불러왔을 때 발생합니다.","member":{"name":"chunkLoaded","type":"GridChunkLoadEventDetail","description":"기능 코드 조각을 불러왔을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기능 코드 조각을 불러왔을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chunkLoaded: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chunkLoaded', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoaded', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/events/chunkLoadFailed","kind":"event","title":"chunkLoadFailed","summary":"기능 코드 로딩이 실패했을 때 발생합니다. 오류와 대상 기능을 확인해 재시도·대체 안내에 연결합니다.","member":{"name":"chunkLoadFailed","type":"GridChunkLoadEventDetail","description":"기능 코드 로딩이 실패했을 때 발생합니다. 오류와 대상 기능을 확인해 재시도·대체 안내에 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"기능 코드 로딩이 실패했을 때 발생합니다. 오류와 대상 기능을 확인해 재시도·대체 안내에 연결합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chunkLoadFailed: GridChunkLoadEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chunkLoadFailed', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chunkLoadFailed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/events/componentError","kind":"event","title":"componentError","summary":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다.","member":{"name":"componentError","type":"GridComponentErrorDetails","description":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"componentError: GridComponentErrorDetails","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('componentError', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('componentError', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/custom-cells","title":"셀 표현 바꾸기","description":"셀 렌더러는 데이터의 표시 방법을 바꿉니다. 상태 배지·링크·액션 버튼이 필요한 경우 사용하되 정렬·필터에 사용할 원본 값은 별도로 유지합니다."}]}]}]},{"path":"/ko/docs/events/rowDataChanged","kind":"event","title":"rowDataChanged","summary":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다.","member":{"name":"rowDataChanged","type":"GridRowDataChangedDetail","description":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDataChanged: GridRowDataChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDataChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDataChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/events/cellValueChanged","kind":"event","title":"cellValueChanged","summary":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다.","member":{"name":"cellValueChanged","type":"GridCellValueChangedDetail","description":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellValueChanged: GridCellValueChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellValueChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/data-updates","title":"데이터 갱신","description":"조회 결과 전체를 새로 받았다면 rowData를 교체합니다. 일부 주문만 바뀌었다면 applyTransaction에 add·update·remove를 전달합니다. 갱신은 화면 위치가 아니라 getRowId로 연결됩니다."}]}]}]},{"path":"/ko/docs/events/rowMoved","kind":"event","title":"rowMoved","summary":"행 순서가 이동되었을 때 발생합니다. 이동 전후 인덱스와 해당 행을 읽습니다.","member":{"name":"rowMoved","type":"{ fromIndex: number; toIndex: number; row: unknown }","description":"행 순서가 이동되었을 때 발생합니다. 이동 전후 인덱스와 해당 행을 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 순서가 이동되었을 때 발생합니다. 이동 전후 인덱스와 해당 행을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowMoved: { fromIndex: number; toIndex: number; row: unknown }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowMoved', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowMoved', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowGroupChanged","kind":"event","title":"rowGroupChanged","summary":"행 그룹 기준이 바뀌었을 때 발생합니다. 기준 필드와 그룹 해제 상태를 확인합니다.","member":{"name":"rowGroupChanged","type":"{ groupBy: string | null }","description":"행 그룹 기준이 바뀌었을 때 발생합니다. 기준 필드와 그룹 해제 상태를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 그룹 기준이 바뀌었을 때 발생합니다. 기준 필드와 그룹 해제 상태를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Row grouping, built-in aggregation and group totals"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowGroupChanged: { groupBy: string | null }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowGroupChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowGroupChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-grouping","title":"그룹과 집계","description":"행 그룹은 같은 지역이나 팀에 속한 원본 행을 접고 펼칠 수 있게 묶습니다. 열 그룹이 머리글을 묶는 것과 달리, 행 그룹은 표시 행과 집계 결과를 바꿉니다."}]}]}]},{"path":"/ko/docs/events/pivotPanelChanged","kind":"event","title":"pivotPanelChanged","summary":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다.","member":{"name":"pivotPanelChanged","type":"PivotPanelChangeDetail","description":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotPanelChanged: PivotPanelChangeDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pivotPanelChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotPanelChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/events/pivotChanged","kind":"event","title":"pivotChanged","summary":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요.","member":{"name":"pivotChanged","type":"PivotPanelChangeDetail","description":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotChanged: PivotPanelChangeDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pivotChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/events/pivotModeChanged","kind":"event","title":"pivotModeChanged","summary":"피벗 모드의 켜짐·꺼짐이 바뀌었을 때 발생합니다.","member":{"name":"pivotModeChanged","type":"{ pivotMode: boolean }","description":"피벗 모드의 켜짐·꺼짐이 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 모드의 켜짐·꺼짐이 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotModeChanged: { pivotMode: boolean }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pivotModeChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotModeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/events/contextMenuItemClicked","kind":"event","title":"contextMenuItemClicked","summary":"셀 우클릭 메뉴 항목을 실행했을 때 발생합니다. 항목 ID와 대상 셀 위치를 읽습니다.","member":{"name":"contextMenuItemClicked","type":"{ id: string; rowIndex: number; field?: string }","description":"셀 우클릭 메뉴 항목을 실행했을 때 발생합니다. 항목 ID와 대상 셀 위치를 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 우클릭 메뉴 항목을 실행했을 때 발생합니다. 항목 ID와 대상 셀 위치를 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in context menu"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"contextMenuItemClicked: { id: string; rowIndex: number; field?: string }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('contextMenuItemClicked', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('contextMenuItemClicked', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/context-menu","title":"셀 컨텍스트 메뉴","description":"셀의 우클릭 메뉴는 현재 위치를 대상으로 복사·행 복사·내보내기 같은 작업을 제공합니다. 반복 사용 기능은 툴바나 키보드 접근도 함께 제공하는 것이 좋습니다."}]}]}]},{"path":"/ko/docs/events/remoteEditApplied","kind":"event","title":"remoteEditApplied","summary":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다.","member":{"name":"remoteEditApplied","type":"GridRemoteEditAppliedDetail","description":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"remoteEditApplied: GridRemoteEditAppliedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('remoteEditApplied', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('remoteEditApplied', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/presenceChanged","kind":"event","title":"presenceChanged","summary":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다.","member":{"name":"presenceChanged","type":"GridPresenceChangedDetail","description":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"presenceChanged: GridPresenceChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('presenceChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('presenceChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/collabConflictResolved","kind":"event","title":"collabConflictResolved","summary":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다.","member":{"name":"collabConflictResolved","type":"GridCollabConflict","description":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collabConflictResolved: GridCollabConflict","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('collabConflictResolved', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collabConflictResolved', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/collaboratorJoined","kind":"event","title":"collaboratorJoined","summary":"협업 방에 참가자가 들어왔을 때 발생합니다.","member":{"name":"collaboratorJoined","type":"GridCollaboratorInfo","description":"협업 방에 참가자가 들어왔을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 방에 참가자가 들어왔을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collaboratorJoined: GridCollaboratorInfo","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('collaboratorJoined', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collaboratorJoined', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/collaboratorLeft","kind":"event","title":"collaboratorLeft","summary":"협업 방에서 참가자가 나갔을 때 발생합니다. ID로 앱의 참가자 목록을 갱신합니다.","member":{"name":"collaboratorLeft","type":"{ id: string }","description":"협업 방에서 참가자가 나갔을 때 발생합니다. ID로 앱의 참가자 목록을 갱신합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 방에서 참가자가 나갔을 때 발생합니다. ID로 앱의 참가자 목록을 갱신합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"collaboratorLeft: { id: string }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('collaboratorLeft', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('collaboratorLeft', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/syncStatusChanged","kind":"event","title":"syncStatusChanged","summary":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다.","member":{"name":"syncStatusChanged","type":"{ status: GridSyncStatus }","description":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Real-time collaboration (existing Pro grade retained)"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"syncStatusChanged: { status: GridSyncStatus }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('syncStatusChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('syncStatusChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/collaboration","title":"실시간 협업","description":"협업은 같은 방에 참여한 사용자 사이에서 편집·커서·참여 상태를 공유합니다. 방 이름만 지정했다고 다른 기기의 데이터가 인터넷을 통해 자동 연결되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/cellCommentsChanged","kind":"event","title":"cellCommentsChanged","summary":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다.","member":{"name":"cellCommentsChanged","type":"{ rowId: string; field: string; comments: GridCellComment[] }","description":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellCommentsChanged: { rowId: string; field: string; comments: GridCellComment[] }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellCommentsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellCommentsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/events/commentMentioned","kind":"event","title":"commentMentioned","summary":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다.","member":{"name":"commentMentioned","type":"{ rowId: string; field: string; comment: GridCellComment }","description":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Cell notes editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"commentMentioned: { rowId: string; field: string; comment: GridCellComment }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('commentMentioned', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('commentMentioned', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-notes","title":"셀 메모","description":"셀 메모는 값 자체를 바꾸지 않고 검토 이유나 추가 설명을 남깁니다. 독립 셀 메모와 협업 세션의 댓글 스레드는 저장 방식과 API가 다르므로 먼저 원하는 방식을 선택합니다."}]}]}]},{"path":"/ko/docs/events/auditLogChanged","kind":"event","title":"auditLogChanged","summary":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다.","member":{"name":"auditLogChanged","type":"{ entry: AuditEntry }","description":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"auditLogChanged: { entry: AuditEntry }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('auditLogChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('auditLogChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/audit-log","title":"변경 이력 조회","description":"감사 로그는 행·셀·선택 변경과 실행 취소·다시 실행 전이를 추적합니다. 현재 표의 값만으로 알 수 없는 변경 흐름을 확인하는 데 사용합니다."}]}]}]},{"path":"/ko/docs/events/conditionalFormatsChanged","kind":"event","title":"conditionalFormatsChanged","summary":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다.","member":{"name":"conditionalFormatsChanged","type":"{ rules: ConditionalFormatRule[] }","description":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"conditionalFormatsChanged: { rules: ConditionalFormatRule[] }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('conditionalFormatsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('conditionalFormatsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/conditional-formats","title":"조건부 서식","description":"조건부 서식은 값의 의미에 따라 배경·글자 등 표시를 바꿉니다. 재고 부족이나 목표 초과를 빠르게 찾는 데 쓰며 원본 값이나 검증 결과를 바꾸지는 않습니다."}]}]}]},{"path":"/ko/docs/events/cellValidationFailed","kind":"event","title":"cellValidationFailed","summary":"입력 검증이 실패했을 때 발생합니다. 대상 셀·입력값·메시지를 읽어 수정할 위치를 안내합니다.","member":{"name":"cellValidationFailed","type":"{ rowIndex: number; field: string; value: unknown; message: string }","description":"입력 검증이 실패했을 때 발생합니다. 대상 셀·입력값·메시지를 읽어 수정할 위치를 안내합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"입력 검증이 실패했을 때 발생합니다. 대상 셀·입력값·메시지를 읽어 수정할 위치를 안내합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"cellValidationFailed: { rowIndex: number; field: string; value: unknown; message: string }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('cellValidationFailed', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('cellValidationFailed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/validation-rules","title":"데이터 검증","description":"선언형 규칙으로 필수값·숫자 범위·문자열 형식·사용자 규칙을 검사합니다. 기본 모드는 잘못된 값을 표시하는 방식일 수 있으므로 저장을 막아야 한다면 invalidEditMode를 명시합니다."}]}]}]},{"path":"/ko/docs/events/snapshotCaptured","kind":"event","title":"snapshotCaptured","summary":"데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다.","member":{"name":"snapshotCaptured","type":"{ id: string; name: string; rowCount: number }","description":"데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"데이터 스냅샷이 만들어졌을 때 발생합니다. ID·이름·행 수로 저장 시점을 표시합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"snapshotCaptured: { id: string; name: string; rowCount: number }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('snapshotCaptured', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('snapshotCaptured', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/events/snapshotRestored","kind":"event","title":"snapshotRestored","summary":"데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다.","member":{"name":"snapshotRestored","type":"{ id: string; name: string; rowCount: number }","description":"데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"데이터 스냅샷 복원이 완료되었을 때 발생합니다. 앱 서버 저장까지 완료된 의미는 아닙니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"snapshotRestored: { id: string; name: string; rowCount: number }","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('snapshotRestored', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('snapshotRestored', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/snapshots","title":"데이터 스냅샷","description":"스냅샷은 특정 시점의 rowData를 보관하고 현재 데이터 또는 다른 스냅샷과 비교합니다. 열 너비·필터·포커스를 저장하는 화면 상태 API와는 목적이 다릅니다."}]}]}]},{"path":"/ko/docs/events/xlsxImported","kind":"event","title":"xlsxImported","summary":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다.","member":{"name":"xlsxImported","type":"GridXlsxImportedDetail","description":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"xlsxImported: GridXlsxImportedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('xlsxImported', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('xlsxImported', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/xlsx-import","title":"Excel 가져오기","description":"XLSX 가져오기는 파일을 워크북으로 읽고 선택한 시트를 Grid용 열·행 스냅샷으로 변환합니다. 워크북 전체 파싱 결과와 화면용 스냅샷은 다른 데이터입니다."}]}]}]},{"path":"/ko/docs/events/historyChanged","kind":"event","title":"historyChanged","summary":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다.","member":{"name":"historyChanged","type":"GridHistoryChangedDetail","description":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"historyChanged: GridHistoryChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('historyChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('historyChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridHistoryChangedDetail","title":"GridHistoryChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/undo-redo","title":"편집 이력","description":"기록된 편집 트랜잭션을 되돌리거나 다시 적용합니다. 한 작업에 여러 셀 변경이 포함될 수 있으므로 셀 수와 이력 수를 같다고 가정하지 마세요."}]}]}]},{"path":"/ko/docs/events/columnResized","kind":"event","title":"columnResized","summary":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다.","member":{"name":"columnResized","type":"GridColumnResizedDetail","description":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnResized: GridColumnResizedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('columnResized', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnResized', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnResizedDetail","title":"GridColumnResizedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/columnReordered","kind":"event","title":"columnReordered","summary":"열 순서가 바뀌었을 때 발생합니다.","member":{"name":"columnReordered","type":"GridColumnReorderedDetail","description":"열 순서가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 순서가 바뀌었을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnReordered: GridColumnReorderedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('columnReordered', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnReordered', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnReorderedDetail","title":"GridColumnReorderedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/columnVisibilityChanged","kind":"event","title":"columnVisibilityChanged","summary":"열 표시·숨김 상태가 바뀌었을 때 발생합니다.","member":{"name":"columnVisibilityChanged","type":"GridColumnVisibilityChangedDetail","description":"열 표시·숨김 상태가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"열 표시·숨김 상태가 바뀌었을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"columnVisibilityChanged: GridColumnVisibilityChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('columnVisibilityChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('columnVisibilityChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnVisibilityChangedDetail","title":"GridColumnVisibilityChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/column-operations","title":"열 크기와 고정","description":"너비·순서·고정·숨김은 서로 독립적인 열 상태입니다. 주문 번호는 고정하고 보조 정보는 숨기며 긴 제품명만 넓히는 식으로 조합할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/selectionChanged","kind":"event","title":"selectionChanged","summary":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다.","member":{"name":"selectionChanged","type":"GridSelectionChangedDetail","description":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"selectionChanged: GridSelectionChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('selectionChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('selectionChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-selection","title":"행 단위 선택","description":"행 선택은 승인·내보내기·배정 같은 일괄 작업의 대상을 고릅니다. 셀 범위 선택과 달리 한 주문 전체를 선택합니다."}]}]}]},{"path":"/ko/docs/events/rowHoverChanged","kind":"event","title":"rowHoverChanged","summary":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다.","member":{"name":"rowHoverChanged","type":"GridRowHoverChangedDetail","description":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowHoverChanged: GridRowHoverChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowHoverChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowHoverChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowHoverChangedDetail","title":"GridRowHoverChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-hover","title":"행 따라가기","description":"행 hover는 포인터가 있는 행을 구분해 가로로 긴 표를 읽기 쉽게 합니다. 선택한 행과는 다른 상태이며 업무 처리 대상이 자동으로 선택되는 것은 아닙니다."}]}]}]},{"path":"/ko/docs/events/themeChanged","kind":"event","title":"themeChanged","summary":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다.","member":{"name":"themeChanged","type":"GridThemeChangedDetail","description":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"themeChanged: GridThemeChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('themeChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('themeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/theming","title":"화면에 맞는 테마","description":"Grid 테마는 표 안의 배경·선·텍스트·선택 상태를 함께 구성합니다. 페이지 전체의 배경을 덮는 설정이 아니라 표의 읽기 환경을 맞추는 설정입니다."}]}]}]},{"path":"/ko/docs/events/localeChanged","kind":"event","title":"localeChanged","summary":"Grid 언어 설정이 바뀌었을 때 발생합니다.","member":{"name":"localeChanged","type":"GridLocaleChangedDetail","description":"Grid 언어 설정이 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 언어 설정이 바뀌었을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"localeChanged: GridLocaleChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('localeChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('localeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/keyboard-a11y-i18n","title":"키보드와 다국어","description":"Grid는 많은 행과 열을 키보드로 탐색하는 작업 공간입니다. 셀 이동·편집·메뉴 진입과 화면 밖 앱 버튼으로 나가는 경로가 모두 이해 가능해야 합니다."}]}]}]},{"path":"/ko/docs/events/gridObjectChanged","kind":"event","title":"gridObjectChanged","summary":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다.","member":{"name":"gridObjectChanged","type":"GridLiveObjectEvent<GridData>","description":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"gridObjectChanged: GridLiveObjectEvent<GridData>","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('gridObjectChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('gridObjectChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/data-event-access","title":"데이터와 이벤트","description":"Grid API는 현재 상태를 읽거나 변경하는 호출이고, 이벤트는 사용자가 조작하거나 데이터가 바뀐 결과를 알리는 통로입니다. 둘을 연결하면 앱의 저장 버튼·상세 패널·변경 내역을 구성할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/stateUpdated","kind":"event","title":"stateUpdated","summary":"통합 화면 상태가 갱신되었을 때 발생합니다. 잦은 이벤트는 앱에서 저장 주기를 조절하세요.","member":{"name":"stateUpdated","type":"SyGridStateUpdatedDetail","description":"통합 화면 상태가 갱신되었을 때 발생합니다. 잦은 이벤트는 앱에서 저장 주기를 조절하세요."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"통합 화면 상태가 갱신되었을 때 발생합니다. 잦은 이벤트는 앱에서 저장 주기를 조절하세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"stateUpdated: SyGridStateUpdatedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('stateUpdated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('stateUpdated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/events/preDestroyed","kind":"event","title":"preDestroyed","summary":"Grid가 해제되기 전에 상태와 캡처 문제를 전달합니다. 화면 설정 저장과 자원 정리에 사용합니다.","member":{"name":"preDestroyed","type":"SyGridPreDestroyedDetail","description":"Grid가 해제되기 전에 상태와 캡처 문제를 전달합니다. 화면 설정 저장과 자원 정리에 사용합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid가 해제되기 전에 상태와 캡처 문제를 전달합니다. 화면 설정 저장과 자원 정리에 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"preDestroyed: SyGridPreDestroyedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('preDestroyed', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('preDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/guides/concepts","title":"설정과 데이터의 기본 원리","description":""},{"path":"/ko/docs/guides/data-event-access","title":"API 호출과 이벤트 연결","description":""}]}]}]},{"path":"/ko/docs/events/batchEditStart","kind":"event","title":"batchEditStart","summary":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다.","member":{"name":"batchEditStart","type":"SyGridBatchEditStartEventDetail","description":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"batchEditStart: SyGridBatchEditStartEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('batchEditStart', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('batchEditStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/events/batchEditEnd","kind":"event","title":"batchEditEnd","summary":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다.","member":{"name":"batchEditEnd","type":"SyGridBatchEditEndEventDetail","description":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Batch editing"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"batchEditEnd: SyGridBatchEditEndEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('batchEditEnd', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('batchEditEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/batch-editing","title":"일괄 편집","description":"배치 편집은 여러 셀의 수정 사항을 임시로 모았다가 한 번에 확정하거나 취소합니다. 임시 값과 확정된 rowData를 구분해야 저장 버튼의 동작이 명확해집니다."}]}]}]},{"path":"/ko/docs/events/rowValueChanged","kind":"event","title":"rowValueChanged","summary":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다.","member":{"name":"rowValueChanged","type":"SyGridRowValueChangedEventDetail","description":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowValueChanged: SyGridRowValueChangedEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowValueChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowValueChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/rowEditStart","kind":"event","title":"rowEditStart","summary":"전체 행 편집이 시작되었을 때 발생합니다.","member":{"name":"rowEditStart","type":"SyGridRowEditStartEventDetail","description":"전체 행 편집이 시작되었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 행 편집이 시작되었을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowEditStart: SyGridRowEditStartEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowEditStart', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowEditStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/rowEditStop","kind":"event","title":"rowEditStop","summary":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다.","member":{"name":"rowEditStop","type":"SyGridRowEditStopEventDetail","description":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowEditStop: SyGridRowEditStopEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowEditStop', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowEditStop', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/cell-editing","title":"셀과 행 편집","description":"셀 편집은 하나의 값을 즉시 수정하고 전체 행 편집은 여러 필드를 하나의 행 작업으로 확정합니다. editor는 입력 UI를, editable은 쓰기 가능 여부를 지정합니다."}]}]}]},{"path":"/ko/docs/events/fillStart","kind":"event","title":"fillStart","summary":"범위 채우기가 시작되었을 때 발생합니다.","member":{"name":"fillStart","type":"SyGridFillStartEventDetail","description":"범위 채우기가 시작되었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"범위 채우기가 시작되었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fillStart: SyGridFillStartEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('fillStart', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('fillStart', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/events/fillEnd","kind":"event","title":"fillEnd","summary":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다.","member":{"name":"fillEnd","type":"SyGridFillEndEventDetail","description":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Fill handle"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"fillEnd: SyGridFillEndEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('fillEnd', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('fillEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/fill-handle","title":"값 채우기","description":"채우기 핸들은 기준 범위의 값을 복사하거나 규칙을 확장합니다. 손잡이를 드래그하는 UI와 fillRange API는 편집 가능 여부·검증·이력을 함께 고려합니다."}]}]}]},{"path":"/ko/docs/events/pivotCombinationConflict","kind":"event","title":"pivotCombinationConflict","summary":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다.","member":{"name":"pivotCombinationConflict","type":"SyGridPivotCombinationConflictDetail","description":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotCombinationConflict: SyGridPivotCombinationConflictDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pivotCombinationConflict', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotCombinationConflict', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/events/pivotColumnsChanged","kind":"event","title":"pivotColumnsChanged","summary":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다.","member":{"name":"pivotColumnsChanged","type":"SyGridPivotColumnsChangedDetail","description":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Pivot"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pivotColumnsChanged: SyGridPivotColumnsChangedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pivotColumnsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pivotColumnsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/pivot","title":"피벗 분석","description":"피벗은 원본 주문을 행 축·열 축·값 축으로 나누어 교차 집계표를 만듭니다. 지역별 주문 행을 접는 그룹과 달리, 고유한 상태 값 등이 새로운 결과 열로 생깁니다."}]}]}]},{"path":"/ko/docs/events/serverStoreUpdated","kind":"event","title":"serverStoreUpdated","summary":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다.","member":{"name":"serverStoreUpdated","type":"SyGridServerStoreUpdatedDetail","description":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Server-Side Row Model"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"serverStoreUpdated: SyGridServerStoreUpdatedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('serverStoreUpdated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('serverStoreUpdated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/server-side-row-model","title":"서버 측 행 모델","description":"서버가 그룹·피벗을 계산하고 펼친 그룹 경로별로 행을 공급하는 모델입니다. 이미 받은 로컬 행을 groupBy로 묶는 방식과 데이터 책임이 다릅니다."}]}]}]},{"path":"/ko/docs/events/rowDragEnter","kind":"event","title":"rowDragEnter","summary":"행 드래그가 대상 영역에 진입했을 때 발생합니다.","member":{"name":"rowDragEnter","type":"SyGridRowDragEventDetail","description":"행 드래그가 대상 영역에 진입했을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 드래그가 대상 영역에 진입했을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragEnter: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDragEnter', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragEnter', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowDragMove","kind":"event","title":"rowDragMove","summary":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요.","member":{"name":"rowDragMove","type":"SyGridRowDragEventDetail","description":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragMove: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDragMove', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragMove', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowDragLeave","kind":"event","title":"rowDragLeave","summary":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다.","member":{"name":"rowDragLeave","type":"SyGridRowDragEventDetail","description":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragLeave: SyGridRowDragEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDragLeave', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragLeave', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowDragEnd","kind":"event","title":"rowDragEnd","summary":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다.","member":{"name":"rowDragEnd","type":"SyGridRowDragEndDetail","description":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragEnd: SyGridRowDragEndDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDragEnd', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragEnd', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowDragCancel","kind":"event","title":"rowDragCancel","summary":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요.","member":{"name":"rowDragCancel","type":"SyGridRowDragCancelDetail","description":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowDragCancel: SyGridRowDragCancelDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowDragCancel', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowDragCancel', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/rowsTransferred","kind":"event","title":"rowsTransferred","summary":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다.","member":{"name":"rowsTransferred","type":"SyGridRowsTransferredDetail","description":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowsTransferred: SyGridRowsTransferredDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowsTransferred', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowsTransferred', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-drag","title":"행 드래그","description":"관리형 행 드래그는 사용자가 정한 순서를 Grid 데이터 순서에 반영합니다. 정렬 조건으로 정해진 표시 순서와 임의 순서 재배치는 충돌할 수 있습니다."}]}]}]},{"path":"/ko/docs/events/spanConflict","kind":"event","title":"spanConflict","summary":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다.","member":{"name":"spanConflict","type":"SyGridSpanConflictEventDetail","description":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"spanConflict: SyGridSpanConflictEventDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('spanConflict', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('spanConflict', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/events/treeReparented","kind":"event","title":"treeReparented","summary":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다.","member":{"name":"treeReparented","type":"SyGridTreeReparentedDetail","description":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Tree data"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"treeReparented: SyGridTreeReparentedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('treeReparented', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('treeReparented', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/tree-data","title":"트리 데이터","description":"트리는 폴더·조직도처럼 부모와 자식 관계가 있는 데이터를 들여쓰기와 펼침 버튼으로 보여 줍니다. 동일한 값끼리 묶는 행 그룹과 달리 부모 관계가 데이터에 이미 존재합니다."}]}]}]},{"path":"/ko/docs/events/pinnedRowsChanged","kind":"event","title":"pinnedRowsChanged","summary":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다.","member":{"name":"pinnedRowsChanged","type":"SyGridPinnedRowsChangedDetail<GridRow>","description":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"pinnedRowsChanged: SyGridPinnedRowsChangedDetail<GridRow>","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('pinnedRowsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('pinnedRowsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/events/rowLayoutRefused","kind":"event","title":"rowLayoutRefused","summary":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다.","member":{"name":"rowLayoutRefused","type":"SyGridRowLayoutRefusedDetail","description":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다."}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"rowLayoutRefused: SyGridRowLayoutRefusedDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('rowLayoutRefused', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('rowLayoutRefused', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/row-layout","title":"행 높이와 고정 행","description":"행 높이, 상하 고정 행, 전체 너비 행, 병합 셀은 서로 다른 레이아웃 기능입니다. 요약값을 항상 보여 주는 목적과 상세 내용을 넓게 보여 주는 목적을 구분해서 선택합니다."}]}]}]},{"path":"/ko/docs/events/workbookValuesPropagated","kind":"event","title":"workbookValuesPropagated","summary":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다.","member":{"name":"workbookValuesPropagated","type":"SyGridWorkbookPropagationDetail","description":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Built-in formulas, references, dependency recalculation and calculated columns"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"workbookValuesPropagated: SyGridWorkbookPropagationDetail","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('workbookValuesPropagated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('workbookValuesPropagated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/formulas","title":"수식 계산","description":"수식은 =로 시작하는 문자열을 계산해 셀에 결과를 표시합니다. 예를 들어 =SUM(A1:A3)은 원본 열 정의의 첫 번째 열과 원본 데이터의 첫 세 행을 참조합니다."}]}]}]},{"path":"/ko/docs/events/chartCreated","kind":"event","title":"chartCreated","summary":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다.","member":{"name":"chartCreated","type":"SyGridChartEvent","description":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chartCreated: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chartCreated', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartCreated', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/events/chartRangeChanged","kind":"event","title":"chartRangeChanged","summary":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다.","member":{"name":"chartRangeChanged","type":"SyGridChartEvent","description":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chartRangeChanged: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chartRangeChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartRangeChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/events/chartOptionsChanged","kind":"event","title":"chartOptionsChanged","summary":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다.","member":{"name":"chartOptionsChanged","type":"SyGridChartEvent","description":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chartOptionsChanged: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chartOptionsChanged', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartOptionsChanged', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/events/chartDestroyed","kind":"event","title":"chartDestroyed","summary":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다.","member":{"name":"chartDestroyed","type":"SyGridChartEvent","description":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다."},"apiKind":"events","sections":[{"id":"meaning","title":"무엇을 하는 API인가요","blocks":[{"kind":"paragraph","text":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다."},{"kind":"paragraph","text":"Pro 기능 관련 API: Integrated range charts and pivot chart tools"}]},{"id":"contract","title":"입력과 결과의 정확한 타입","blocks":[{"kind":"code","source":"chartDestroyed: SyGridChartEvent","language":"typescript"}]},{"id":"usage","title":"사용 흐름","blocks":[{"kind":"paragraph","text":"grid.addEventListener('chartDestroyed', handler)로 구독합니다. 실제 결과는 event.detail에 들어 있고 이름의 대소문자를 구분합니다. 화면을 닫을 때 구독을 해제하세요."},{"kind":"code","source":"const controller = new AbortController();\ngrid.addEventListener('chartDestroyed', event => {\n  console.log(event.detail);\n}, { signal: controller.signal });\n// 화면을 해제할 때 controller.abort();","language":"javascript"}]},{"id":"types","title":"관련 타입 읽기","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"recipes","title":"기능별 설명과 예제","blocks":[{"kind":"links","items":[{"path":"/ko/docs/features/integrated-charts","title":"선택 데이터를 차트로","description":"Grid의 범위를 차트로 연결하면 같은 데이터로 표와 그래프를 함께 읽을 수 있습니다. 숫자 값만 고르면 되는 것이 아니라 범주 열과 값 열을 차트 종류에 맞게 선택해야 합니다."}]}]}]},{"path":"/ko/docs/types","kind":"index","title":"Grid 타입 사전","summary":"입력 객체와 반환 보고서의 세부 구조를 확인하세요. 타입 안의 다른 이름을 선택하면 해당 정의로 이동합니다.","sections":[{"id":"index","title":"타입 목록","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveCell","title":"ActiveCell","description":""},{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/ko/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/ko/docs/types/ActivePagination","title":"ActivePagination","description":""},{"path":"/ko/docs/types/ActiveSort","title":"ActiveSort","description":""},{"path":"/ko/docs/types/ApplyColumnStateOptions","title":"ApplyColumnStateOptions","description":""},{"path":"/ko/docs/types/ApplyColumnStateResult","title":"ApplyColumnStateResult","description":""},{"path":"/ko/docs/types/ApplyRowTransactionResult","title":"ApplyRowTransactionResult","description":""},{"path":"/ko/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""},{"path":"/ko/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""},{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/ko/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/ko/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""},{"path":"/ko/docs/types/AuditSource","title":"AuditSource","description":""},{"path":"/ko/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""},{"path":"/ko/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""},{"path":"/ko/docs/types/CanonicalCell","title":"CanonicalCell","description":""},{"path":"/ko/docs/types/CanonicalRange","title":"CanonicalRange","description":""},{"path":"/ko/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""},{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/ko/docs/types/CellRange","title":"CellRange","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""},{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/ko/docs/types/CfCondition","title":"CfCondition","description":""},{"path":"/ko/docs/types/CfConditionType","title":"CfConditionType","description":""},{"path":"/ko/docs/types/CfStyle","title":"CfStyle","description":""},{"path":"/ko/docs/types/ChartDataTable","title":"ChartDataTable","description":""},{"path":"/ko/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""},{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/ko/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/ko/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""},{"path":"/ko/docs/types/ChartLinkDestroyResult","title":"ChartLinkDestroyResult","description":""},{"path":"/ko/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""},{"path":"/ko/docs/types/ChartLinkFleetReport","title":"ChartLinkFleetReport","description":""},{"path":"/ko/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""},{"path":"/ko/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""},{"path":"/ko/docs/types/ChartLinkPanelStop","title":"ChartLinkPanelStop","description":""},{"path":"/ko/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/ko/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/ko/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""},{"path":"/ko/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""},{"path":"/ko/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""},{"path":"/ko/docs/types/ColumnPinSide","title":"ColumnPinSide","description":""},{"path":"/ko/docs/types/ColumnStateEntry","title":"ColumnStateEntry","description":""},{"path":"/ko/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""},{"path":"/ko/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/ko/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""},{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""},{"path":"/ko/docs/types/ContextMenuActionId","title":"ContextMenuActionId","description":""},{"path":"/ko/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""},{"path":"/ko/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""},{"path":"/ko/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/ko/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""},{"path":"/ko/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/ko/docs/types/CsvExportResult","title":"CsvExportResult","description":""},{"path":"/ko/docs/types/DateFilterOp","title":"DateFilterOp","description":""},{"path":"/ko/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""},{"path":"/ko/docs/types/DateValue","title":"DateValue","description":""},{"path":"/ko/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/ko/docs/types/DetailRowDataParams","title":"DetailRowDataParams","description":""},{"path":"/ko/docs/types/EditTransaction","title":"EditTransaction","description":""},{"path":"/ko/docs/types/EditTransactionPhase","title":"EditTransactionPhase","description":""},{"path":"/ko/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""},{"path":"/ko/docs/types/FillDirection","title":"FillDirection","description":""},{"path":"/ko/docs/types/FillPlanMode","title":"FillPlanMode","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/ko/docs/types/FilterSliceIssue","title":"FilterSliceIssue","description":""},{"path":"/ko/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""},{"path":"/ko/docs/types/GridAsyncValueLoadContext","title":"GridAsyncValueLoadContext","description":""},{"path":"/ko/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""},{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/ko/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/ko/docs/types/GridCellEditingCancelledDetail","title":"GridCellEditingCancelledDetail","description":""},{"path":"/ko/docs/types/GridCellEditingCommittedDetail","title":"GridCellEditingCommittedDetail","description":""},{"path":"/ko/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""},{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/ko/docs/types/GridCellNote","title":"GridCellNote","description":""},{"path":"/ko/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""},{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/ko/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""},{"path":"/ko/docs/types/GridChartContainerRequest","title":"GridChartContainerRequest","description":""},{"path":"/ko/docs/types/GridChartCrossFilterAction","title":"GridChartCrossFilterAction","description":""},{"path":"/ko/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""},{"path":"/ko/docs/types/GridChartCrossFilterIssues","title":"GridChartCrossFilterIssues","description":""},{"path":"/ko/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""},{"path":"/ko/docs/types/GridChartDestroyCause","title":"GridChartDestroyCause","description":""},{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/ko/docs/types/GridChartEventSpine","title":"GridChartEventSpine","description":""},{"path":"/ko/docs/types/GridChartExportFormat","title":"GridChartExportFormat","description":""},{"path":"/ko/docs/types/GridChartExportRefusal","title":"GridChartExportRefusal","description":""},{"path":"/ko/docs/types/GridChartExportRequest","title":"GridChartExportRequest","description":""},{"path":"/ko/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""},{"path":"/ko/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""},{"path":"/ko/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""},{"path":"/ko/docs/types/GridChartFocusStopKind","title":"GridChartFocusStopKind","description":""},{"path":"/ko/docs/types/GridChartMenuColumn","title":"GridChartMenuColumn","description":""},{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/ko/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""},{"path":"/ko/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""},{"path":"/ko/docs/types/GridChartMenuUnavailableReason","title":"GridChartMenuUnavailableReason","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/ko/docs/types/GridChartModelCaptureIssue","title":"GridChartModelCaptureIssue","description":""},{"path":"/ko/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""},{"path":"/ko/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""},{"path":"/ko/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/ko/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""},{"path":"/ko/docs/types/GridChartModelEnvelopeIssueCode","title":"GridChartModelEnvelopeIssueCode","description":""},{"path":"/ko/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""},{"path":"/ko/docs/types/GridChartModelRestoreIssue","title":"GridChartModelRestoreIssue","description":""},{"path":"/ko/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""},{"path":"/ko/docs/types/GridChartModelRestoreStatus","title":"GridChartModelRestoreStatus","description":""},{"path":"/ko/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/ko/docs/types/GridChartModelVersion","title":"GridChartModelVersion","description":""},{"path":"/ko/docs/types/GridChartOptionKey","title":"GridChartOptionKey","description":""},{"path":"/ko/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/ko/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""},{"path":"/ko/docs/types/GridChartPivotTotalColumnMode","title":"GridChartPivotTotalColumnMode","description":""},{"path":"/ko/docs/types/GridChartPivotTotalRowMode","title":"GridChartPivotTotalRowMode","description":""},{"path":"/ko/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""},{"path":"/ko/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/ko/docs/types/GridChartProperties","title":"GridChartProperties","description":""},{"path":"/ko/docs/types/GridChartSourceSnapshot","title":"GridChartSourceSnapshot","description":""},{"path":"/ko/docs/types/GridChartSyncMutation","title":"GridChartSyncMutation","description":""},{"path":"/ko/docs/types/GridChartTypeRefusalReason","title":"GridChartTypeRefusalReason","description":""},{"path":"/ko/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""},{"path":"/ko/docs/types/GridChunkFailureReason","title":"GridChunkFailureReason","description":""},{"path":"/ko/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/ko/docs/types/GridChunkKind","title":"GridChunkKind","description":""},{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/ko/docs/types/GridChunkTier","title":"GridChunkTier","description":""},{"path":"/ko/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""},{"path":"/ko/docs/types/GridCollabSelection","title":"GridCollabSelection","description":""},{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/ko/docs/types/GridColumnDef","title":"GridColumnDef","description":""},{"path":"/ko/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/ko/docs/types/GridColumnMenuItem","title":"GridColumnMenuItem","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridColumnReorderedDetail","title":"GridColumnReorderedDetail","description":""},{"path":"/ko/docs/types/GridColumnResizedDetail","title":"GridColumnResizedDetail","description":""},{"path":"/ko/docs/types/GridColumnSortState","title":"GridColumnSortState","description":""},{"path":"/ko/docs/types/GridColumnVisibilityChangedDetail","title":"GridColumnVisibilityChangedDetail","description":""},{"path":"/ko/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""},{"path":"/ko/docs/types/GridComponentConstructor","title":"GridComponentConstructor","description":""},{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/ko/docs/types/GridComponentErrorCode","title":"GridComponentErrorCode","description":""},{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/ko/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""},{"path":"/ko/docs/types/GridComponentFactoryContext","title":"GridComponentFactoryContext","description":""},{"path":"/ko/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""},{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/ko/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""},{"path":"/ko/docs/types/GridComponentLifecyclePhase","title":"GridComponentLifecyclePhase","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""},{"path":"/ko/docs/types/GridEditSource","title":"GridEditSource","description":""},{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/ko/docs/types/GridEditorValidationError","title":"GridEditorValidationError","description":""},{"path":"/ko/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""},{"path":"/ko/docs/types/GridEngineMode","title":"GridEngineMode","description":""},{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/ko/docs/types/GridEventSource","title":"GridEventSource","description":""},{"path":"/ko/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/ko/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/ko/docs/types/GridFieldLeaf","title":"GridFieldLeaf","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""},{"path":"/ko/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/GridFilterModifiedDetail","title":"GridFilterModifiedDetail","description":""},{"path":"/ko/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/ko/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/ko/docs/types/GridFocusHandoff","title":"GridFocusHandoff","description":""},{"path":"/ko/docs/types/GridFormulaErrorDetail","title":"GridFormulaErrorDetail","description":""},{"path":"/ko/docs/types/GridFormulaEvaluatedDetail","title":"GridFormulaEvaluatedDetail","description":""},{"path":"/ko/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridHistoryChangedDetail","title":"GridHistoryChangedDetail","description":""},{"path":"/ko/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/ko/docs/types/GridLiveObjectKind","title":"GridLiveObjectKind","description":""},{"path":"/ko/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/ko/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""},{"path":"/ko/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""},{"path":"/ko/docs/types/GridLocalePresetName","title":"GridLocalePresetName","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""},{"path":"/ko/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""},{"path":"/ko/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/GridNoteCell","title":"GridNoteCell","description":""},{"path":"/ko/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""},{"path":"/ko/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""},{"path":"/ko/docs/types/GridPathValue","title":"GridPathValue","description":""},{"path":"/ko/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""},{"path":"/ko/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/ko/docs/types/GridQuickFilterChangedDetail","title":"GridQuickFilterChangedDetail","description":""},{"path":"/ko/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""},{"path":"/ko/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""},{"path":"/ko/docs/types/GridRendererCellIdentity","title":"GridRendererCellIdentity","description":""},{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/ko/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/ko/docs/types/GridRendererHost","title":"GridRendererHost","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""},{"path":"/ko/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""},{"path":"/ko/docs/types/GridRichSelectOption","title":"GridRichSelectOption","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""},{"path":"/ko/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""},{"path":"/ko/docs/types/GridRowHoverChangedDetail","title":"GridRowHoverChangedDetail","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/ko/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""},{"path":"/ko/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""},{"path":"/ko/docs/types/GridSortDirection","title":"GridSortDirection","description":""},{"path":"/ko/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/ko/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""},{"path":"/ko/docs/types/GridThemeObject","title":"GridThemeObject","description":""},{"path":"/ko/docs/types/GridThemePresetName","title":"GridThemePresetName","description":""},{"path":"/ko/docs/types/GridTokenName","title":"GridTokenName","description":""},{"path":"/ko/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""},{"path":"/ko/docs/types/GridUnavailableBehaviour","title":"GridUnavailableBehaviour","description":""},{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""},{"path":"/ko/docs/types/GridWorkbookBindingChangeKind","title":"GridWorkbookBindingChangeKind","description":""},{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/ko/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""},{"path":"/ko/docs/types/GroupableLeaf","title":"GroupableLeaf","description":""},{"path":"/ko/docs/types/InfiniteGetRowsParams","title":"InfiniteGetRowsParams","description":""},{"path":"/ko/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""},{"path":"/ko/docs/types/LoadingMode","title":"LoadingMode","description":""},{"path":"/ko/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""},{"path":"/ko/docs/types/MessageKey","title":"MessageKey","description":""},{"path":"/ko/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""},{"path":"/ko/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""},{"path":"/ko/docs/types/NestedObject","title":"NestedObject","description":""},{"path":"/ko/docs/types/NumberFilterOp","title":"NumberFilterOp","description":""},{"path":"/ko/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""},{"path":"/ko/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/ko/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/ko/docs/types/PdfExportFontBytes","title":"PdfExportFontBytes","description":""},{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/ko/docs/types/PdfExportOrientation","title":"PdfExportOrientation","description":""},{"path":"/ko/docs/types/PdfExportPageSize","title":"PdfExportPageSize","description":""},{"path":"/ko/docs/types/PdfExportResult","title":"PdfExportResult","description":""},{"path":"/ko/docs/types/PivotPanelAxis","title":"PivotPanelAxis","description":""},{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""},{"path":"/ko/docs/types/PivotPanelChangeOperation","title":"PivotPanelChangeOperation","description":""},{"path":"/ko/docs/types/PivotPanelConfig","title":"PivotPanelConfig","description":""},{"path":"/ko/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""},{"path":"/ko/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""},{"path":"/ko/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""},{"path":"/ko/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/ko/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""},{"path":"/ko/docs/types/RowDataTransaction","title":"RowDataTransaction","description":""},{"path":"/ko/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""},{"path":"/ko/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/ko/docs/types/ServerSideColumn","title":"ServerSideColumn","description":""},{"path":"/ko/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""},{"path":"/ko/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""},{"path":"/ko/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""},{"path":"/ko/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""},{"path":"/ko/docs/types/ServerSidePivotResultColumn","title":"ServerSidePivotResultColumn","description":""},{"path":"/ko/docs/types/SetFilterSpec","title":"SetFilterSpec","description":""},{"path":"/ko/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""},{"path":"/ko/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""},{"path":"/ko/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/ko/docs/types/SnapshotFieldChange","title":"SnapshotFieldChange","description":""},{"path":"/ko/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""},{"path":"/ko/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""},{"path":"/ko/docs/types/SortModelEntry","title":"SortModelEntry","description":""},{"path":"/ko/docs/types/StateUpdateSource","title":"StateUpdateSource","description":""},{"path":"/ko/docs/types/StringKey","title":"StringKey","description":""},{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/SyGridActiveCell","title":"SyGridActiveCell","description":""},{"path":"/ko/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsRefusalReason","title":"SyGridAlignedGridsRefusalReason","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""},{"path":"/ko/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""},{"path":"/ko/docs/types/SyGridAlignedMismatchReason","title":"SyGridAlignedMismatchReason","description":""},{"path":"/ko/docs/types/SyGridAlignedPinSide","title":"SyGridAlignedPinSide","description":""},{"path":"/ko/docs/types/SyGridAlignedStats","title":"SyGridAlignedStats","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/ko/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/ko/docs/types/SyGridApplyColumnStateOptions","title":"SyGridApplyColumnStateOptions","description":""},{"path":"/ko/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""},{"path":"/ko/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""},{"path":"/ko/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""},{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingCancelledEventDetail","title":"SyGridCellEditingCancelledEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingCommittedEventDetail","title":"SyGridCellEditingCommittedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""},{"path":"/ko/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""},{"path":"/ko/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/ko/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""},{"path":"/ko/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/ko/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""},{"path":"/ko/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""},{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""},{"path":"/ko/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/ko/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""},{"path":"/ko/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""},{"path":"/ko/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""},{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""},{"path":"/ko/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/ko/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""},{"path":"/ko/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""},{"path":"/ko/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/ko/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""},{"path":"/ko/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/ko/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/ko/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/ko/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""},{"path":"/ko/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/ko/docs/types/SyGridColSpanRejection","title":"SyGridColSpanRejection","description":""},{"path":"/ko/docs/types/SyGridCollabConnectOptions","title":"SyGridCollabConnectOptions","description":""},{"path":"/ko/docs/types/SyGridColumnReorderedEventDetail","title":"SyGridColumnReorderedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColumnResizedEventDetail","title":"SyGridColumnResizedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColumnState","title":"SyGridColumnState","description":""},{"path":"/ko/docs/types/SyGridColumnVisibilityChangedEventDetail","title":"SyGridColumnVisibilityChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""},{"path":"/ko/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/ko/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""},{"path":"/ko/docs/types/SyGridDisplayRowFeature","title":"SyGridDisplayRowFeature","description":""},{"path":"/ko/docs/types/SyGridDisplayRowIdentity","title":"SyGridDisplayRowIdentity","description":""},{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/ko/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/ko/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""},{"path":"/ko/docs/types/SyGridDisplayRowRefusal","title":"SyGridDisplayRowRefusal","description":""},{"path":"/ko/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""},{"path":"/ko/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/ko/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/ko/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""},{"path":"/ko/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""},{"path":"/ko/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/ko/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""},{"path":"/ko/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""},{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/ko/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/ko/docs/types/SyGridFocusSlice","title":"SyGridFocusSlice","description":""},{"path":"/ko/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""},{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/ko/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/ko/docs/types/SyGridFullWidthRefusalReason","title":"SyGridFullWidthRefusalReason","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowKind","title":"SyGridFullWidthRowKind","description":""},{"path":"/ko/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""},{"path":"/ko/docs/types/SyGridGroupCheckEvidence","title":"SyGridGroupCheckEvidence","description":""},{"path":"/ko/docs/types/SyGridGroupCheckState","title":"SyGridGroupCheckState","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""},{"path":"/ko/docs/types/SyGridGroupCheckUnavailableReason","title":"SyGridGroupCheckUnavailableReason","description":""},{"path":"/ko/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""},{"path":"/ko/docs/types/SyGridHistoryChangedEventDetail","title":"SyGridHistoryChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridPaginationSlice","title":"SyGridPaginationSlice","description":""},{"path":"/ko/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""},{"path":"/ko/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""},{"path":"/ko/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowBand","title":"SyGridPinnedRowBand","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/SyGridPinnedRowFeature","title":"SyGridPinnedRowFeature","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""},{"path":"/ko/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/ko/docs/types/SyGridPinnedRowRejectionReason","title":"SyGridPinnedRowRejectionReason","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""},{"path":"/ko/docs/types/SyGridPivotAxes","title":"SyGridPivotAxes","description":""},{"path":"/ko/docs/types/SyGridPivotColumnIdentity","title":"SyGridPivotColumnIdentity","description":""},{"path":"/ko/docs/types/SyGridPivotColumnKind","title":"SyGridPivotColumnKind","description":""},{"path":"/ko/docs/types/SyGridPivotColumnMove","title":"SyGridPivotColumnMove","description":""},{"path":"/ko/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""},{"path":"/ko/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""},{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""},{"path":"/ko/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""},{"path":"/ko/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""},{"path":"/ko/docs/types/SyGridReparentAtomicity","title":"SyGridReparentAtomicity","description":""},{"path":"/ko/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/ko/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""},{"path":"/ko/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/ko/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/ko/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/ko/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragEndReason","title":"SyGridRowDragEndReason","description":""},{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/ko/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""},{"path":"/ko/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/ko/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""},{"path":"/ko/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""},{"path":"/ko/docs/types/SyGridRowDropPosition","title":"SyGridRowDropPosition","description":""},{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/ko/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowId","title":"SyGridRowId","description":""},{"path":"/ko/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""},{"path":"/ko/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/ko/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/ko/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""},{"path":"/ko/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/ko/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/ko/docs/types/SyGridRowTransferEntry","title":"SyGridRowTransferEntry","description":""},{"path":"/ko/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""},{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""},{"path":"/ko/docs/types/SyGridScrollSlice","title":"SyGridScrollSlice","description":""},{"path":"/ko/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridServerBlockSnapshot","title":"SyGridServerBlockSnapshot","description":""},{"path":"/ko/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""},{"path":"/ko/docs/types/SyGridServerFlushCause","title":"SyGridServerFlushCause","description":""},{"path":"/ko/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""},{"path":"/ko/docs/types/SyGridServerFlushStatus","title":"SyGridServerFlushStatus","description":""},{"path":"/ko/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""},{"path":"/ko/docs/types/SyGridServerGroupToggledNode","title":"SyGridServerGroupToggledNode","description":""},{"path":"/ko/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""},{"path":"/ko/docs/types/SyGridServerPivotColumnDescriptor","title":"SyGridServerPivotColumnDescriptor","description":""},{"path":"/ko/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""},{"path":"/ko/docs/types/SyGridServerPivotUsageDisposition","title":"SyGridServerPivotUsageDisposition","description":""},{"path":"/ko/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/ko/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""},{"path":"/ko/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""},{"path":"/ko/docs/types/SyGridServerRefreshStatus","title":"SyGridServerRefreshStatus","description":""},{"path":"/ko/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/ko/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""},{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/ko/docs/types/SyGridServerSelectionSetStatus","title":"SyGridServerSelectionSetStatus","description":""},{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""},{"path":"/ko/docs/types/SyGridServerSelectionStatus","title":"SyGridServerSelectionStatus","description":""},{"path":"/ko/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""},{"path":"/ko/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""},{"path":"/ko/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdateKind","title":"SyGridServerStoreUpdateKind","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/ko/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""},{"path":"/ko/docs/types/SyGridServerTransactionEnqueueStatus","title":"SyGridServerTransactionEnqueueStatus","description":""},{"path":"/ko/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/ko/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""},{"path":"/ko/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/ko/docs/types/SyGridServerTransactionStatus","title":"SyGridServerTransactionStatus","description":""},{"path":"/ko/docs/types/SyGridSideBarSlice","title":"SyGridSideBarSlice","description":""},{"path":"/ko/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""},{"path":"/ko/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""},{"path":"/ko/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/ko/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""},{"path":"/ko/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/ko/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""},{"path":"/ko/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/ko/docs/types/SyGridSpillCollision","title":"SyGridSpillCollision","description":""},{"path":"/ko/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/ko/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/ko/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""},{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/ko/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""},{"path":"/ko/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""},{"path":"/ko/docs/types/SyGridStateEnvelopeIssueCode","title":"SyGridStateEnvelopeIssueCode","description":""},{"path":"/ko/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/ko/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""},{"path":"/ko/docs/types/SyGridStateVersion","title":"SyGridStateVersion","description":""},{"path":"/ko/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""},{"path":"/ko/docs/types/SyGridWorkbookCellVerdict","title":"SyGridWorkbookCellVerdict","description":""},{"path":"/ko/docs/types/SyGridWorkbookFlushCause","title":"SyGridWorkbookFlushCause","description":""},{"path":"/ko/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/ko/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""},{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""},{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/ko/docs/types/SyGridWorkbookPublicationStamp","title":"SyGridWorkbookPublicationStamp","description":""},{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""},{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailureCode","title":"SyGridWorkbookRegistrationFailureCode","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""},{"path":"/ko/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""},{"path":"/ko/docs/types/TextFilterOp","title":"TextFilterOp","description":""},{"path":"/ko/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""},{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""},{"path":"/ko/docs/types/UiUnavailableEntry","title":"UiUnavailableEntry","description":""},{"path":"/ko/docs/types/ValidationRule","title":"ValidationRule","description":""},{"path":"/ko/docs/types/ValidationRuleType","title":"ValidationRuleType","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""},{"path":"/ko/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""},{"path":"/ko/docs/types/ViewportRequestContext","title":"ViewportRequestContext","description":""},{"path":"/ko/docs/types/WorkbookRegistryErrorCode","title":"WorkbookRegistryErrorCode","description":""},{"path":"/ko/docs/types/XlsxAlignment","title":"XlsxAlignment","description":""},{"path":"/ko/docs/types/XlsxBorder","title":"XlsxBorder","description":""},{"path":"/ko/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""},{"path":"/ko/docs/types/XlsxBorderStyle","title":"XlsxBorderStyle","description":""},{"path":"/ko/docs/types/XlsxCell","title":"XlsxCell","description":""},{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""},{"path":"/ko/docs/types/XlsxCellValue","title":"XlsxCellValue","description":""},{"path":"/ko/docs/types/XlsxCellXf","title":"XlsxCellXf","description":""},{"path":"/ko/docs/types/XlsxColumnDef","title":"XlsxColumnDef","description":""},{"path":"/ko/docs/types/XlsxDefinedName","title":"XlsxDefinedName","description":""},{"path":"/ko/docs/types/XlsxFill","title":"XlsxFill","description":""},{"path":"/ko/docs/types/XlsxFont","title":"XlsxFont","description":""},{"path":"/ko/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""},{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""},{"path":"/ko/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""},{"path":"/ko/docs/types/XlsxRow","title":"XlsxRow","description":""},{"path":"/ko/docs/types/XlsxSheet","title":"XlsxSheet","description":""},{"path":"/ko/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""},{"path":"/ko/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""},{"path":"/ko/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""}]}]}]},{"path":"/ko/docs/types/ActiveCell","kind":"type","title":"ActiveCell","summary":"ActiveCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ActiveCell {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridActiveCellChangedDetail","title":"GridActiveCellChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/ActiveFilter","kind":"type","title":"ActiveFilter","summary":"ActiveFilter의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ActiveFilter =\n  | { kind: 'text'; field: string; spec: TextFilterSpec }\n  | { kind: 'number'; field: string; spec: NumberFilterSpec }\n  | { kind: 'date'; field: string; spec: DateFilterSpec }\n  | { kind: 'set'; field: string; spec: SetFilterSpec }\n  | { kind: 'multi'; field: string; spec: MultiFilterSpec };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/ko/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""},{"path":"/ko/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""},{"path":"/ko/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""},{"path":"/ko/docs/types/SetFilterSpec","title":"SetFilterSpec","description":""},{"path":"/ko/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/ActiveFilterMap","kind":"type","title":"ActiveFilterMap","summary":"ActiveFilterMap의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ActiveFilterMap = Readonly<Record<string, ActiveFilter>>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""},{"path":"/ko/docs/types/GridFilterChangedDetail","title":"GridFilterChangedDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]}]},{"path":"/ko/docs/types/ActivePagination","kind":"type","title":"ActivePagination","summary":"ActivePagination의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ActivePagination {\n  readonly pageIndex: number;\n  readonly pageSize: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridPaginationChangedDetail","title":"GridPaginationChangedDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/ActiveSort","kind":"type","title":"ActiveSort","summary":"ActiveSort의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ActiveSort {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/ApplyColumnStateOptions","kind":"type","title":"ApplyColumnStateOptions","summary":"ApplyColumnStateOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ApplyColumnStateOptions {\n  applyOrder?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyColumnState","title":"applyColumnState","description":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."}]}]}]},{"path":"/ko/docs/types/ApplyColumnStateResult","kind":"type","title":"ApplyColumnStateResult","summary":"ApplyColumnStateResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ApplyColumnStateResult {\n  widths: Map<string, number | null>;\n  visibility: Map<string, boolean>;\n  order: string[] | null;\n  activeSort: { field: string; direction: 'asc' | 'desc' } | null;\n  sortModel: Array<{ field: string; direction: 'asc' | 'desc' }>;\n  pinned: Map<string, 'left' | 'right' | null>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""}]}]}]},{"path":"/ko/docs/types/ApplyRowTransactionResult","kind":"type","title":"ApplyRowTransactionResult","summary":"ApplyRowTransactionResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ApplyRowTransactionResult<TRow = Record<string, unknown>> {\n  rows: TRow[];\n  added: ReadonlyArray<{ row: TRow; index: number }>;\n  updated: ReadonlyArray<{ row: TRow; previous: TRow; index: number }>;\n  removed: ReadonlyArray<{ row: TRow; index: number }>;\n  rejected: ReadonlyArray<{ kind: 'add' | 'update' | 'remove'; row: unknown; reason: string }>;\n  meta: { txId: number; timestamp: number };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."}]}]}]},{"path":"/ko/docs/types/AuditCellEntry","kind":"type","title":"AuditCellEntry","summary":"AuditCellEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface AuditCellEntry extends AuditEntryCommon {\n  readonly kind: 'cell';\n  readonly rowId: string | number;\n  readonly field: string;\n  readonly oldValue: unknown;\n  readonly newValue: unknown;\n  readonly txId?: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/ko/docs/types/AuditEntry","kind":"type","title":"AuditEntry","summary":"AuditEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type AuditEntry = AuditRowsEntry | AuditCellEntry | AuditSelectionEntry | AuditHistoryEntry;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getAuditLog","title":"getAuditLog","description":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."},{"path":"/ko/docs/events/auditLogChanged","title":"auditLogChanged","description":"감사 기록이 추가되었을 때 발생합니다. entry를 읽어 앱의 보존 흐름에 연결할 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/ko/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/ko/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""},{"path":"/ko/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""}]}]}]},{"path":"/ko/docs/types/AuditEntryCommon","kind":"type","title":"AuditEntryCommon","summary":"AuditEntryCommon의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"interface AuditEntryCommon {\n  readonly seq: number;\n  readonly ts: number;\n  readonly source: AuditSource;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditCellEntry","title":"AuditCellEntry","description":""},{"path":"/ko/docs/types/AuditHistoryEntry","title":"AuditHistoryEntry","description":""},{"path":"/ko/docs/types/AuditRowsEntry","title":"AuditRowsEntry","description":""},{"path":"/ko/docs/types/AuditSelectionEntry","title":"AuditSelectionEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditSource","title":"AuditSource","description":""}]}]}]},{"path":"/ko/docs/types/AuditHistoryEntry","kind":"type","title":"AuditHistoryEntry","summary":"AuditHistoryEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface AuditHistoryEntry extends AuditEntryCommon {\n  readonly kind: 'history';\n  readonly action: 'recorded' | 'undone' | 'redone' | 'cleared';\n  readonly label?: string;\n  readonly undoDepth: number;\n  readonly redoDepth: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/ko/docs/types/AuditLogFilter","kind":"type","title":"AuditLogFilter","summary":"AuditLogFilter의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface AuditLogFilter {\n  readonly kind?: AuditEntry['kind'] | ReadonlyArray<AuditEntry['kind']>;\n  readonly source?: AuditSource | ReadonlyArray<AuditSource>;\n  readonly sinceSeq?: number;\n  readonly sinceTs?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getAuditLog","title":"getAuditLog","description":"감사 기록을 배열로 읽습니다. 종류·순번·시간 필터로 필요한 범위만 조회할 수 있고 기록이 꺼져 있으면 빈 배열입니다."},{"path":"/ko/docs/methods/getAuditLogAsCsv","title":"getAuditLogAsCsv","description":"감사 기록을 CSV 문자열로 변환합니다. 파일 다운로드 없이 앱에서 내용을 검토하거나 전달할 때 사용합니다."},{"path":"/ko/docs/methods/getAuditLogAsJson","title":"getAuditLogAsJson","description":"감사 기록을 구조가 유지되는 JSON 배열 문자열로 읽습니다. pretty로 읽기 쉬운 들여쓰기를 선택합니다."},{"path":"/ko/docs/methods/exportAuditLogAsCsv","title":"exportAuditLogAsCsv","description":"선택한 감사 기록을 CSV 파일로 내려받습니다."},{"path":"/ko/docs/methods/exportAuditLogAsJson","title":"exportAuditLogAsJson","description":"선택한 감사 기록을 JSON 파일로 내려받습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/ko/docs/types/AuditSource","title":"AuditSource","description":""}]}]}]},{"path":"/ko/docs/types/AuditRowsEntry","kind":"type","title":"AuditRowsEntry","summary":"AuditRowsEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface AuditRowsEntry extends AuditEntryCommon {\n  readonly kind: 'rows';\n  readonly txId?: number;\n  readonly added: number;\n  readonly updated: number;\n  readonly removed: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/ko/docs/types/AuditSelectionEntry","kind":"type","title":"AuditSelectionEntry","summary":"AuditSelectionEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface AuditSelectionEntry extends AuditEntryCommon {\n  readonly kind: 'selection';\n  readonly selectedCount: number;\n  readonly addedIds: ReadonlyArray<string | number>;\n  readonly removedIds: ReadonlyArray<string | number>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""}]}]}]},{"path":"/ko/docs/types/AuditSource","kind":"type","title":"AuditSource","summary":"AuditSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type AuditSource = 'local' | 'remote' | 'undo' | 'redo' | 'clipboard';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/AuditEntryCommon","title":"AuditEntryCommon","description":""},{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""}]}]}]},{"path":"/ko/docs/types/CanEditCellFn","kind":"type","title":"CanEditCellFn","summary":"CanEditCellFn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CanEditCellFn = (params: RbacCellReadParams) => boolean;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/canEditCell","title":"canEditCell","description":"행·열·현재 값과 앱 권한에 따라 편집을 허용할지 판단합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""}]}]}]},{"path":"/ko/docs/types/CanReadCellFn","kind":"type","title":"CanReadCellFn","summary":"CanReadCellFn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CanReadCellFn = (params: RbacCellReadParams) => boolean;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/canReadCell","title":"canReadCell","description":"셀을 읽을 수 있는지 동기적으로 판단하는 권한 콜백입니다. 서버의 접근 제어와 함께 사용합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RbacCellReadParams","title":"RbacCellReadParams","description":""}]}]}]},{"path":"/ko/docs/types/CanonicalCell","kind":"type","title":"CanonicalCell","summary":"CanonicalCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CanonicalCell {\n  readonly row: number;\n  readonly col: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/ko/docs/types/CanonicalRange","kind":"type","title":"CanonicalRange","summary":"CanonicalRange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CanonicalRange {\n  readonly id: number;\n  readonly anchor: CanonicalCell;\n  readonly focus: CanonicalCell;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""},{"path":"/ko/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalCell","title":"CanonicalCell","description":""}]}]}]},{"path":"/ko/docs/types/CanonicalRangeChange","kind":"type","title":"CanonicalRangeChange","summary":"CanonicalRangeChange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CanonicalRangeChange =\n  | { readonly kind: 'added'; readonly id: number; readonly range: CanonicalRange }\n  | { readonly kind: 'extended'; readonly id: number; readonly range: CanonicalRange }\n  | {\n      readonly kind: 'subtracted';\n      readonly id: number;\n      readonly range: CanonicalRange;\n      readonly sourceId: number;\n    }\n  | { readonly kind: 'removed'; readonly id: number; readonly range: CanonicalRange };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/ko/docs/types/CellCallbackParams","kind":"type","title":"CellCallbackParams","summary":"CellCallbackParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CellCallbackParams<TData = GridData, TValue = unknown, TContext = unknown> {\n  data: Readonly<TData>;\n  value: TValue;\n  colDef: ColumnDef<TData, TValue, TContext>;\n  rowIndex: number;\n  context: TContext;\n  api: SyGridApi<TData, TContext>;\n  node: { rowIndex: number };\n  colId: string;\n  formatted?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/cellClass","title":"cellClass","description":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다."},{"path":"/ko/docs/columns/cellClassRules","title":"cellClassRules","description":"조건별로 CSS 클래스를 적용하는 규칙입니다."},{"path":"/ko/docs/columns/cellStyle","title":"cellStyle","description":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/CellRange","kind":"type","title":"CellRange","summary":"CellRange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CellRange {\n  readonly anchorRow: number;\n  readonly anchorCol: number;\n  readonly focusRow: number;\n  readonly focusCol: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""},{"path":"/ko/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/ko/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""}]}]}]},{"path":"/ko/docs/types/CellRangeBounds","kind":"type","title":"CellRangeBounds","summary":"CellRangeBounds의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CellRangeBounds {\n  readonly top: number;\n  readonly left: number;\n  readonly bottom: number;\n  readonly right: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellRanges","title":"getCellRanges","description":"현재 셀 선택 범위의 경계를 읽습니다. 화면 행·열 좌표의 의미를 확인하세요."},{"path":"/ko/docs/events/rangeSelectionChanged","title":"rangeSelectionChanged","description":"셀 선택 범위가 바뀌었을 때 발생합니다. 범위 경계 목록으로 복사·요약 기능을 연결합니다."},{"path":"/ko/docs/events/clipboardCopied","title":"clipboardCopied","description":"클립보드 복사가 완료되었을 때 발생합니다. 출력 텍스트와 범위를 확인할 수 있으므로 민감 정보 로그를 주의합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/CellRenderOutput","kind":"type","title":"CellRenderOutput","summary":"CellRenderOutput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CellRenderOutput =\n  | {\n      kind: 'text';\n      text: string;\n      class?: string;\n      title?: string;\n    }\n  | {\n      kind: 'html';\n      html: string;\n      class?: string;\n      title?: string;\n    }\n  | {\n      kind: 'vnode';\n      vnode: unknown;\n      class?: string;\n      title?: string;\n    };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/detailCellRenderer","title":"detailCellRenderer","description":"상세 패널의 내용을 text·html·vnode 계약으로 만듭니다. 선언형 하위 Grid보다 우선합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/GridRendererGui","title":"GridRendererGui","description":""}]}]}]},{"path":"/ko/docs/types/CellRenderer","kind":"type","title":"CellRenderer","summary":"CellRenderer의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CellRenderer<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n> = (\n  input: CellRendererInput<TRow, TValue>,\n) => CellRenderOutput;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/cellRenderer","title":"cellRenderer","description":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다."},{"path":"/ko/docs/methods/registerCellRenderer","title":"registerCellRenderer","description":"이름으로 셀 렌더러를 등록하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/ko/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]}]},{"path":"/ko/docs/types/CellRendererInput","kind":"type","title":"CellRendererInput","summary":"CellRendererInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CellRendererInput<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n> {\n  value: TValue;\n  row: TRow;\n  rowIndex: number;\n  colIndex: number;\n  colId: string;\n  formatted?: string;\n  meta?: Record<string, unknown>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/ko/docs/types/CfCondition","kind":"type","title":"CfCondition","summary":"CfCondition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CfCondition {\n  type: CfConditionType;\n  value?: unknown;\n  value2?: unknown;\n  caseSensitive?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CfConditionType","title":"CfConditionType","description":""}]}]}]},{"path":"/ko/docs/types/CfConditionType","kind":"type","title":"CfConditionType","summary":"CfConditionType의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CfConditionType =\n  | 'equals'\n  | 'notEquals'\n  | 'greaterThan'\n  | 'greaterThanOrEqual'\n  | 'lessThan'\n  | 'lessThanOrEqual'\n  | 'between'\n  | 'contains'\n  | 'notContains'\n  | 'startsWith'\n  | 'endsWith'\n  | 'blank'\n  | 'notBlank';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CfCondition","title":"CfCondition","description":""}]}]}]},{"path":"/ko/docs/types/CfStyle","kind":"type","title":"CfStyle","summary":"CfStyle의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CfStyle {\n  backgroundColor?: string;\n  color?: string;\n  fontWeight?: 'bold' | 'normal';\n  fontStyle?: 'italic' | 'normal';\n  textDecoration?: 'underline' | 'line-through' | 'none';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""}]}]}]},{"path":"/ko/docs/types/ChartDataTable","kind":"type","title":"ChartDataTable","summary":"ChartDataTable의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartDataTable {\n  readonly columns: string[];\n  readonly rows: Array<Array<string | number | null>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkAccessibleReport","kind":"type","title":"ChartLinkAccessibleReport","summary":"ChartLinkAccessibleReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkAccessibleReport {\n  readonly summary: GridChartAccessibleSummary;\n  readonly renderedStops: readonly GridChartFocusStop[];\n  readonly renderedViolations: readonly {\n    readonly problem: string;\n    readonly at: number;\n  }[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""},{"path":"/ko/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkChartReport","kind":"type","title":"ChartLinkChartReport","summary":"ChartLinkChartReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkChartReport {\n  readonly chartId: string;\n  readonly elementId: string;\n  readonly chartKey: string;\n  readonly chartSeq: number;\n  readonly chartType: SyChartConcreteType;\n  readonly projection: GridChartProjectionKind;\n  readonly state: string;\n  readonly containerKind: 'grid-owned' | 'caller-owned';\n  readonly elementRegistered: boolean;\n  readonly seriesCount: number;\n  readonly categoryCount: number;\n  readonly rangeId: number | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""},{"path":"/ko/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""},{"path":"/ko/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkCreateParams","kind":"type","title":"ChartLinkCreateParams","summary":"ChartLinkCreateParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkCreateParams {\n  readonly chartType: string;\n  readonly source?: ChartLinkSourceInput;\n  readonly containerId?: string;\n  readonly title?: string | null;\n  readonly properties?: Partial<GridChartProperties>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/ko/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkCreateResult","kind":"type","title":"ChartLinkCreateResult","summary":"ChartLinkCreateResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ChartLinkCreateResult =\n  | { readonly status: 'created'; readonly chart: ChartLinkChartReport }\n  | { readonly status: 'refused'; readonly reason: string; readonly detail: string };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkDestroyResult","kind":"type","title":"ChartLinkDestroyResult","summary":"ChartLinkDestroyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ChartLinkDestroyResult =\n  | { readonly status: 'destroyed'; readonly chartId: string; readonly released: readonly string[] }\n  | { readonly status: 'refused'; readonly reason: string; readonly detail: string };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkExportResult","kind":"type","title":"ChartLinkExportResult","summary":"ChartLinkExportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ChartLinkExportResult = GridChartExportResult & {\n  readonly markup?: string | null;\n  readonly markupBytes?: number;\n  readonly pixelSource?: 'element-svg-serialisation' | 'unavailable';\n};","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkFleetReport","kind":"type","title":"ChartLinkFleetReport","summary":"ChartLinkFleetReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkFleetReport {\n  readonly liveCharts: number;\n  readonly maxLiveCharts: number;\n  readonly openResources: number;\n  readonly leaks: number;\n  readonly acquired: number;\n  readonly released: number;\n  readonly everCreated: number;\n  readonly destroyed: number;\n  readonly eventCount: number;\n  readonly orderViolations: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkMenuReport","kind":"type","title":"ChartLinkMenuReport","summary":"ChartLinkMenuReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkMenuReport {\n  readonly available: readonly string[];\n  readonly entries: readonly GridChartMenuEntry[];\n  readonly shape: GridChartMenuSelectionShape;\n  readonly permissions: GridChartMenuPermissions;\n  readonly panelOpen: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/ko/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""},{"path":"/ko/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkPanelReport","kind":"type","title":"ChartLinkPanelReport","summary":"ChartLinkPanelReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkPanelReport {\n  readonly open: boolean;\n  readonly dir: 'ltr' | 'rtl';\n  readonly step: string;\n  readonly activeId: string | null;\n  readonly focusedId: string | null;\n  readonly tabStops: number;\n  readonly stops: readonly ChartLinkPanelStop[];\n  readonly minTouchSize: number;\n  readonly readOnly: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkPanelStop","title":"ChartLinkPanelStop","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkPanelStop","kind":"type","title":"ChartLinkPanelStop","summary":"ChartLinkPanelStop의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ChartLinkPanelStop {\n  readonly id: string;\n  readonly role: string;\n  readonly tabIndex: number;\n  readonly label: string;\n  readonly disabled: boolean;\n  readonly width: number;\n  readonly height: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkSourceInput","kind":"type","title":"ChartLinkSourceInput","summary":"ChartLinkSourceInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ChartLinkSourceInput =\n  | { readonly kind: 'range'; readonly rangeId?: number }\n  | { readonly kind: 'pivot'; readonly selection?: GridChartPivotSelectionState }\n  | {\n    readonly kind: 'params';\n    readonly firstRow: number;\n    readonly lastRow: number;\n    readonly columnIds: readonly string[];\n  };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/ko/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/ChartLinkUpdateResult","kind":"type","title":"ChartLinkUpdateResult","summary":"ChartLinkUpdateResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ChartLinkUpdateResult =\n  | { readonly status: 'applied'; readonly chart: ChartLinkChartReport }\n  | { readonly status: 'unchanged'; readonly chart: ChartLinkChartReport }\n  | { readonly status: 'refused'; readonly reason: string; readonly detail: string };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/ko/docs/types/ColumnDef","kind":"type","title":"ColumnDef","summary":"ColumnDef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ColumnDef<TData = GridData, TValue = unknown, TContext = unknown> {\n  field: GridFieldPath<TData>;\n  colId?: string;\n  headerName?: string;\n  headerTooltip?: string;\n  sortable?: boolean;\n  sort?: 'asc' | 'desc' | null;\n  sortIndex?: number;\n  filter?:\n    | ColumnFilterDecl\n    | string\n    | GridFilterDefinition<TData, TValue, unknown, TContext>;\n  valueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], TValue> | string;\n  formula?: string;\n  valueFormatter?: GridCallback<[ValueFormatterParams<TData, TValue, TContext>], string> | string;\n  tooltipField?: GridFieldPath<TData>;\n  tooltipValueGetter?: GridCallback<[ValueGetterParams<TData, TValue, TContext>], unknown> | string;\n  cellRenderer?:\n    | string\n    | CellRenderer<TData, TValue>\n    | GridRendererDefinition<TData, TValue, TContext>;\n  cellRendererMeta?: Record<string, unknown>;\n  cellEditor?: GridCellEditorDeclaration<TData, TValue, TContext>;\n  floatingFilterComponent?:\n    | string\n    | GridFloatingFilterDefinition<unknown, TContext>;\n  cellClass?:\n    | string\n    | string[]\n    | GridCallback<[CellCallbackParams<TData, TValue, TContext>], string>;\n  cellClassRules?: Record<\n    string,\n    GridCallback<[CellCallbackParams<TData, TValue, TContext>], boolean> | string\n  >;\n  cellStyle?:\n    | Record<string, string | number>\n    | GridCallback<\n        [CellCallbackParams<TData, TValue, TContext>],\n        Record<string, string | number> | null | undefined\n      >\n    | ReadonlyArray<\n        | Record<string, string | number>\n        | GridCallback<\n            [CellCallbackParams<TData, TValue, TContext>],\n            Record<string, string | number> | null | undefined\n          >\n      >;\n  width?: number;\n  minWidth?: number;\n  maxWidth?: number;\n  flex?: number;\n  resizable?: boolean;\n  reorderable?: boolean;\n  pinned?: 'left' | 'right' | null;\n  columnGroupShow?: 'open' | 'closed';\n  aggFunc?: 'sum' | 'avg' | 'min' | 'max' | 'count' | string;\n  hidden?: boolean;\n  hide?: boolean;\n  editable?: boolean;\n  editor?: 'text' | 'number' | 'date' | 'select' | 'checkbox' | 'textarea' | 'autocomplete' | 'largeText';\n  valueParser?: GridCallback<[ValueParserParams<TData, TValue, TContext>], TValue>;\n  valueSetter?: GridCallback<\n    [ValueSetterParams<TData, TValue, TContext>],\n    boolean | void\n  >;\n  comparator?: GridCallback<[TValue, TValue, Readonly<TData>, Readonly<TData>], number>;\n  options?: ReadonlyArray<{ value: unknown; label: string; disabled?: boolean }>;\n  min?: number | Date | string;\n  max?: number | Date | string;\n  step?: number;\n  decimals?: number;\n  nullable?: boolean;\n  allowEmpty?: boolean;\n  storeAs?: 'date' | 'iso';\n  rows?: number;\n  maxRows?: number;\n  cols?: number;\n  maxLength?: number;\n  rowDrag?: boolean;\n  wrapText?: boolean;\n  autoHeight?: boolean;\n  rowSpan?: (params: SyGridRowSpanParams<TData>) => number;\n  colSpan?: (params: SyGridColSpanParams<TData>) => number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columnDefs","title":"columnDefs","description":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."},{"path":"/ko/docs/options/defaultColDef","title":"defaultColDef","description":"모든 열에 공통으로 적용할 기본 설정입니다. 개별 columnDefs의 값으로 특정 열만 다르게 구성할 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/ko/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""},{"path":"/ko/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""},{"path":"/ko/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/ko/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/ko/docs/types/GridColumnMenuContext","title":"GridColumnMenuContext","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/ko/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/ko/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridCallback","title":"GridCallback","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""},{"path":"/ko/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/ko/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""}]}]}]},{"path":"/ko/docs/types/ColumnFilterDecl","kind":"type","title":"ColumnFilterDecl","summary":"ColumnFilterDecl의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ColumnFilterDecl = ColumnFilterType | ReadonlyArray<ColumnFilterKind>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""},{"path":"/ko/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""}]}]}]},{"path":"/ko/docs/types/ColumnFilterKind","kind":"type","title":"ColumnFilterKind","summary":"ColumnFilterKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ColumnFilterKind = 'text' | 'number' | 'date' | 'set';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""},{"path":"/ko/docs/types/ColumnFilterType","title":"ColumnFilterType","description":""}]}]}]},{"path":"/ko/docs/types/ColumnFilterType","kind":"type","title":"ColumnFilterType","summary":"ColumnFilterType의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ColumnFilterType = ColumnFilterKind | boolean;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnFilterDecl","title":"ColumnFilterDecl","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnFilterKind","title":"ColumnFilterKind","description":""}]}]}]},{"path":"/ko/docs/types/ColumnGroupDef","kind":"type","title":"ColumnGroupDef","summary":"ColumnGroupDef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ColumnGroupDef<TLeaf extends GroupableLeaf = GroupableLeaf> {\n  headerName: string;\n  groupId?: string;\n  children: ReadonlyArray<TLeaf | ColumnGroupDef<TLeaf>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GroupableLeaf","title":"GroupableLeaf","description":""}]}]}]},{"path":"/ko/docs/types/ColumnPinSide","kind":"type","title":"ColumnPinSide","summary":"ColumnPinSide의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ColumnPinSide = 'left' | 'right';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setColumnPinned","title":"setColumnPinned","description":"열을 왼쪽·오른쪽에 고정하거나 고정을 해제합니다."},{"path":"/ko/docs/methods/getColumnPinned","title":"getColumnPinned","description":"현재 열 고정 방향을 읽습니다."}]}]}]},{"path":"/ko/docs/types/ColumnStateEntry","kind":"type","title":"ColumnStateEntry","summary":"ColumnStateEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ColumnStateEntry {\n  field: string;\n  width: number | null;\n  order: number | null;\n  hidden: boolean;\n  sortDirection: 'asc' | 'desc' | null;\n  isSorted: boolean;\n  sortIndex?: number | null;\n  pinned?: 'left' | 'right' | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getColumnState","title":"getColumnState","description":"열 너비·순서·표시·정렬·고정 상태를 저장 가능한 배열로 읽습니다."},{"path":"/ko/docs/methods/applyColumnState","title":"applyColumnState","description":"저장한 열 상태를 복원합니다. 현재 열 식별자와 일치하는지 확인하세요."}]}]}]},{"path":"/ko/docs/types/ColumnsSliceApplyResult","kind":"type","title":"ColumnsSliceApplyResult","summary":"ColumnsSliceApplyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ColumnsSliceApplyResult {\n  readonly columnState: ApplyColumnStateResult;\n  readonly aggFuncs: ReadonlyMap<string, string | null>;\n  readonly rowGroupFields: readonly string[];\n  readonly pivotRowGroupFields: readonly string[];\n  readonly pivotMode: boolean;\n  readonly pivotFields: readonly string[];\n  readonly valueFields: readonly string[];\n  readonly collapsedGroupIds: readonly string[];\n  readonly report: {\n    readonly missingColumns: readonly string[];\n    readonly newColumns: readonly string[];\n  };\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ApplyColumnStateResult","title":"ApplyColumnStateResult","description":""}]}]}]},{"path":"/ko/docs/types/ConditionGroup","kind":"type","title":"ConditionGroup","summary":"ConditionGroup의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ConditionGroup<TRow = unknown> {\n  op: 'and' | 'or';\n  children: ReadonlyArray<ConditionNode<TRow>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]}]},{"path":"/ko/docs/types/ConditionLeaf","kind":"type","title":"ConditionLeaf","summary":"ConditionLeaf의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ConditionLeaf<TRow = unknown> = MultiFilterPart<TRow>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]}]},{"path":"/ko/docs/types/ConditionNode","kind":"type","title":"ConditionNode","summary":"ConditionNode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ConditionNode<TRow = unknown> = ConditionGroup<TRow> | ConditionLeaf<TRow>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setConditionFilter","title":"setConditionFilter","description":"AND·OR 트리 형태의 고급 조건 모델을 적용합니다. null로 해제하고 잘못된 모델은 적용 결과를 확인합니다."},{"path":"/ko/docs/methods/getConditionFilter","title":"getConditionFilter","description":"현재 고급 조건 트리 또는 null을 읽습니다."},{"path":"/ko/docs/events/conditionFilterChanged","title":"conditionFilterChanged","description":"AND·OR 조건 트리가 바뀌었을 때 발생합니다. model이 null이면 고급 조건이 해제된 상태입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionGroup","title":"ConditionGroup","description":""},{"path":"/ko/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""}]}]}]},{"path":"/ko/docs/types/ConditionalFormatRule","kind":"type","title":"ConditionalFormatRule","summary":"ConditionalFormatRule의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ConditionalFormatRule {\n  field?: string;\n  condition: CfCondition;\n  style: CfStyle;\n  stopIfTrue?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/conditionalFormats","title":"conditionalFormats","description":"조건에 맞는 셀의 배경·글자 등의 표현을 바꾸는 규칙 배열입니다. 원본 값은 수정하지 않습니다."},{"path":"/ko/docs/events/conditionalFormatsChanged","title":"conditionalFormatsChanged","description":"조건부 서식 규칙 목록이 바뀌었을 때 발생합니다. rules를 사용자 설정으로 저장합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CfCondition","title":"CfCondition","description":""},{"path":"/ko/docs/types/CfStyle","title":"CfStyle","description":""}]}]}]},{"path":"/ko/docs/types/ContextMenuActionId","kind":"type","title":"ContextMenuActionId","summary":"ContextMenuActionId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ContextMenuActionId =\n  | 'copy-cell'\n  | 'copy-row'\n  | 'export-csv'\n  | (string & {});","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]}]},{"path":"/ko/docs/types/ContextMenuContext","kind":"type","title":"ContextMenuContext","summary":"ContextMenuContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ContextMenuContext<TRow = Record<string, unknown>> {\n  rowIndex: number;\n  field?: string;\n  row?: TRow;\n  columns: ReadonlyArray<ColumnDef>;\n  rows: ReadonlyArray<TRow>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/ContextMenuItem","kind":"type","title":"ContextMenuItem","summary":"ContextMenuItem의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ContextMenuItem<TRow = Record<string, unknown>> {\n  id: ContextMenuActionId;\n  label: string;\n  disabled?: boolean;\n  separator?: boolean;\n  action?: (ctx: ContextMenuContext<TRow>) => void;\n  icon?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},{"path":"/ko/docs/methods/getContextMenuItems","title":"getContextMenuItems","description":"특정 표시 행·필드에 적용할 우클릭 메뉴 목록을 계산합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ContextMenuActionId","title":"ContextMenuActionId","description":""},{"path":"/ko/docs/types/ContextMenuContext","title":"ContextMenuContext","description":""}]}]}]},{"path":"/ko/docs/types/CsvDelimiter","kind":"type","title":"CsvDelimiter","summary":"CsvDelimiter의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type CsvDelimiter = string;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/importCsvText","title":"importCsvText","description":"CSV 텍스트를 파싱해 열과 원본 데이터를 교체합니다. 행 추가가 목적이면 별도의 파싱 후 트랜잭션 흐름을 구성하세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""}]}]}]},{"path":"/ko/docs/types/CsvDownloadOptions","kind":"type","title":"CsvDownloadOptions","summary":"CsvDownloadOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CsvDownloadOptions<TRow = Record<string, unknown>> extends CsvExportOptions<TRow> {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/CsvExportColumn","kind":"type","title":"CsvExportColumn","summary":"CsvExportColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CsvExportColumn {\n  field: string;\n  headerName?: string;\n  valueGetter?: ColumnDef['valueGetter'];\n  valueFormatter?: ColumnDef['valueFormatter'];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/CsvExportOptions","kind":"type","title":"CsvExportOptions","summary":"CsvExportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CsvExportOptions<TRow = Record<string, unknown>> {\n  columns: ReadonlyArray<CsvExportColumn>;\n  rows: ReadonlyArray<TRow>;\n  delimiter?: string;\n  lineTerminator?: string;\n  includeHeaders?: boolean;\n  bom?: boolean;\n  locale?: string;\n  blankForNullish?: boolean;\n  escapeFormulae?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvExportColumn","title":"CsvExportColumn","description":""}]}]}]},{"path":"/ko/docs/types/CsvExportResult","kind":"type","title":"CsvExportResult","summary":"CsvExportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface CsvExportResult {\n  csv: string;\n  rowCount: number;\n  columnCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."},{"path":"/ko/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/DateFilterOp","kind":"type","title":"DateFilterOp","summary":"DateFilterOp의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type DateFilterOp =\n  | 'equals'\n  | 'notEqual'\n  | 'before' // strict <\n  | 'after' // strict >\n  | 'onOrBefore' // ≤\n  | 'onOrAfter' // ≥\n  | 'between' // [lo, hi] inclusive\n  | 'notBetween';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/DateFilterSpec","kind":"type","title":"DateFilterSpec","summary":"DateFilterSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface DateFilterSpec<TRow = unknown> {\n  field: string;\n  op: DateFilterOp;\n  value: DateValue | [DateValue, DateValue];\n  valueGetter?: (row: TRow) => unknown;\n  granularity?: 'utc' | 'day';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DateFilterOp","title":"DateFilterOp","description":""},{"path":"/ko/docs/types/DateValue","title":"DateValue","description":""}]}]}]},{"path":"/ko/docs/types/DateValue","kind":"type","title":"DateValue","summary":"DateValue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type DateValue = Date | string | number;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DateFilterSpec","title":"DateFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/DetailGridOptions","kind":"type","title":"DetailGridOptions","summary":"DetailGridOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface DetailGridOptions {\n  columnDefs: Array<ColumnDef | GridColumnGroupDef>;\n  masterDetail?: boolean;\n  getDetailRowData?: (params: DetailRowDataParams) => unknown[] | Promise<unknown[]>;\n  detailGridOptions?: DetailGridOptions;\n  height?: string;\n  detailRowHeight?: number;\n  pagination?: boolean;\n  pageSize?: number;\n  formulas?: boolean;\n  showFormulas?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/detailGridOptions","title":"detailGridOptions","description":"상세 패널에 자동으로 생성할 하위 Grid의 열과 옵션입니다. getDetailRowData와 함께 사용합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/ko/docs/types/DetailRowDataParams","title":"DetailRowDataParams","description":""}]}]}]},{"path":"/ko/docs/types/DetailRowDataParams","kind":"type","title":"DetailRowDataParams","summary":"DetailRowDataParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface DetailRowDataParams {\n  row: Record<string, unknown>;\n  rowId: string | number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""}]}]}]},{"path":"/ko/docs/types/EditTransaction","kind":"type","title":"EditTransaction","summary":"EditTransaction의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface EditTransaction<TValue = unknown> {\n  rowIndex: number;\n  colIndex: number;\n  originalValue: TValue;\n  draftValue: TValue;\n  phase: Exclude<EditTransactionPhase, 'idle'>;\n  id: number;\n  meta: Readonly<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getActiveEditTransaction","title":"getActiveEditTransaction","description":"현재 진행 중인 셀 편집 트랜잭션을 읽습니다. 편집 중이 아니면 null입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/EditTransactionPhase","title":"EditTransactionPhase","description":""}]}]}]},{"path":"/ko/docs/types/EditTransactionPhase","kind":"type","title":"EditTransactionPhase","summary":"EditTransactionPhase의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type EditTransactionPhase =\n  | 'idle'\n  | 'pending'\n  | 'committed'\n  | 'cancelled'\n  | 'rolled-back';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/EditTransaction","title":"EditTransaction","description":""}]}]}]},{"path":"/ko/docs/types/EmptyStateKind","kind":"type","title":"EmptyStateKind","summary":"EmptyStateKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type EmptyStateKind = 'none' | 'no-data' | 'no-matches' | 'loading';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEmptyStateActionDetail","title":"GridEmptyStateActionDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/FillDirection","kind":"type","title":"FillDirection","summary":"FillDirection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type FillDirection = 'up' | 'down' | 'left' | 'right';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/FillPlanMode","kind":"type","title":"FillPlanMode","summary":"FillPlanMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type FillPlanMode = 'fill' | 'reduce';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/FilterSliceApplyResult","kind":"type","title":"FilterSliceApplyResult","summary":"FilterSliceApplyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface FilterSliceApplyResult {\n  readonly builtIn: Readonly<Record<string, ActiveFilter>>;\n  readonly customModels: Readonly<Record<string, unknown>>;\n  readonly quickFilter: string | null;\n  readonly conditionTree: ConditionNode | null;\n  readonly report: {\n    readonly unknownBuiltInColumns: readonly string[];\n    readonly invalidBuiltIn: readonly FilterSliceIssue[];\n    readonly unavailableCustomFilters: readonly string[];\n    readonly conditionTreeError: string | null;\n    readonly externalFilterWasActive: boolean;\n  };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setFilterModel","title":"setFilterModel","description":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/ko/docs/types/FilterSliceIssue","title":"FilterSliceIssue","description":""}]}]}]},{"path":"/ko/docs/types/FilterSliceIssue","kind":"type","title":"FilterSliceIssue","summary":"FilterSliceIssue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface FilterSliceIssue {\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""}]}]}]},{"path":"/ko/docs/types/GridActiveCellChangedDetail","kind":"type","title":"GridActiveCellChangedDetail","summary":"GridActiveCellChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridActiveCellChangedDetail {\n  active: ActiveCell | null;\n  previous: ActiveCell | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/activeCellChanged","title":"activeCellChanged","description":"키보드·포인터 조작으로 활성 셀이 바뀌었을 때 발생합니다. 선택 범위나 행 선택과 다른 상태입니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveCell","title":"ActiveCell","description":""}]}]}]},{"path":"/ko/docs/types/GridAsyncValueLoadContext","kind":"type","title":"GridAsyncValueLoadContext","summary":"GridAsyncValueLoadContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridAsyncValueLoadContext {\n  readonly query: string;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""}]}]}]},{"path":"/ko/docs/types/GridAsyncValueLoader","kind":"type","title":"GridAsyncValueLoader","summary":"GridAsyncValueLoader의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridAsyncValueLoader<TValue> = (\n  context: GridAsyncValueLoadContext,\n) => GridMaybePromise<ReadonlyArray<TValue>>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridAsyncValueLoadContext","title":"GridAsyncValueLoadContext","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridCallback","kind":"type","title":"GridCallback","summary":"GridCallback의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridCallback<TArgs extends readonly unknown[], TResult> = {\n  bivarianceHack(...args: TArgs): TResult;\n}['bivarianceHack'];","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueGetter","title":"valueGetter","description":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다."},{"path":"/ko/docs/columns/valueFormatter","title":"valueFormatter","description":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다."},{"path":"/ko/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요."},{"path":"/ko/docs/columns/cellClass","title":"cellClass","description":"셀에 적용할 CSS 클래스 또는 클래스를 반환하는 콜백입니다."},{"path":"/ko/docs/columns/cellClassRules","title":"cellClassRules","description":"조건별로 CSS 클래스를 적용하는 규칙입니다."},{"path":"/ko/docs/columns/cellStyle","title":"cellStyle","description":"셀에 적용할 인라인 스타일 객체·콜백 또는 이들의 배열입니다."},{"path":"/ko/docs/columns/valueParser","title":"valueParser","description":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다."},{"path":"/ko/docs/columns/valueSetter","title":"valueSetter","description":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요."},{"path":"/ko/docs/columns/comparator","title":"comparator","description":"두 값과 행을 받아 정렬 순서를 비교합니다. 음수·0·양수로 앞·같음·뒤를 표현합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/GridCellClickedDetail","kind":"type","title":"GridCellClickedDetail","summary":"GridCellClickedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellClickedDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: string;\n  button?: RowClickButton;\n  modifiers?: RowClickModifiers;\n  doubleClick?: boolean;\n  dragged?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/cellClicked","title":"cellClicked","description":"셀을 한 번 클릭했을 때 발생합니다. 실제 행·필드와 입력 문맥은 detail에서 읽습니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/ko/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/GridCellComment","kind":"type","title":"GridCellComment","summary":"GridCellComment의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellComment {\n  id: string;\n  text: string;\n  author?: string;\n  authorColor?: string;\n  ts: number;\n  resolved?: boolean;\n  parentId?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellComments","title":"getCellComments","description":"행 ID와 필드에 연결된 협업 댓글 목록을 읽습니다."},{"path":"/ko/docs/events/cellCommentsChanged","title":"cellCommentsChanged","description":"셀의 협업 댓글 목록이 바뀌었을 때 발생합니다. 행 ID·필드·최신 댓글 목록을 읽습니다."},{"path":"/ko/docs/events/commentMentioned","title":"commentMentioned","description":"협업 댓글에서 멘션이 발생했을 때 알립니다. 대상 셀과 댓글로 앱 알림을 연결합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridCellDoubleClickedDetail","kind":"type","title":"GridCellDoubleClickedDetail","summary":"GridCellDoubleClickedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellDoubleClickedDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: string;\n  button: RowClickButton;\n  modifiers: RowClickModifiers;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/cellDoubleClicked","title":"cellDoubleClicked","description":"셀을 두 번 클릭했을 때 발생합니다. 편집 시작과 앱 상세 열기가 충돌하지 않도록 처리합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/ko/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/GridCellEditingCancelledDetail","kind":"type","title":"GridCellEditingCancelledDetail","summary":"GridCellEditingCancelledDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellEditingCancelledDetail {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/cellEditingCancelled","title":"cellEditingCancelled","description":"셀 편집이 취소되었을 때 발생합니다. 서버 저장 성공으로 처리하지 마세요."}]}]}]},{"path":"/ko/docs/types/GridCellEditingCommittedDetail","kind":"type","title":"GridCellEditingCommittedDetail","summary":"GridCellEditingCommittedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellEditingCommittedDetail<TValue = unknown> {\n  rowIndex: number;\n  sourceRowIndex?: number;\n  colIndex: number;\n  rowId?: string | number;\n  field?: string;\n  originalValue: TValue;\n  draftValue: TValue;\n  dataWritten?: boolean;\n  changed?: boolean;\n  txId?: number;\n  surface?: 'editor' | 'formula-bar';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/cellEditingCommitted","title":"cellEditingCommitted","description":"셀 편집이 확정되었을 때 발생합니다. 실제 값 변경은 cellValueChanged도 함께 확인합니다."}]}]}]},{"path":"/ko/docs/types/GridCellEditingRequestedDetail","kind":"type","title":"GridCellEditingRequestedDetail","summary":"GridCellEditingRequestedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellEditingRequestedDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/cellEditingRequested","title":"cellEditingRequested","description":"셀 편집을 요청했을 때 발생합니다. 이후 취소·확정·값 변경 이벤트와 흐름을 구분합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/ko/docs/types/GridCellEditorDeclaration","kind":"type","title":"GridCellEditorDeclaration","summary":"GridCellEditorDeclaration의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridCellEditorDeclaration<\n  TData = GridData,\n  TValue = unknown,\n  TContext = unknown,\n> =\n  | string\n  | GridEditorDefinition<TData, TValue, TContext>\n  | ({\n      readonly type: 'rich-select';\n    } & GridRichSelectEditorOptions<TValue>);","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/cellEditor","title":"cellEditor","description":"사용자 정의 셀 편집기를 선언합니다. 기본 편집기 종류는 editor로 선택합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]}]},{"path":"/ko/docs/types/GridCellNote","kind":"type","title":"GridCellNote","summary":"GridCellNote의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellNote {\n  readonly text: string;\n  readonly revision: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""},{"path":"/ko/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""}]}]}]},{"path":"/ko/docs/types/GridCellNotesAdapter","kind":"type","title":"GridCellNotesAdapter","summary":"GridCellNotesAdapter의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellNotesAdapter {\n  load(cell: GridNoteCell): Promise<GridCellNote | null>;\n  save(cell: GridNoteCell, text: string | null, expectedRevision: string | null): Promise<GridNoteSaveResult>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/cellNotesAdapter","title":"cellNotesAdapter","description":"독립 셀 메모의 조회와 revision 기반 원자적 저장을 구현합니다. 내장 임시 저장소로 자동 대체되지 않습니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridNoteCell","title":"GridNoteCell","description":""},{"path":"/ko/docs/types/GridCellNote","title":"GridCellNote","description":""},{"path":"/ko/docs/types/GridNoteSaveResult","title":"GridNoteSaveResult","description":""}]}]}]},{"path":"/ko/docs/types/GridCellValueChangedDetail","kind":"type","title":"GridCellValueChangedDetail","summary":"GridCellValueChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCellValueChangedDetail<\n  TData = GridData,\n  TValue = unknown,\n  TContext = unknown,\n> {\n  rowIndex: number;\n  sourceRowIndex?: number;\n  colIndex: number;\n  field: string;\n  rowId: string | number;\n  oldValue: TValue;\n  newValue: TValue;\n  data: Readonly<TData>;\n  context: TContext | undefined;\n  source: GridEditSource;\n  origin?: unknown;\n  txId?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/clipboardPasted","title":"clipboardPasted","description":"붙여넣기 처리 결과를 알립니다. 적용 수·건너뛴 수·시작 위치·실제 변경 목록을 함께 확인합니다."},{"path":"/ko/docs/events/cellValueChanged","title":"cellValueChanged","description":"셀의 실제 값이 바뀌었을 때 발생합니다. 행·필드·변경 전후 값으로 저장이나 활동 내역을 구성합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridEditSource","title":"GridEditSource","description":""}]}]}]},{"path":"/ko/docs/types/GridChartAccessibleSummary","kind":"type","title":"GridChartAccessibleSummary","summary":"GridChartAccessibleSummary의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartAccessibleSummary {\n  readonly chartKey: string;\n  readonly role: 'img';\n  readonly label: string;\n  readonly description: string;\n  readonly seriesCount: number;\n  readonly categoryCount: number;\n  readonly table: ChartDataTable;\n  readonly tableHtml: string;\n  readonly focusOrder: readonly GridChartFocusStop[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartDataTable","title":"ChartDataTable","description":""},{"path":"/ko/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/ko/docs/types/GridChartContainerRequest","kind":"type","title":"GridChartContainerRequest","summary":"GridChartContainerRequest의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartContainerRequest =\n  | { readonly kind: 'grid-owned' }\n  | { readonly kind: 'caller-owned'; readonly containerId: string };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]}]},{"path":"/ko/docs/types/GridChartCrossFilterAction","kind":"type","title":"GridChartCrossFilterAction","summary":"GridChartCrossFilterAction의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartCrossFilterAction =\n  \"replace\" | \"add\" | \"remove\" | \"toggle\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""}]}]}]},{"path":"/ko/docs/types/GridChartCrossFilterDelta","kind":"type","title":"GridChartCrossFilterDelta","summary":"GridChartCrossFilterDelta의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartCrossFilterDelta {\n  readonly origin: 'chart-cross-filter';\n  readonly epoch: number;\n  readonly opSeq: number;\n  readonly model: ActiveFilterMap;\n  readonly setColumns: readonly string[];\n  readonly clearedColumns: readonly string[];\n  readonly issues: GridChartCrossFilterIssues;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/ko/docs/types/GridChartCrossFilterIssues","title":"GridChartCrossFilterIssues","description":""}]}]}]},{"path":"/ko/docs/types/GridChartCrossFilterIssues","kind":"type","title":"GridChartCrossFilterIssues","summary":"GridChartCrossFilterIssues의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartCrossFilterIssues {\n  readonly externalConflicts: readonly string[];\n  readonly externalIntersections: readonly string[];\n  readonly emptyIntersections: readonly string[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""}]}]}]},{"path":"/ko/docs/types/GridChartCrossFilterResult","kind":"type","title":"GridChartCrossFilterResult","summary":"GridChartCrossFilterResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartCrossFilterResult =\n  | { readonly status: 'applied'; readonly delta: GridChartCrossFilterDelta }\n  | { readonly status: 'unchanged'; readonly epoch: number }\n  | {\n    readonly status: 'stale-interaction';\n    readonly currentEpoch: number;\n    readonly staleEpoch: number;\n  }\n  | { readonly status: 'unknown-participant'; readonly participantId: string }\n  | { readonly status: 'invalid-interaction'; readonly detail: string }\n  | { readonly status: 'disposed' };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterDelta","title":"GridChartCrossFilterDelta","description":""}]}]}]},{"path":"/ko/docs/types/GridChartDestroyCause","kind":"type","title":"GridChartDestroyCause","summary":"GridChartDestroyCause의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartDestroyCause = \"api-destroy\" | \"grid-disconnect\" | \"materialize-failed\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridChartEvent","kind":"type","title":"GridChartEvent","summary":"GridChartEvent의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartEvent =\n  | (GridChartEventSpine & {\n    readonly type: 'created';\n    readonly chartType: SyChartConcreteType;\n    readonly projection: GridChartProjectionKind;\n    readonly source: GridChartModelSource;\n  })\n  | (GridChartEventSpine & {\n    readonly type: 'rangeChanged';\n    readonly source: GridChartModelSource;\n    readonly previousSource: GridChartModelSource;\n  })\n  | (GridChartEventSpine & {\n    readonly type: 'optionsChanged';\n    readonly options: GridChartOptions;\n    readonly changedKeys: readonly GridChartOptionKey[];\n  })\n  | (GridChartEventSpine & {\n    readonly type: 'destroyed';\n    readonly cause: GridChartDestroyCause;\n  });","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEventSpine","title":"GridChartEventSpine","description":""},{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/ko/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/ko/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/ko/docs/types/GridChartOptionKey","title":"GridChartOptionKey","description":""},{"path":"/ko/docs/types/GridChartDestroyCause","title":"GridChartDestroyCause","description":""}]}]}]},{"path":"/ko/docs/types/GridChartEventSpine","kind":"type","title":"GridChartEventSpine","summary":"GridChartEventSpine의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartEventSpine {\n  readonly origin: 'grid';\n  readonly chartKey: string;\n  readonly chartSeq: number;\n  readonly eventSeq: number;\n  readonly mutationId: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridChartExportFormat","kind":"type","title":"GridChartExportFormat","summary":"GridChartExportFormat의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartExportFormat = \"png\" | \"svg\" | \"csv\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""}]}]}]},{"path":"/ko/docs/types/GridChartExportRefusal","kind":"type","title":"GridChartExportRefusal","summary":"GridChartExportRefusal의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartExportRefusal = \"unknown-format\" | \"invalid-size\" | \"unknown-chart\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]}]},{"path":"/ko/docs/types/GridChartExportRequest","kind":"type","title":"GridChartExportRequest","summary":"GridChartExportRequest의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartExportRequest {\n  readonly format: string;\n  readonly width?: number;\n  readonly height?: number;\n  readonly scale?: number;\n  readonly background?: string | null;\n  readonly filename?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""}]}]}]},{"path":"/ko/docs/types/GridChartExportResult","kind":"type","title":"GridChartExportResult","summary":"GridChartExportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartExportResult =\n  | { readonly status: 'resolved'; readonly spec: GridChartExportSpec }\n  | { readonly status: 'refused'; readonly reason: GridChartExportRefusal; readonly detail: string };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportSpec","title":"GridChartExportSpec","description":""},{"path":"/ko/docs/types/GridChartExportRefusal","title":"GridChartExportRefusal","description":""}]}]}]},{"path":"/ko/docs/types/GridChartExportSpec","kind":"type","title":"GridChartExportSpec","summary":"GridChartExportSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartExportSpec {\n  readonly format: GridChartExportFormat;\n  readonly mimeType: string;\n  readonly filename: string;\n  readonly width: number;\n  readonly height: number;\n  readonly scale: number;\n  readonly pixelWidth: number;\n  readonly pixelHeight: number;\n  readonly background: string | null;\n  readonly backgroundSource: 'request' | 'theme' | 'default' | 'transparent';\n  readonly clamped: readonly ('width' | 'height' | 'scale')[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportResult","title":"GridChartExportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportFormat","title":"GridChartExportFormat","description":""}]}]}]},{"path":"/ko/docs/types/GridChartFocusStop","kind":"type","title":"GridChartFocusStop","summary":"GridChartFocusStop의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartFocusStop {\n  readonly id: string;\n  readonly kind: GridChartFocusStopKind;\n  readonly label: string;\n  readonly tabStop: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""},{"path":"/ko/docs/types/GridChartAccessibleSummary","title":"GridChartAccessibleSummary","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartFocusStopKind","title":"GridChartFocusStopKind","description":""}]}]}]},{"path":"/ko/docs/types/GridChartFocusStopKind","kind":"type","title":"GridChartFocusStopKind","summary":"GridChartFocusStopKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartFocusStopKind = \"series\" | \"chart\" | \"legend-item\" | \"data-table\" | \"export\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartFocusStop","title":"GridChartFocusStop","description":""}]}]}]},{"path":"/ko/docs/types/GridChartMenuColumn","kind":"type","title":"GridChartMenuColumn","summary":"GridChartMenuColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartMenuColumn {\n  readonly colId: string;\n  readonly header: string;\n  readonly numeric: boolean;\n  readonly textual: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuSelectionShape","title":"GridChartMenuSelectionShape","description":""}]}]}]},{"path":"/ko/docs/types/GridChartMenuEntry","kind":"type","title":"GridChartMenuEntry","summary":"GridChartMenuEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartMenuEntry {\n  readonly chartType: SyChartConcreteType;\n  readonly status: 'available' | 'unavailable';\n  readonly projection: GridChartProjectionKind | null;\n  readonly reason: GridChartMenuUnavailableReason | null;\n  readonly typeVerdict: GridChartTypeVerdict;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/ko/docs/types/GridChartMenuUnavailableReason","title":"GridChartMenuUnavailableReason","description":""},{"path":"/ko/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/ko/docs/types/GridChartMenuPermissions","kind":"type","title":"GridChartMenuPermissions","summary":"GridChartMenuPermissions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartMenuPermissions {\n  readonly readOnly: boolean;\n  readonly canCreate: boolean;\n  readonly canEditProperties: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""},{"path":"/ko/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""}]}]}]},{"path":"/ko/docs/types/GridChartMenuSelectionShape","kind":"type","title":"GridChartMenuSelectionShape","summary":"GridChartMenuSelectionShape의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartMenuSelectionShape {\n  readonly origin: 'range' | 'pivot';\n  readonly rowCount: number;\n  readonly columns: readonly GridChartMenuColumn[];\n  readonly categoryCandidates: readonly string[];\n  readonly numericColumns: readonly string[];\n  readonly electedCategoryColId: string | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuColumn","title":"GridChartMenuColumn","description":""}]}]}]},{"path":"/ko/docs/types/GridChartMenuUnavailableReason","kind":"type","title":"GridChartMenuUnavailableReason","summary":"GridChartMenuUnavailableReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartMenuUnavailableReason =\n  \"readonly\" | \"permission-denied\" | \"policy-refused\" | \"empty-selection\" | \"no-numeric-series\" | \"insufficient-numeric-columns\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModel","kind":"type","title":"GridChartModel","summary":"GridChartModel의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModel {\n  readonly chartKey: string;\n  readonly chartType: SyChartConcreteType;\n  readonly source: GridChartModelSource;\n  readonly container: GridChartContainerRequest;\n  readonly properties: GridChartProperties;\n  readonly pivot: GridChartPivotSelectionState | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/ko/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""},{"path":"/ko/docs/types/GridChartContainerRequest","title":"GridChartContainerRequest","description":""},{"path":"/ko/docs/types/GridChartProperties","title":"GridChartProperties","description":""},{"path":"/ko/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelCaptureIssue","kind":"type","title":"GridChartModelCaptureIssue","summary":"GridChartModelCaptureIssue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelCaptureIssue = \"unknown-chart-type\" | \"unsupported-chart-type\" | \"invalid-source\" | \"blank-chart-key\" | \"duplicate-chart-key\" | \"range-columns-unavailable\" | \"non-serializable\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelCaptureProblem","kind":"type","title":"GridChartModelCaptureProblem","summary":"GridChartModelCaptureProblem의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelCaptureProblem {\n  readonly chartKey: string;\n  readonly issue: GridChartModelCaptureIssue;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelCaptureIssue","title":"GridChartModelCaptureIssue","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelCaptureResult","kind":"type","title":"GridChartModelCaptureResult","summary":"GridChartModelCaptureResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelCaptureResult {\n  readonly envelope: GridChartModelEnvelope;\n  readonly issues: readonly GridChartModelCaptureProblem[];\n  readonly convertedSources: readonly string[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""},{"path":"/ko/docs/types/GridChartModelCaptureProblem","title":"GridChartModelCaptureProblem","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelEnvelope","kind":"type","title":"GridChartModelEnvelope","summary":"GridChartModelEnvelope의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelEnvelope {\n  readonly version: GridChartModelVersion;\n  readonly charts: readonly GridChartModel[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelVersion","title":"GridChartModelVersion","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelEnvelopeIssue","kind":"type","title":"GridChartModelEnvelopeIssue","summary":"GridChartModelEnvelopeIssue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelEnvelopeIssue {\n  readonly code: GridChartModelEnvelopeIssueCode;\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelEnvelopeIssueCode","title":"GridChartModelEnvelopeIssueCode","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelEnvelopeIssueCode","kind":"type","title":"GridChartModelEnvelopeIssueCode","summary":"GridChartModelEnvelopeIssueCode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelEnvelopeIssueCode =\n  \"non-serializable\" | \"not-an-object\" | \"missing-version\" | \"malformed-version\" | \"newer-major-version\" | \"missing-charts\" | \"malformed-charts\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelRestoreEntry","kind":"type","title":"GridChartModelRestoreEntry","summary":"GridChartModelRestoreEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelRestoreEntry {\n  readonly chartKey: string;\n  readonly status: GridChartModelRestoreStatus;\n  readonly model: GridChartModel | null;\n  readonly droppedColumns: readonly string[];\n  readonly issues: readonly GridChartModelRestoreIssue[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreStatus","title":"GridChartModelRestoreStatus","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/ko/docs/types/GridChartModelRestoreIssue","title":"GridChartModelRestoreIssue","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelRestoreIssue","kind":"type","title":"GridChartModelRestoreIssue","summary":"GridChartModelRestoreIssue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelRestoreIssue = \"unknown-chart-type\" | \"unsupported-chart-type\" | \"duplicate-chart-key\" | \"malformed-model\" | \"missing-columns\" | \"no-columns\" | \"insufficient-columns\" | \"rows-clamped\" | \"empty-row-window\" | \"pivot-unavailable\" | \"pivot-policy-conflict\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelRestoreReport","kind":"type","title":"GridChartModelRestoreReport","summary":"GridChartModelRestoreReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartModelRestoreReport {\n  readonly ok: boolean;\n  readonly entries: readonly GridChartModelRestoreEntry[];\n  readonly envelopeIssues: readonly GridChartModelEnvelopeIssue[];\n  readonly appliedMigrations: readonly string[];\n  readonly droppedFields: readonly { readonly field: string; readonly reason: string }[];\n  readonly counts: {\n    readonly restored: number;\n    readonly degraded: number;\n    readonly unrestorable: number;\n  };\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""},{"path":"/ko/docs/types/GridChartModelEnvelopeIssue","title":"GridChartModelEnvelopeIssue","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelRestoreStatus","kind":"type","title":"GridChartModelRestoreStatus","summary":"GridChartModelRestoreStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelRestoreStatus =\n  | 'restored'\n  | 'degraded'\n  | 'unrestorable';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreEntry","title":"GridChartModelRestoreEntry","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelSource","kind":"type","title":"GridChartModelSource","summary":"GridChartModelSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelSource = Extract<GridChartSourceSnapshot, { kind: 'params' }>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartSourceSnapshot","title":"GridChartSourceSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/GridChartModelVersion","kind":"type","title":"GridChartModelVersion","summary":"GridChartModelVersion의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartModelVersion =\n  `sy-grid-chart-model/${number}.${number}.${number}`;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelEnvelope","title":"GridChartModelEnvelope","description":""}]}]}]},{"path":"/ko/docs/types/GridChartOptionKey","kind":"type","title":"GridChartOptionKey","summary":"GridChartOptionKey의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartOptionKey = \"title\" | \"subtitle\" | \"legend\" | \"stacked\" | \"xAxisTitle\" | \"yAxisTitle\" | \"theme\" | \"background\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridChartOptions","kind":"type","title":"GridChartOptions","summary":"GridChartOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartOptions extends GridChartProperties {\n  readonly theme: string | null;\n  readonly background: string | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/ko/docs/types/GridChartPivotSelectionState","kind":"type","title":"GridChartPivotSelectionState","summary":"GridChartPivotSelectionState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartPivotSelectionState {\n  readonly version: 1;\n  readonly policy: GridChartPivotTotalsPolicy;\n  readonly seriesIdentityKeys: readonly string[] | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/ko/docs/types/GridChartPivotTotalColumnMode","kind":"type","title":"GridChartPivotTotalColumnMode","summary":"GridChartPivotTotalColumnMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartPivotTotalColumnMode =\n  \"exclude\" | \"include\" | \"only\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/ko/docs/types/GridChartPivotTotalRowMode","kind":"type","title":"GridChartPivotTotalRowMode","summary":"GridChartPivotTotalRowMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartPivotTotalRowMode = \"exclude\" | \"include\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotTotalsPolicy","title":"GridChartPivotTotalsPolicy","description":""}]}]}]},{"path":"/ko/docs/types/GridChartPivotTotalsPolicy","kind":"type","title":"GridChartPivotTotalsPolicy","summary":"GridChartPivotTotalsPolicy의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartPivotTotalsPolicy {\n  readonly totalColumns: GridChartPivotTotalColumnMode;\n  readonly subtotalRows: GridChartPivotTotalRowMode;\n  readonly grandTotalRow: GridChartPivotTotalRowMode;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotSelectionState","title":"GridChartPivotSelectionState","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartPivotTotalColumnMode","title":"GridChartPivotTotalColumnMode","description":""},{"path":"/ko/docs/types/GridChartPivotTotalRowMode","title":"GridChartPivotTotalRowMode","description":""}]}]}]},{"path":"/ko/docs/types/GridChartProjectionKind","kind":"type","title":"GridChartProjectionKind","summary":"GridChartProjectionKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartProjectionKind = \"category-series\" | \"category-value\" | \"xy-pairs\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/ko/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/ko/docs/types/GridChartProperties","kind":"type","title":"GridChartProperties","summary":"GridChartProperties의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChartProperties {\n  readonly title: string | null;\n  readonly subtitle: string | null;\n  readonly legend: boolean;\n  readonly stacked: boolean;\n  readonly xAxisTitle: string | null;\n  readonly yAxisTitle: string | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/ko/docs/types/GridChartOptions","title":"GridChartOptions","description":""},{"path":"/ko/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""}]}]}]},{"path":"/ko/docs/types/GridChartSourceSnapshot","kind":"type","title":"GridChartSourceSnapshot","summary":"GridChartSourceSnapshot의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartSourceSnapshot =\n  | {\n    readonly kind: 'range';\n    readonly rangeId: number;\n    readonly firstRow: number;\n    readonly lastRow: number;\n    readonly firstCol: number;\n    readonly lastCol: number;\n  }\n  | {\n    readonly kind: 'params';\n    readonly firstRow: number;\n    readonly lastRow: number;\n    readonly columnIds: readonly string[];\n  };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelSource","title":"GridChartModelSource","description":""}]}]}]},{"path":"/ko/docs/types/GridChartSyncMutation","kind":"type","title":"GridChartSyncMutation","summary":"GridChartSyncMutation의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartSyncMutation = \"filter\" | \"column\" | \"sort\" | \"edit\" | \"transaction\" | \"range-handle\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""}]}]}]},{"path":"/ko/docs/types/GridChartTypeRefusalReason","kind":"type","title":"GridChartTypeRefusalReason","summary":"GridChartTypeRefusalReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartTypeRefusalReason =\n  \"variant-datum-shape\" | \"single-value-shape\" | \"stage-shape\" | \"unknown-chart-type\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/ko/docs/types/GridChartTypeVerdict","kind":"type","title":"GridChartTypeVerdict","summary":"GridChartTypeVerdict의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChartTypeVerdict =\n  | {\n    readonly status: 'supported';\n    readonly chartType: SyChartConcreteType;\n    readonly projection: GridChartProjectionKind;\n  }\n  | {\n    readonly status: 'refused';\n    readonly chartType: SyChartConcreteType;\n    readonly reason: Exclude<GridChartTypeRefusalReason, 'unknown-chart-type'>;\n  }\n  | {\n    readonly status: 'unknown';\n    readonly requestedType: string;\n    readonly reason: 'unknown-chart-type';\n  };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyChartConcreteType","title":"SyChartConcreteType","description":""},{"path":"/ko/docs/types/GridChartProjectionKind","title":"GridChartProjectionKind","description":""},{"path":"/ko/docs/types/GridChartTypeRefusalReason","title":"GridChartTypeRefusalReason","description":""}]}]}]},{"path":"/ko/docs/types/GridChunkFailureReason","kind":"type","title":"GridChunkFailureReason","summary":"GridChunkFailureReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChunkFailureReason = \"aborted\" | \"timeout\" | \"tier-unavailable\" | \"integrity\" | \"csp\" | \"offline\" | \"network\" | \"invalid-module\" | \"unknown\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridChunkId","kind":"type","title":"GridChunkId","summary":"GridChunkId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChunkId = \"batch-edit\" | \"chart-link\" | \"collab\" | \"component-runtime\" | \"conditional-format\" | \"export-pdf\" | \"export-xlsx\" | \"fill\" | \"formula-acceleration\" | \"formula-core\" | \"formula-engine\" | \"formula-wasm\" | \"formula-worker\" | \"group-pivot\" | \"import-xlsx\" | \"live-api\" | \"master-detail\" | \"pivot\" | \"pro-filters\" | \"pro-panels\" | \"range-selection\" | \"rich-select\" | \"row-drag\" | \"row-layout\" | \"ssrm-ops\" | \"tree-data\" | \"viewport-row-model\" | \"workbook-ops\";","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/preloadChunks","title":"preloadChunks","description":"필요한 기능 코드를 미리 로드합니다. 기능 권한을 활성화하거나 데이터를 미리 조회하는 작업과는 다릅니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridChunkKind","kind":"type","title":"GridChunkKind","summary":"GridChunkKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChunkKind = 'esm' | 'wasm' | 'worker';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridChunkLoadEventDetail","kind":"type","title":"GridChunkLoadEventDetail","summary":"GridChunkLoadEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridChunkLoadEventDetail {\n  readonly chunkId: GridChunkId;\n  readonly kind: GridChunkKind;\n  readonly tier: GridChunkTier;\n  readonly phase: 'loading' | 'loaded' | 'failed';\n  readonly attempt: number;\n  readonly durationMs?: number;\n  readonly reason?: GridChunkFailureReason;\n  readonly message?: string;\n  readonly httpStatus?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/chunkLoading","title":"chunkLoading","description":"기능 코드 조각의 로딩이 시작되었을 때 발생합니다. 행 데이터 조회 이벤트와 구분합니다."},{"path":"/ko/docs/events/chunkLoaded","title":"chunkLoaded","description":"기능 코드 조각을 불러왔을 때 발생합니다."},{"path":"/ko/docs/events/chunkLoadFailed","title":"chunkLoadFailed","description":"기능 코드 로딩이 실패했을 때 발생합니다. 오류와 대상 기능을 확인해 재시도·대체 안내에 연결합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/ko/docs/types/GridChunkKind","title":"GridChunkKind","description":""},{"path":"/ko/docs/types/GridChunkTier","title":"GridChunkTier","description":""},{"path":"/ko/docs/types/GridChunkFailureReason","title":"GridChunkFailureReason","description":""}]}]}]},{"path":"/ko/docs/types/GridChunkTier","kind":"type","title":"GridChunkTier","summary":"GridChunkTier의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridChunkTier = 'community' | 'pro';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridCollabConflict","kind":"type","title":"GridCollabConflict","summary":"GridCollabConflict의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCollabConflict {\n  rowId: string | number;\n  field: string;\n  localValue: unknown;\n  remoteValue: unknown;\n  winnerValue: unknown;\n  remoteAuthor?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/collabConflictResolved","title":"collabConflictResolved","description":"동시 편집 충돌을 해결했을 때 발생합니다. 충돌의 실제 결과를 읽어 사용자에게 설명합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/GridCollabSelection","kind":"type","title":"GridCollabSelection","summary":"GridCollabSelection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCollabSelection {\n  startRow: number;\n  startCol: number;\n  endRow: number;\n  endCol: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]}]},{"path":"/ko/docs/types/GridCollaboratorInfo","kind":"type","title":"GridCollaboratorInfo","summary":"GridCollaboratorInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridCollaboratorInfo {\n  id: string;\n  name?: string;\n  color?: string;\n  cursor?: { row: number; col: number } | null;\n  selection?: GridCollabSelection | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCollaborators","title":"getCollaborators","description":"현재 협업 참가자 정보를 읽습니다."},{"path":"/ko/docs/events/collaboratorJoined","title":"collaboratorJoined","description":"협업 방에 참가자가 들어왔을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridPresenceChangedDetail","title":"GridPresenceChangedDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollabSelection","title":"GridCollabSelection","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnDef","kind":"type","title":"GridColumnDef","summary":"GridColumnDef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnDef {\n  key: string;\n  label: string;\n  width?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columns","title":"columns","description":"열 정의를 공급하는 호환 입력입니다. 새 구성에서는 columnDefs를 우선 사용합니다."}]}]}]},{"path":"/ko/docs/types/GridColumnDefinition","kind":"type","title":"GridColumnDefinition","summary":"GridColumnDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridColumnDefinition<\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n> =\n  | ColumnDef<TData, TValue, TContext>\n  | GridColumnGroupDef<TData, TContext, TValue>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnGroupDef","kind":"type","title":"GridColumnGroupDef","summary":"GridColumnGroupDef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridColumnGroupDef<\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n> = ColumnGroupDef<ColumnDef<TData, TValue, TContext>>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columnDefs","title":"columnDefs","description":"열의 데이터 필드·제목·크기·표시·편집을 정의합니다. 열 그룹 정의를 함께 넣어 다단 머리글을 구성할 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/DetailGridOptions","title":"DetailGridOptions","description":""},{"path":"/ko/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnGroupRef","kind":"type","title":"GridColumnGroupRef","summary":"GridColumnGroupRef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnGroupRef<\n  TData = GridData,\n  TContext = unknown,\n> extends GridLiveRef<TData> {\n  readonly id: string;\n  getDefinition(): Readonly<GridColumnGroupDef<TData, TContext>> | null;\n  getChildren(): ReadonlyArray<\n    GridColumnRef<TData, unknown, TContext> | GridColumnGroupRef<TData, TContext>\n  >;\n  getLeafColumns(): ReadonlyArray<GridColumnRef<TData, unknown, TContext>>;\n  getParent(): GridColumnGroupRef<TData, TContext> | null;\n  isExpanded(): boolean;\n  isPadding(): boolean;\n  isDisplayed(): boolean;\n  setExpanded(expanded: boolean): Promise<boolean>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getColumnGroup","title":"getColumnGroup","description":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."},{"path":"/ko/docs/methods/getColumnGroups","title":"getColumnGroups","description":"현재 열 그룹 객체 목록을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnMenuContext","kind":"type","title":"GridColumnMenuContext","summary":"GridColumnMenuContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnMenuContext { readonly colId: string; readonly column: Readonly<ColumnDef>; }","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columnMenuItems","title":"columnMenuItems","description":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnMenuItem","kind":"type","title":"GridColumnMenuItem","summary":"GridColumnMenuItem의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnMenuItem {\n  readonly id: string;\n  readonly label: string;\n  readonly disabled?: boolean;\n  readonly onSelect: () => void | Promise<void>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/columnMenuItems","title":"columnMenuItems","description":"현재 열 문맥을 받아 사용자에게 제공할 열 메뉴 항목을 구성합니다."}]}]}]},{"path":"/ko/docs/types/GridColumnRef","kind":"type","title":"GridColumnRef","summary":"GridColumnRef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnRef<\n  TData = GridData,\n  TValue = unknown,\n  TContext = unknown,\n> extends GridLiveRef<TData, TValue> {\n  readonly id: string;\n  getDefinition(): Readonly<ColumnDef<TData, TValue, TContext>> | null;\n  getActualWidth(): number | null;\n  isVisible(): boolean;\n  getPinned(): 'left' | 'right' | null;\n  getSort(): GridColumnSortState | null;\n  getAggFunc(): string | null;\n  isPivotActive(): boolean;\n  getParent(): GridColumnGroupRef<TData, TContext> | null;\n  setWidth(width: number): Promise<boolean>;\n  setVisible(visible: boolean): Promise<boolean>;\n  setPinned(side: 'left' | 'right' | null): Promise<boolean>;\n  setSort(direction: 'asc' | 'desc' | null, options?: { multi?: boolean }): Promise<boolean>;\n  setAggFunc(name: string | null): Promise<boolean>;\n  getFilterModel(): Promise<unknown>;\n  setFilterModel(model: unknown | null): Promise<boolean>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getColumn","title":"getColumn","description":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."},{"path":"/ko/docs/methods/getColumns","title":"getColumns","description":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridColumnSortState","title":"GridColumnSortState","description":""},{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnReorderedDetail","kind":"type","title":"GridColumnReorderedDetail","summary":"GridColumnReorderedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnReorderedDetail {\n  colId: string;\n  originIndex: number;\n  finalIndex: number;\n  orderBefore: ReadonlyArray<string>;\n  orderAfter: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/columnReordered","title":"columnReordered","description":"열 순서가 바뀌었을 때 발생합니다."}]}]}]},{"path":"/ko/docs/types/GridColumnResizedDetail","kind":"type","title":"GridColumnResizedDetail","summary":"GridColumnResizedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnResizedDetail {\n  colId: string;\n  oldWidth: number;\n  newWidth: number;\n  wasClamped: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/columnResized","title":"columnResized","description":"열 너비가 바뀌었을 때 발생합니다. 현재 너비를 화면 상태 저장에 반영합니다."}]}]}]},{"path":"/ko/docs/types/GridColumnSortState","kind":"type","title":"GridColumnSortState","summary":"GridColumnSortState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnSortState {\n  readonly direction: 'asc' | 'desc';\n  readonly index: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""}]}]}]},{"path":"/ko/docs/types/GridColumnVisibilityChangedDetail","kind":"type","title":"GridColumnVisibilityChangedDetail","summary":"GridColumnVisibilityChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridColumnVisibilityChangedDetail {\n  colId: string;\n  hidden: boolean;\n  hiddenIds: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/columnVisibilityChanged","title":"columnVisibilityChanged","description":"열 표시·숨김 상태가 바뀌었을 때 발생합니다."}]}]}]},{"path":"/ko/docs/types/GridComponentClassDefinition","kind":"type","title":"GridComponentClassDefinition","summary":"GridComponentClassDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentClassDefinition<TInstance> {\n  readonly type: 'class';\n  readonly component: GridComponentConstructor<TInstance>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentConstructor","title":"GridComponentConstructor","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentConstructor","kind":"type","title":"GridComponentConstructor","summary":"GridComponentConstructor의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentConstructor<TInstance> {\n  new (): TInstance;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentDefinition","kind":"type","title":"GridComponentDefinition","summary":"GridComponentDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentDefinition<TInstance, TParams> =\n  | GridEagerComponentDefinition<TInstance, TParams>\n  | GridComponentLazyDefinition<TInstance, TParams>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""},{"path":"/ko/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentDefinitionFor","kind":"type","title":"GridComponentDefinitionFor","summary":"GridComponentDefinitionFor의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentDefinitionFor<\n  TKind extends GridComponentKind,\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TModel = unknown,\n  TContext = unknown,\n> = GridComponentDefinitionMap<TData, TValue, TModel, TContext>[TKind];","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentDefinitionMap","kind":"type","title":"GridComponentDefinitionMap","summary":"GridComponentDefinitionMap의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentDefinitionMap<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TModel = unknown,\n  TContext = unknown,\n> {\n  readonly renderer: GridRendererDefinition<TData, TValue, TContext>;\n  readonly editor: GridEditorDefinition<TData, TValue, TContext>;\n  readonly filter: GridFilterDefinition<TData, TValue, TModel, TContext>;\n  readonly floatingFilter: GridFloatingFilterDefinition<TModel, TContext>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentErrorCode","kind":"type","title":"GridComponentErrorCode","summary":"GridComponentErrorCode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentErrorCode =\n  \"INVALID_NAME\" | \"DUPLICATE_COMPONENT\" | \"COMPONENT_NOT_FOUND\" | \"LAZY_LOAD_FAILED\" | \"LAZY_INVALID_DEFINITION\" | \"CREATE_FAILED\" | \"INIT_FAILED\" | \"GUI_FAILED\" | \"REFRESH_FAILED\" | \"AFTER_ATTACH_FAILED\" | \"AFTER_DETACH_FAILED\" | \"VALUE_FAILED\" | \"VALIDATION_FAILED\" | \"COMMIT_FAILED\" | \"MODEL_FAILED\" | \"FOCUS_FAILED\" | \"POPUP_FAILED\" | \"FRAMEWORK_FAILED\" | \"DESTROY_FAILED\" | \"TIMEOUT\" | \"ABORTED\" | \"INVALID_INSTANCE\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentErrorDetails","kind":"type","title":"GridComponentErrorDetails","summary":"GridComponentErrorDetails의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentErrorDetails {\n  readonly code: GridComponentErrorCode;\n  readonly phase: GridComponentLifecyclePhase;\n  readonly componentKind: GridComponentKind;\n  readonly componentName?: string;\n  readonly mountKey?: string;\n  readonly generation?: number;\n  readonly retryable: boolean;\n  readonly cause?: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/componentError","title":"componentError","description":"사용자 컴포넌트 초기화·호출 등에서 오류가 발생했을 때 알립니다. 오류를 무시하지 말고 대상과 단계별로 처리합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentErrorCode","title":"GridComponentErrorCode","description":""},{"path":"/ko/docs/types/GridComponentLifecyclePhase","title":"GridComponentLifecyclePhase","description":""},{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentFactory","kind":"type","title":"GridComponentFactory","summary":"GridComponentFactory의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentFactory<TInstance, TParams> = (\n  context: GridComponentFactoryContext<TParams>,\n) => GridMaybePromise<TInstance>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentFactoryContext","title":"GridComponentFactoryContext","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentFactoryContext","kind":"type","title":"GridComponentFactoryContext","summary":"GridComponentFactoryContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentFactoryContext<TParams> {\n  readonly params: TParams;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentFactoryDefinition","kind":"type","title":"GridComponentFactoryDefinition","summary":"GridComponentFactoryDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentFactoryDefinition<TInstance, TParams> {\n  readonly type: 'factory';\n  readonly create: GridComponentFactory<TInstance, TParams>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentKind","kind":"type","title":"GridComponentKind","summary":"GridComponentKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentKind = \"renderer\" | \"editor\" | \"filter\" | \"floatingFilter\";","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},{"path":"/ko/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/ko/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentLazyDefinition","kind":"type","title":"GridComponentLazyDefinition","summary":"GridComponentLazyDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentLazyDefinition<TInstance, TParams> {\n  readonly type: 'lazy';\n  readonly load: (\n    context: GridLazyComponentContext,\n  ) => Promise<GridEagerComponentDefinition<TInstance, TParams>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLazyComponentContext","title":"GridLazyComponentContext","description":""},{"path":"/ko/docs/types/GridEagerComponentDefinition","title":"GridEagerComponentDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentLifecyclePhase","kind":"type","title":"GridComponentLifecyclePhase","summary":"GridComponentLifecyclePhase의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentLifecyclePhase =\n  | 'lookup'\n  | 'lazy-load'\n  | 'create'\n  | 'init'\n  | 'gui'\n  | 'refresh'\n  | 'after-attach'\n  | 'after-detach'\n  | 'value'\n  | 'validate'\n  | 'commit'\n  | 'model'\n  | 'focus'\n  | 'popup'\n  | 'framework'\n  | 'destroy';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentLocalDefinitions","kind":"type","title":"GridComponentLocalDefinitions","summary":"GridComponentLocalDefinitions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentLocalDefinitions<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TModel = unknown,\n  TContext = unknown,\n> {\n  readonly renderer?: Readonly<\n    Record<string, GridRendererDefinition<TData, TValue, TContext>>\n  >;\n  readonly editor?: Readonly<\n    Record<string, GridEditorDefinition<TData, TValue, TContext>>\n  >;\n  readonly filter?: Readonly<\n    Record<string, GridFilterDefinition<TData, TValue, TModel, TContext>>\n  >;\n  readonly floatingFilter?: Readonly<\n    Record<string, GridFloatingFilterDefinition<TModel, TContext>>\n  >;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/components","title":"components","description":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentParams","kind":"type","title":"GridComponentParams","summary":"GridComponentParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridComponentParams<TContext = unknown> {\n  readonly componentKind: GridComponentKind;\n  readonly instanceId: string;\n  readonly signal: AbortSignal;\n  readonly context: TContext;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/ko/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/ko/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/ko/docs/types/GridComponentRegistrationScope","kind":"type","title":"GridComponentRegistrationScope","summary":"GridComponentRegistrationScope의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridComponentRegistrationScope = 'local' | 'global';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},{"path":"/ko/docs/methods/unregisterGridComponent","title":"unregisterGridComponent","description":"등록된 사용자 컴포넌트를 해제하고 성공 여부를 반환합니다."},{"path":"/ko/docs/methods/getRegisteredGridComponentNames","title":"getRegisteredGridComponentNames","description":"현재 등록된 사용자 Grid 컴포넌트 이름을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridData","kind":"type","title":"GridData","summary":"GridData의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridData = Record<string, unknown>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowData","title":"rowData","description":"표에 공급할 원본 행 배열입니다. 전체 조회 결과를 교체할 때 새 배열을 전달하고, 일부 행만 바꿀 때는 applyTransaction을 사용합니다."},{"path":"/ko/docs/options/components","title":"components","description":"이 Grid에서 사용할 사용자 정의 렌더러·편집기·필터 등의 로컬 컴포넌트 정의를 등록합니다."},{"path":"/ko/docs/options/externalFilter","title":"externalFilter","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."},{"path":"/ko/docs/options/rowHeightFn","title":"rowHeightFn","description":"행 인덱스와 데이터를 받아 개별 행 높이를 계산합니다. 높이에 영향을 주는 데이터가 바뀌면 refreshRowHeights로 다시 계산합니다."},{"path":"/ko/docs/options/getRowId","title":"getRowId","description":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."},{"path":"/ko/docs/methods/getApi","title":"getApi","description":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."},{"path":"/ko/docs/methods/getColumn","title":"getColumn","description":"식별자로 현재 열 객체를 찾습니다. 없는 열은 null이며 초기 columnDefs 복사본이 아닌 현재 상태를 조회합니다."},{"path":"/ko/docs/methods/getColumns","title":"getColumns","description":"현재 열 객체 목록을 읽습니다. 열 너비·순서·표시 상태를 앱과 연결할 때 사용합니다."},{"path":"/ko/docs/methods/getColumnGroup","title":"getColumnGroup","description":"식별자로 현재 열 그룹 객체를 찾습니다. 없는 그룹은 null입니다."},{"path":"/ko/docs/methods/getColumnGroups","title":"getColumnGroups","description":"현재 열 그룹 객체 목록을 읽습니다."},{"path":"/ko/docs/methods/getRow","title":"getRow","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},{"path":"/ko/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."},{"path":"/ko/docs/methods/forEachRow","title":"forEachRow","description":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."},{"path":"/ko/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."},{"path":"/ko/docs/methods/registerGridComponent","title":"registerGridComponent","description":"공개 컴포넌트 계약에 따라 사용자 Grid 컴포넌트를 등록합니다."},{"path":"/ko/docs/methods/replaceGridComponent","title":"replaceGridComponent","description":"등록된 사용자 컴포넌트 정의를 교체합니다."},{"path":"/ko/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."},{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."},{"path":"/ko/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."},{"path":"/ko/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/ko/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/ko/docs/types/GridCellEditingRequestedDetail","title":"GridCellEditingRequestedDetail","description":""},{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/ko/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/ko/docs/types/GridColumnGroupDef","title":"GridColumnGroupDef","description":""},{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/GridRemoteEditAppliedDetail","title":"GridRemoteEditAppliedDetail","description":""},{"path":"/ko/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""},{"path":"/ko/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColSpanParams","title":"SyGridColSpanParams","description":""},{"path":"/ko/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/ko/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowSpanParams","title":"SyGridRowSpanParams","description":""},{"path":"/ko/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]}]},{"path":"/ko/docs/types/GridEagerComponentDefinition","kind":"type","title":"GridEagerComponentDefinition","summary":"GridEagerComponentDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEagerComponentDefinition<TInstance, TParams> =\n  | GridComponentFactoryDefinition<TInstance, TParams>\n  | GridComponentClassDefinition<TInstance>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentFactoryDefinition","title":"GridComponentFactoryDefinition","description":""},{"path":"/ko/docs/types/GridComponentClassDefinition","title":"GridComponentClassDefinition","description":""}]}]}]},{"path":"/ko/docs/types/GridEditSource","kind":"type","title":"GridEditSource","summary":"GridEditSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEditSource = 'local' | 'remote' | 'undo' | 'redo';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""},{"path":"/ko/docs/types/GridRowDataChangedDetail","title":"GridRowDataChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridEditorDefinition","kind":"type","title":"GridEditorDefinition","summary":"GridEditorDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEditorDefinition<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> = GridComponentDefinition<\n  GridEditorInstance<TData, TValue, TContext>,\n  GridEditorParams<TData, TValue, TContext>\n>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""}]}]}]},{"path":"/ko/docs/types/GridEditorInstance","kind":"type","title":"GridEditorInstance","summary":"GridEditorInstance의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridEditorInstance<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> extends GridGuiComponent<\n    GridEditorParams<TData, TValue, TContext>,\n    HTMLElement\n  > {\n  afterGuiAttached?(): GridMaybePromise<void>;\n  getValue(): GridMaybePromise<TValue>;\n  isCancelBeforeStart?(): GridMaybePromise<boolean>;\n  isCancelAfterEnd?(): GridMaybePromise<boolean>;\n  isPopup?(): boolean;\n  getPopupPosition?(): 'over' | 'under';\n  getValidationErrors?(\n    value: TValue,\n  ): GridMaybePromise<ReadonlyArray<GridEditorValidationError> | null>;\n  focusIn?(): void;\n  focusOut?(): void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""},{"path":"/ko/docs/types/GridEditorValidationError","title":"GridEditorValidationError","description":""}]}]}]},{"path":"/ko/docs/types/GridEditorParams","kind":"type","title":"GridEditorParams","summary":"GridEditorParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridEditorParams<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> extends GridComponentParams<TContext> {\n  readonly value: TValue;\n  readonly data: Readonly<TData>;\n  readonly rowIndex: number;\n  readonly colId: string;\n  readonly cellElement?: HTMLElement;\n  readonly startedBy: 'keyboard' | 'mouse' | 'api';\n  readonly event: Event | null;\n  readonly stopEditing: (cancel?: boolean) => void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorDefinition","title":"GridEditorDefinition","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/ko/docs/types/GridEditorValidationError","kind":"type","title":"GridEditorValidationError","summary":"GridEditorValidationError의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridEditorValidationError {\n  readonly message: string;\n  readonly code?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""}]}]}]},{"path":"/ko/docs/types/GridEmptyStateActionDetail","kind":"type","title":"GridEmptyStateActionDetail","summary":"GridEmptyStateActionDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridEmptyStateActionDetail {\n  kind: EmptyStateKind;\n  action: 'clear-filters' | 'reload';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/emptyStateActionClicked","title":"emptyStateActionClicked","description":"빈 결과 안내 영역의 작업 버튼을 눌렀을 때 발생합니다. 작업 종류에 맞게 앱 흐름을 연결합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""}]}]}]},{"path":"/ko/docs/types/GridEngineMode","kind":"type","title":"GridEngineMode","summary":"GridEngineMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEngineMode = 'auto' | GridEngineTier;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/engine","title":"engine","description":"자동 선택·표준 JavaScript·Pro 중 요청할 처리 모드를 지정합니다. 실제 결과는 getActiveTier로 확인합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""}]}]}]},{"path":"/ko/docs/types/GridEngineTier","kind":"type","title":"GridEngineTier","summary":"GridEngineTier의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEngineTier = 'standard' | 'pro';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getActiveTier","title":"getActiveTier","description":"실제 활성화된 처리 엔진 등급을 읽습니다. engine에 요청한 모드와 다를 수 있습니다."},{"path":"/ko/docs/events/queryComplete","title":"queryComplete","description":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEngineMode","title":"GridEngineMode","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridEventSource","kind":"type","title":"GridEventSource","summary":"GridEventSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridEventSource =\n  | 'api'\n  | 'ui'\n  | 'state'\n  | 'rowData'\n  | 'columnDefs'\n  | 'disconnect';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridExternalFilterCallbacks","kind":"type","title":"GridExternalFilterCallbacks","summary":"GridExternalFilterCallbacks의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridExternalFilterCallbacks<\n  TData = Record<string, unknown>,\n> {\n  readonly isExternalFilterPresent: () => boolean;\n  readonly doesExternalFilterPass: (data: Readonly<TData>) => boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/externalFilter","title":"externalFilter","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/GridExternalFilterInstance","kind":"type","title":"GridExternalFilterInstance","summary":"GridExternalFilterInstance의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridExternalFilterInstance<\n  TData = Record<string, unknown>,\n  TContext = unknown,\n> {\n  isExternalFilterPresent(): boolean;\n  doesExternalFilterPass(data: Readonly<TData>): boolean;\n  refresh?(context: TContext, signal: AbortSignal): GridMaybePromise<void>;\n  destroy?(): GridMaybePromise<void>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/externalFilter","title":"externalFilter","description":"앱 바깥의 검색 조건으로 각 행의 통과 여부를 판단합니다. 필터 활성 여부와 행 판정 콜백 또는 수명 주기를 가진 인스턴스를 전달합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridFieldLeaf","kind":"type","title":"GridFieldLeaf","summary":"GridFieldLeaf의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridFieldLeaf =\n  | string\n  | number\n  | boolean\n  | bigint\n  | symbol\n  | null\n  | undefined\n  | Date\n  | RegExp\n  | Function;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/NestedObject","title":"NestedObject","description":""}]}]}]},{"path":"/ko/docs/types/GridFieldPath","kind":"type","title":"GridFieldPath","summary":"GridFieldPath의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridFieldPath<TData> =\n  string extends keyof TData\n    ? string\n    : {\n        [K in StringKey<TData>]:\n          | K\n          | (NestedObject<TData[K]> extends never\n            ? never\n            : `${K}.${GridFieldPathLevel2<NestedObject<TData[K]>>}`);\n      }[StringKey<TData>];","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/field","title":"field","description":"원본 행에서 값을 읽는 필수 필드 경로입니다. 표시 제목이 아니라 데이터의 키를 사용합니다."},{"path":"/ko/docs/columns/tooltipField","title":"tooltipField","description":"툴팁에 사용할 원본 데이터 필드입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/StringKey","title":"StringKey","description":""},{"path":"/ko/docs/types/NestedObject","title":"NestedObject","description":""},{"path":"/ko/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]}]},{"path":"/ko/docs/types/GridFieldPathLevel2","kind":"type","title":"GridFieldPathLevel2","summary":"GridFieldPathLevel2의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type GridFieldPathLevel2<T> = {\n  [K in StringKey<T>]:\n    | K\n    | (NestedObject<T[K]> extends never\n      ? never\n      : `${K}.${StringKey<NestedObject<T[K]>>}`);\n}[StringKey<T>];","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/StringKey","title":"StringKey","description":""},{"path":"/ko/docs/types/NestedObject","title":"NestedObject","description":""}]}]}]},{"path":"/ko/docs/types/GridFilterChangedDetail","kind":"type","title":"GridFilterChangedDetail","summary":"GridFilterChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFilterChangedDetail {\n  field: string;\n  filter: ActiveFilter | null;\n  activeMap: ActiveFilterMap;\n  customModel?: unknown;\n  previousCustomModel?: unknown;\n  source?: 'ui' | 'api' | 'restore' | 'component';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/filterChanged","title":"filterChanged","description":"적용된 필터가 바뀌었을 때 발생합니다. 입력 중 변경인 filterModified와 구분합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/ko/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""}]}]}]},{"path":"/ko/docs/types/GridFilterDefinition","kind":"type","title":"GridFilterDefinition","summary":"GridFilterDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridFilterDefinition<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TModel = unknown,\n  TContext = unknown,\n> = GridComponentDefinition<\n  GridFilterInstance<TData, TValue, TModel, TContext>,\n  GridFilterParams<TData, TValue, TContext>\n>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/filter","title":"filter","description":"이 열에 사용할 기본 필터 종류 또는 사용자 필터 정의입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/GridFilterParams","title":"GridFilterParams","description":""}]}]}]},{"path":"/ko/docs/types/GridFilterInstance","kind":"type","title":"GridFilterInstance","summary":"GridFilterInstance의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFilterInstance<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TModel = unknown,\n  TContext = unknown,\n> extends GridGuiComponent<\n    GridFilterParams<TData, TValue, TContext>,\n    HTMLElement\n  > {\n  isActive(): boolean;\n  doesFilterPass(data: Readonly<TData>): boolean;\n  getModel(): TModel | null;\n  setModel(model: TModel | null): GridMaybePromise<void>;\n  getModelAsString?(model: TModel | null): string;\n  afterGuiAttached?(): GridMaybePromise<void>;\n  afterGuiDetached?(): GridMaybePromise<void>;\n  onNewRowsLoaded?(): GridMaybePromise<void>;\n  onAnyFilterChanged?(): GridMaybePromise<void>;\n  refresh?(\n    params: GridFilterParams<TData, TValue, TContext>,\n  ): GridMaybePromise<boolean>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getColumnFilterInstance","title":"getColumnFilterInstance","description":"열의 사용자 필터 인스턴스를 조회합니다. 아직 생성되지 않았거나 없는 경우 null일 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridFilterParams","title":"GridFilterParams","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridFilterModifiedDetail","kind":"type","title":"GridFilterModifiedDetail","summary":"GridFilterModifiedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFilterModifiedDetail {\n  field: string;\n  source: 'component';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/filterModified","title":"filterModified","description":"필터 입력이 수정되었을 때 발생합니다. 적용 버튼이 있는 필터에서는 아직 결과 행에 반영되기 전일 수 있습니다."}]}]}]},{"path":"/ko/docs/types/GridFilterParams","kind":"type","title":"GridFilterParams","summary":"GridFilterParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFilterParams<\n  TData = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> extends GridComponentParams<TContext> {\n  readonly colId: string;\n  readonly getValue: (data: Readonly<TData>) => TValue;\n  readonly filterChangedCallback: () => void;\n  readonly filterModifiedCallback: () => void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFilterDefinition","title":"GridFilterDefinition","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/ko/docs/types/GridFloatingFilterDefinition","kind":"type","title":"GridFloatingFilterDefinition","summary":"GridFloatingFilterDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridFloatingFilterDefinition<\n  TModel = unknown,\n  TContext = unknown,\n> = GridComponentDefinition<\n  GridFloatingFilterInstance<TModel, TContext>,\n  GridFloatingFilterParams<TModel, TContext>\n>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/floatingFilterComponent","title":"floatingFilterComponent","description":"머리글 아래에 표시할 사용자 필터 입력 컴포넌트입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/ko/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""}]}]}]},{"path":"/ko/docs/types/GridFloatingFilterInstance","kind":"type","title":"GridFloatingFilterInstance","summary":"GridFloatingFilterInstance의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFloatingFilterInstance<\n  TModel = unknown,\n  TContext = unknown,\n> extends GridGuiComponent<\n    GridFloatingFilterParams<TModel, TContext>,\n    HTMLElement\n  > {\n  onParentModelChanged(\n    model: TModel | null,\n    source: 'api' | 'ui' | 'restore',\n  ): GridMaybePromise<void>;\n  afterGuiAttached?(): GridMaybePromise<void>;\n  afterGuiDetached?(): GridMaybePromise<void>;\n  refresh?(\n    params: GridFloatingFilterParams<TModel, TContext>,\n  ): GridMaybePromise<boolean>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridFloatingFilterParams","title":"GridFloatingFilterParams","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridFloatingFilterParams","kind":"type","title":"GridFloatingFilterParams","summary":"GridFloatingFilterParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFloatingFilterParams<\n  TModel = unknown,\n  TContext = unknown,\n> extends GridComponentParams<TContext> {\n  readonly colId: string;\n  readonly parentModel: TModel | null;\n  readonly onModelChange: (model: TModel | null) => void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFloatingFilterDefinition","title":"GridFloatingFilterDefinition","description":""},{"path":"/ko/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""}]}]}]},{"path":"/ko/docs/types/GridFocusHandoff","kind":"type","title":"GridFocusHandoff","summary":"GridFocusHandoff의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridFocusHandoff =\n  | 'cell'\n  | 'next-cell'\n  | 'previous-cell'\n  | 'grid-before'\n  | 'grid-after';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/ko/docs/types/GridFormulaErrorDetail","kind":"type","title":"GridFormulaErrorDetail","summary":"GridFormulaErrorDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFormulaErrorDetail {\n  rowIndex: number;\n  colIndex: number;\n  field: string;\n  formula: string;\n  type: string;\n  description: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/formulaError","title":"formulaError","description":"수식을 계산하지 못했을 때 발생합니다. 대상과 오류 정보를 사용자 검토 화면에 연결합니다."}]}]}]},{"path":"/ko/docs/types/GridFormulaEvaluatedDetail","kind":"type","title":"GridFormulaEvaluatedDetail","summary":"GridFormulaEvaluatedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridFormulaEvaluatedDetail {\n  rowIndex: number;\n  colIndex: number;\n  field: string;\n  formula: string;\n  value: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/formulaEvaluated","title":"formulaEvaluated","description":"수식 계산 결과가 나왔을 때 발생합니다. 원문 수식과 계산 결과를 구분해 읽습니다."}]}]}]},{"path":"/ko/docs/types/GridGetRowId","kind":"type","title":"GridGetRowId","summary":"GridGetRowId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridGetRowId<TData> = (data: Readonly<TData>) => GridRowId;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/GridGuiComponent","kind":"type","title":"GridGuiComponent","summary":"GridGuiComponent의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridGuiComponent<TParams, TGui> {\n  init?(params: TParams): GridMaybePromise<void>;\n  getGui(): TGui;\n  destroy?(): GridMaybePromise<void>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridHistoryChangedDetail","kind":"type","title":"GridHistoryChangedDetail","summary":"GridHistoryChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridHistoryChangedDetail {\n  kind: 'recorded' | 'undone' | 'redone' | 'cleared';\n  depth: { undo: number; redo: number };\n  label?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/historyChanged","title":"historyChanged","description":"실행 취소·다시 실행 이력이 바뀌었을 때 발생합니다. 버튼의 활성 여부와 현재 깊이를 갱신합니다."}]}]}]},{"path":"/ko/docs/types/GridLazyComponentContext","kind":"type","title":"GridLazyComponentContext","summary":"GridLazyComponentContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridLazyComponentContext {\n  readonly componentKind: GridComponentKind;\n  readonly componentName?: string;\n  readonly signal: AbortSignal;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentLazyDefinition","title":"GridComponentLazyDefinition","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""}]}]}]},{"path":"/ko/docs/types/GridLiveObjectEvent","kind":"type","title":"GridLiveObjectEvent","summary":"GridLiveObjectEvent의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridLiveObjectEvent<\n  TData = GridData,\n  TValue = unknown,\n> {\n  readonly mutationId: GridMutationId;\n  readonly kind: GridLiveObjectKind;\n  readonly type: GridLiveObjectEventType;\n  readonly id: string | GridRowId;\n  readonly source: GridEventSource;\n  readonly timestamp: number;\n  readonly field?: string;\n  readonly data?: Readonly<TData>;\n  readonly value?: TValue;\n  readonly before?: unknown;\n  readonly after?: unknown;\n  readonly reason?: GridRefInvalidationReason;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/gridObjectChanged","title":"gridObjectChanged","description":"현재 행·열 등 공개 객체의 상태가 바뀌었을 때 발생합니다. detail의 대상과 변경 내용을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/GridLiveObjectKind","title":"GridLiveObjectKind","description":""},{"path":"/ko/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridEventSource","title":"GridEventSource","description":""},{"path":"/ko/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""}]}]}]},{"path":"/ko/docs/types/GridLiveObjectEventType","kind":"type","title":"GridLiveObjectEventType","summary":"GridLiveObjectEventType의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridLiveObjectEventType =\n  | 'widthChanged'\n  | 'visibilityChanged'\n  | 'pinnedChanged'\n  | 'sortChanged'\n  | 'aggregationChanged'\n  | 'expandedChanged'\n  | 'selectionChanged'\n  | 'dataChanged'\n  | 'valueChanged'\n  | 'heightChanged'\n  | 'focused'\n  | 'editingStarted'\n  | 'invalidated';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]}]},{"path":"/ko/docs/types/GridLiveObjectKind","kind":"type","title":"GridLiveObjectKind","summary":"GridLiveObjectKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridLiveObjectKind = 'column' | 'columnGroup' | 'row';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridLiveObjectListener","kind":"type","title":"GridLiveObjectListener","summary":"GridLiveObjectListener의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridLiveObjectListener<TData = GridData, TValue = unknown> = (\n  event: GridLiveObjectEvent<TData, TValue>,\n) => void;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""}]}]}]},{"path":"/ko/docs/types/GridLiveRef","kind":"type","title":"GridLiveRef","summary":"GridLiveRef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridLiveRef<\n  TData = GridData,\n  TValue = unknown,\n> {\n  readonly id: string | GridRowId;\n  isValid(): boolean;\n  getInvalidationReason(): GridRefInvalidationReason | null;\n  addEventListener(\n    type: GridLiveObjectEventType | '*',\n    listener: GridLiveObjectListener<TData, TValue>,\n  ): () => void;\n  removeEventListener(\n    type: GridLiveObjectEventType | '*',\n    listener: GridLiveObjectListener<TData, TValue>,\n  ): void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridRefInvalidationReason","title":"GridRefInvalidationReason","description":""},{"path":"/ko/docs/types/GridLiveObjectEventType","title":"GridLiveObjectEventType","description":""},{"path":"/ko/docs/types/GridLiveObjectListener","title":"GridLiveObjectListener","description":""}]}]}]},{"path":"/ko/docs/types/GridLocale","kind":"type","title":"GridLocale","summary":"GridLocale의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridLocale = GridLocalePresetName | GridLocaleObject | null | undefined;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/locale","title":"locale","description":"한국어·영어·일본어 프리셋 또는 기본 메시지를 덮어쓸 객체입니다. 원본 데이터와 열 제목은 앱에서 번역합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocaleChangedDetail","title":"GridLocaleChangedDetail","description":""},{"path":"/ko/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocalePresetName","title":"GridLocalePresetName","description":""},{"path":"/ko/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""}]}]}]},{"path":"/ko/docs/types/GridLocaleChangedDetail","kind":"type","title":"GridLocaleChangedDetail","summary":"GridLocaleChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridLocaleChangedDetail {\n  locale: GridLocale;\n  resolvedMessages: Record<string, string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/localeChanged","title":"localeChanged","description":"Grid 언어 설정이 바뀌었을 때 발생합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""}]}]}]},{"path":"/ko/docs/types/GridLocaleObject","kind":"type","title":"GridLocaleObject","summary":"GridLocaleObject의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridLocaleObject {\n  extends?: GridLocale;\n  messages?: GridMessageOverrides;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/ko/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""}]}]}]},{"path":"/ko/docs/types/GridLocalePresetName","kind":"type","title":"GridLocalePresetName","summary":"GridLocalePresetName의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridLocalePresetName = 'en' | 'ko' | 'ja';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""}]}]}]},{"path":"/ko/docs/types/GridMaybePromise","kind":"type","title":"GridMaybePromise","summary":"GridMaybePromise의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridMaybePromise<T> = T | Promise<T>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""},{"path":"/ko/docs/types/GridComponentFactory","title":"GridComponentFactory","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/GridFloatingFilterInstance","title":"GridFloatingFilterInstance","description":""},{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]}]},{"path":"/ko/docs/types/GridMessageOverrides","kind":"type","title":"GridMessageOverrides","summary":"GridMessageOverrides의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridMessageOverrides = Partial<Record<MessageKey, string>>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLocaleObject","title":"GridLocaleObject","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/MessageKey","title":"MessageKey","description":""}]}]}]},{"path":"/ko/docs/types/GridMountedComponentLookup","kind":"type","title":"GridMountedComponentLookup","summary":"GridMountedComponentLookup의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridMountedComponentLookup<TInstance, TParams, TGui> =\n  | {\n      readonly status: 'mounted';\n      readonly key: string;\n      readonly generation: number;\n      readonly instance: TInstance;\n      readonly params: TParams;\n      readonly gui: TGui;\n    }\n  | {\n      readonly status: 'unmounted';\n      readonly key: string;\n    };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellEditorInstance","title":"getCellEditorInstance","description":"현재 마운트된 셀 편집기 인스턴스와 문맥을 읽습니다. 편집기가 없으면 null입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridMutationId","kind":"type","title":"GridMutationId","summary":"GridMutationId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridMutationId = `grid-mutation-${number}`;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/ko/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]}]},{"path":"/ko/docs/types/GridNoteCell","kind":"type","title":"GridNoteCell","summary":"GridNoteCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridNoteCell {\n  readonly rowId: string | number;\n  readonly colId: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]}]},{"path":"/ko/docs/types/GridNoteSaveResult","kind":"type","title":"GridNoteSaveResult","summary":"GridNoteSaveResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridNoteSaveResult =\n  | { readonly status: 'saved'; readonly note: GridCellNote | null }\n  | { readonly status: 'conflict'; readonly note: GridCellNote | null };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellNotesAdapter","title":"GridCellNotesAdapter","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellNote","title":"GridCellNote","description":""}]}]}]},{"path":"/ko/docs/types/GridPaginationChangedDetail","kind":"type","title":"GridPaginationChangedDetail","summary":"GridPaginationChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridPaginationChangedDetail {\n  pageIndex: number;\n  pageSize: number;\n  pageCount: number;\n  totalRows: number;\n  previous: ActivePagination;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/paginationChanged","title":"paginationChanged","description":"페이지 또는 페이지 크기가 바뀌었을 때 발생합니다. 외부 페이지 안내와 동기화합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActivePagination","title":"ActivePagination","description":""}]}]}]},{"path":"/ko/docs/types/GridPathValue","kind":"type","title":"GridPathValue","summary":"GridPathValue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridPathValue<TData, TPath extends string> =\n  TPath extends keyof TData\n    ? TData[TPath]\n    : TPath extends `${infer Head}.${infer Tail}`\n      ? Head extends keyof TData\n        ? GridPathValue<NonNullable<TData[Head]>, Tail>\n        : unknown\n      : unknown;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""}]}]}]},{"path":"/ko/docs/types/GridPresenceChangedDetail","kind":"type","title":"GridPresenceChangedDetail","summary":"GridPresenceChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridPresenceChangedDetail {\n  collaborators: ReadonlyArray<GridCollaboratorInfo>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/presenceChanged","title":"presenceChanged","description":"협업 참가자의 위치·참여 상태가 바뀌었을 때 발생합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""}]}]}]},{"path":"/ko/docs/types/GridQueryResult","kind":"type","title":"GridQueryResult","summary":"GridQueryResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridQueryResult {\n  totalRows: number;\n  visibleRows: GridRow[];\n  computeMs: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/queryComplete","title":"queryComplete","description":"처리 엔진의 조회가 완료되었을 때 발생합니다. 결과와 실제 실행 tier를 detail에서 읽어 성능·결과 안내에 연결합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""}]}]}]},{"path":"/ko/docs/types/GridQuickFilterChangedDetail","kind":"type","title":"GridQuickFilterChangedDetail","summary":"GridQuickFilterChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridQuickFilterChangedDetail {\n  value: string;\n  previous: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/quickFilterChanged","title":"quickFilterChanged","description":"빠른 검색 조건이 바뀌었을 때 발생합니다. 앱 외부 검색 입력과 값을 동기화할 수 있습니다."}]}]}]},{"path":"/ko/docs/types/GridRefInvalidationReason","kind":"type","title":"GridRefInvalidationReason","summary":"GridRefInvalidationReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRefInvalidationReason =\n  | 'removed'\n  | 'definitions-replaced'\n  | 'data-replaced'\n  | 'disconnected';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""}]}]}]},{"path":"/ko/docs/types/GridRemoteEditAppliedDetail","kind":"type","title":"GridRemoteEditAppliedDetail","summary":"GridRemoteEditAppliedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRemoteEditAppliedDetail<\n  TData = GridData,\n  TContext = unknown,\n> {\n  changes: ReadonlyArray<GridCellValueChangedDetail<TData, unknown, TContext>>;\n  origin?: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/remoteEditApplied","title":"remoteEditApplied","description":"협업 상대의 편집이 적용되었을 때 발생합니다. 이를 다시 로컬 편집으로 전송해 순환하지 않도록 출처를 구분합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridCellValueChangedDetail","title":"GridCellValueChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererCellIdentity","kind":"type","title":"GridRendererCellIdentity","summary":"GridRendererCellIdentity의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRendererCellIdentity {\n  readonly rowId: string | number;\n  readonly colId: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererDefinition","kind":"type","title":"GridRendererDefinition","summary":"GridRendererDefinition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRendererDefinition<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> = GridComponentDefinition<\n  GridRendererInstance<TRow, TValue, TContext>,\n  GridRendererParams<TRow, TValue, TContext>\n>;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/cellRenderer","title":"cellRenderer","description":"셀을 text·html·vnode 또는 등록된 사용자 렌더러로 표시합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/GridComponentDefinitionMap","title":"GridComponentDefinitionMap","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridComponentDefinition","title":"GridComponentDefinition","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererDiscovery","kind":"type","title":"GridRendererDiscovery","summary":"GridRendererDiscovery의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRendererDiscovery<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> =\n  | {\n      readonly status: 'mounted';\n      readonly key: string;\n      readonly identity: GridRendererCellIdentity;\n      readonly generation: number;\n      readonly host: GridRendererHost;\n      readonly instance: GridRendererInstance<TRow, TValue, TContext>;\n      readonly gui: GridRendererGui;\n      readonly params: GridRendererParams<TRow, TValue, TContext>;\n    }\n  | {\n      readonly status: 'logical-offscreen';\n      readonly key: string;\n      readonly identity: GridRendererCellIdentity;\n      readonly lastGeneration?: number;\n    }\n  | {\n      readonly status: 'unavailable';\n      readonly key: string;\n    }\n  | {\n      readonly status: 'stale';\n      readonly key: string;\n      readonly requestedGeneration: number;\n      readonly currentGeneration?: number;\n    };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererCellIdentity","title":"GridRendererCellIdentity","description":""},{"path":"/ko/docs/types/GridRendererHost","title":"GridRendererHost","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""},{"path":"/ko/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererGui","kind":"type","title":"GridRendererGui","summary":"GridRendererGui의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRendererGui = HTMLElement | CellRenderOutput;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRenderOutput","title":"CellRenderOutput","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererHost","kind":"type","title":"GridRendererHost","summary":"GridRendererHost의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRendererHost = Pick<\n  HTMLElement,\n  'innerHTML' | 'replaceChildren' | 'textContent'\n> & Partial<Pick<HTMLElement, 'firstChild' | 'childNodes'>>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererInstance","kind":"type","title":"GridRendererInstance","summary":"GridRendererInstance의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRendererInstance<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> extends GridGuiComponent<\n    GridRendererParams<TRow, TValue, TContext>,\n    GridRendererGui\n  > {\n  refresh?(\n    params: GridRendererParams<TRow, TValue, TContext>,\n  ): GridMaybePromise<boolean>;\n  focusIn?(): void;\n  focusOut?(): void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridGuiComponent","title":"GridGuiComponent","description":""},{"path":"/ko/docs/types/GridRendererParams","title":"GridRendererParams","description":""},{"path":"/ko/docs/types/GridRendererGui","title":"GridRendererGui","description":""},{"path":"/ko/docs/types/GridMaybePromise","title":"GridMaybePromise","description":""}]}]}]},{"path":"/ko/docs/types/GridRendererParams","kind":"type","title":"GridRendererParams","summary":"GridRendererParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRendererParams<\n  TRow = Record<string, unknown>,\n  TValue = unknown,\n  TContext = unknown,\n> extends CellRendererInput<TRow, TValue>,\n    GridComponentParams<TContext> {\n  readonly valueFormatted?: string;\n  readonly cellElement?: HTMLElement;\n  readonly setTooltip: (value: string | null) => void;\n  readonly handoffFocus: (target: GridFocusHandoff) => void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRendererDefinition","title":"GridRendererDefinition","description":""},{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/ko/docs/types/GridRendererInstance","title":"GridRendererInstance","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRendererInput","title":"CellRendererInput","description":""},{"path":"/ko/docs/types/GridComponentParams","title":"GridComponentParams","description":""},{"path":"/ko/docs/types/GridFocusHandoff","title":"GridFocusHandoff","description":""}]}]}]},{"path":"/ko/docs/types/GridRichSelectEditorOptions","kind":"type","title":"GridRichSelectEditorOptions","summary":"GridRichSelectEditorOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRichSelectEditorOptions<TValue = unknown> {\n  readonly values:\n    | ReadonlyArray<GridRichSelectOption<TValue>>\n    | GridAsyncValueLoader<GridRichSelectOption<TValue>>;\n  readonly placeholder?: string;\n  readonly loadingText?: string;\n  readonly emptyText?: string;\n  readonly errorText?: string;\n  readonly allowCommitWhileLoading?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellEditorDeclaration","title":"GridCellEditorDeclaration","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRichSelectOption","title":"GridRichSelectOption","description":""},{"path":"/ko/docs/types/GridAsyncValueLoader","title":"GridAsyncValueLoader","description":""}]}]}]},{"path":"/ko/docs/types/GridRichSelectOption","kind":"type","title":"GridRichSelectOption","summary":"GridRichSelectOption의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRichSelectOption<TValue = unknown> {\n  readonly value: TValue;\n  readonly label: string;\n  readonly disabled?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRichSelectEditorOptions","title":"GridRichSelectEditorOptions","description":""}]}]}]},{"path":"/ko/docs/types/GridRow","kind":"type","title":"GridRow","summary":"GridRow의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRow {\n  [key: string]: string | number | boolean | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."},{"path":"/ko/docs/options/viewportDatasource","title":"viewportDatasource","description":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."},{"path":"/ko/docs/options/contextMenuItemsCallback","title":"contextMenuItemsCallback","description":"셀 우클릭 메뉴 목록을 반환합니다. 설정하면 기본 메뉴에 추가되는 것이 아니라 전체 기본 목록을 대체합니다."},{"path":"/ko/docs/options/rows","title":"rows","description":"원본 행을 공급하는 호환 입력입니다. 새 구성에서는 rowData를 우선 사용하고 두 입력이 충돌하지 않게 합니다."},{"path":"/ko/docs/options/isFullWidthRow","title":"isFullWidthRow","description":"특정 행을 열별 셀이 아닌 전체 폭 행으로 표시할지 판단합니다."},{"path":"/ko/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."},{"path":"/ko/docs/options/fullWidthRowHeight","title":"fullWidthRowHeight","description":"전체 폭 행의 고정 높이 또는 행별 높이 계산 함수를 지정합니다."},{"path":"/ko/docs/options/pinnedTopRowData","title":"pinnedTopRowData","description":"스크롤과 별개로 표 위쪽에 고정할 행 데이터입니다."},{"path":"/ko/docs/options/pinnedBottomRowData","title":"pinnedBottomRowData","description":"스크롤과 별개로 표 아래쪽에 고정할 행 데이터입니다."},{"path":"/ko/docs/methods/diffSnapshots","title":"diffSnapshots","description":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."},{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."},{"path":"/ko/docs/methods/getDataAsCsv","title":"getDataAsCsv","description":"CSV 문자열과 출력 행·열 수가 담긴 객체를 반환합니다. 문자열은 결과의 csv 필드에서 읽습니다."},{"path":"/ko/docs/methods/exportDataAsCsv","title":"exportDataAsCsv","description":"현재 출력 조건으로 CSV를 다운로드하고 출력 결과를 반환합니다."},{"path":"/ko/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."},{"path":"/ko/docs/methods/setPinnedRows","title":"setPinnedRows","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."},{"path":"/ko/docs/methods/getPinnedRows","title":"getPinnedRows","description":"현재 고정 행 데이터를 보고서로 읽습니다."},{"path":"/ko/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"지정한 고정 행의 세부 정보를 읽습니다."},{"path":"/ko/docs/events/detailRowCreated","title":"detailRowCreated","description":"부모 행의 상세 패널이 생성되었을 때 발생합니다. 행 ID와 부모 데이터로 앱 자원을 연결할 수 있습니다."},{"path":"/ko/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/ko/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/GridRowClickedDetail","kind":"type","title":"GridRowClickedDetail","summary":"GridRowClickedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRowClickedDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  button: RowClickButton;\n  modifiers: RowClickModifiers;\n  doubleClick: boolean;\n  dragged: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowClicked","title":"rowClicked","description":"행을 클릭했을 때 발생합니다. 클릭 자체와 선택 결과는 구분합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/RowClickButton","title":"RowClickButton","description":""},{"path":"/ko/docs/types/RowClickModifiers","title":"RowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/GridRowDataChangedDetail","kind":"type","title":"GridRowDataChangedDetail","summary":"GridRowDataChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRowDataChangedDetail<TData = GridData> {\n  added: ReadonlyArray<{ row: TData; index: number }>;\n  updated: ReadonlyArray<{ row: TData; previous: TData; index: number }>;\n  removed: ReadonlyArray<{ row: TData; index: number }>;\n  rejected: ReadonlyArray<{ kind: 'add' | 'update' | 'remove'; row: unknown; reason: string }>;\n  txId: number;\n  source?: GridEditSource;\n  origin?: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowDataChanged","title":"rowDataChanged","description":"원본 행 데이터가 바뀌었을 때 발생합니다. 화면 정렬 순서 변경과는 다릅니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridEditSource","title":"GridEditSource","description":""}]}]}]},{"path":"/ko/docs/types/GridRowHoverChangedDetail","kind":"type","title":"GridRowHoverChangedDetail","summary":"GridRowHoverChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRowHoverChangedDetail {\n  hoveredRowId: string | number | null;\n  previousRowId: string | number | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowHoverChanged","title":"rowHoverChanged","description":"상태형 hover 행이 바뀌었을 때 발생합니다. CSS 전용 hover와 달리 앱에서 상태를 읽을 수 있습니다."}]}]}]},{"path":"/ko/docs/types/GridRowId","kind":"type","title":"GridRowId","summary":"GridRowId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridRowId = string | number;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/getRowId","title":"getRowId","description":"데이터에서 안정적이고 고유한 행 ID를 반환합니다. 정렬·필터·수정 후에도 같은 업무 행은 같은 ID여야 합니다."},{"path":"/ko/docs/methods/getRow","title":"getRow","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},{"path":"/ko/docs/methods/stageBatchCell","title":"stageBatchCell","description":"행 ID와 열 ID로 일괄 편집의 대기 값을 등록합니다. 즉시 최종 데이터 저장과는 다릅니다."},{"path":"/ko/docs/methods/startRowEdit","title":"startRowEdit","description":"지정한 행 ID의 전체 행 편집을 시작합니다."},{"path":"/ko/docs/methods/getCellRendererInstance","title":"getCellRendererInstance","description":"현재 마운트된 셀 렌더러 인스턴스를 조회합니다. 가상화로 화면 밖 셀은 마운트되지 않을 수 있습니다."},{"path":"/ko/docs/methods/destroyCellRendererInstance","title":"destroyCellRendererInstance","description":"지정한 마운트 셀 렌더러 인스턴스를 해제합니다."},{"path":"/ko/docs/methods/focusCellRendererInstance","title":"focusCellRendererInstance","description":"지정한 마운트 셀 렌더러 내부로 포커스를 이동하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/ko/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/ko/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridRowRef","kind":"type","title":"GridRowRef","summary":"GridRowRef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRowRef<\n  TData = GridData,\n  TContext = unknown,\n> extends GridLiveRef<TData> {\n  readonly id: GridRowId;\n  getSourceIndex(): number | null;\n  getDisplayIndex(): number | null;\n  getData(): Readonly<TData> | null;\n  getParent(): GridRowRef<TData, TContext> | null;\n  getChildren(): ReadonlyArray<GridRowRef<TData, TContext>>;\n  isGroup(): boolean;\n  isLeaf(): boolean;\n  isMaster(): boolean;\n  isDetail(): boolean;\n  getLevel(): number;\n  getRoute(): readonly string[];\n  isSelected(): boolean;\n  isExpanded(): boolean;\n  setSelected(selected: boolean): Promise<boolean>;\n  setExpanded(expanded: boolean): Promise<boolean>;\n  setData(data: TData): Promise<boolean>;\n  updateData(patch: Partial<TData>): Promise<boolean>;\n  setValue<TField extends GridFieldPath<TData>>(\n    field: TField,\n    value: GridPathValue<TData, TField>,\n  ): Promise<boolean>;\n  setHeight(height: number | null): Promise<boolean>;\n  focus(field?: GridFieldPath<TData>): Promise<boolean>;\n  startEditing(field: GridFieldPath<TData>): Promise<boolean>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getRow","title":"getRow","description":"안정적인 행 ID로 행 객체를 찾습니다. 화면 인덱스로 찾는 API와 구분합니다."},{"path":"/ko/docs/methods/getDisplayedRowAtIndex","title":"getDisplayedRowAtIndex","description":"현재 표시 순서의 인덱스로 행 객체를 찾습니다. 정렬·필터·그룹에 따라 같은 인덱스의 행은 달라질 수 있습니다."},{"path":"/ko/docs/methods/forEachRow","title":"forEachRow","description":"행 객체를 순회하며 콜백을 실행합니다. 현재 화면의 표시 순서가 필요하면 forEachDisplayedRow를 사용합니다."},{"path":"/ko/docs/methods/forEachDisplayedRow","title":"forEachDisplayedRow","description":"현재 표시 행을 순회합니다. 원본 데이터 순서와 표시 순서를 구분해야 하는 앱 기능에 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridLiveRef","title":"GridLiveRef","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/GridPathValue","title":"GridPathValue","description":""}]}]}]},{"path":"/ko/docs/types/GridRowTransaction","kind":"type","title":"GridRowTransaction","summary":"GridRowTransaction의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridRowTransaction<TData = GridData> {\n  add?: ReadonlyArray<TData>;\n  addIndex?: number;\n  update?: ReadonlyArray<Partial<TData>>;\n  remove?: ReadonlyArray<TData | Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/ko/docs/types/GridSelectionChangedDetail","kind":"type","title":"GridSelectionChangedDetail","summary":"GridSelectionChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridSelectionChangedDetail {\n  mode: RowSelectionMode;\n  selectedRowIds: ReadonlyArray<string | number>;\n  addedIds: ReadonlyArray<string | number>;\n  removedIds: ReadonlyArray<string | number>;\n  serverSide?: SyGridServerSelectionState;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/selectionChanged","title":"selectionChanged","description":"행 선택 결과가 바뀌었을 때 발생합니다. 선택 ID를 사용해 일괄 작업 대상을 구성합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RowSelectionMode","title":"RowSelectionMode","description":""},{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/GridSortChangedDetail","kind":"type","title":"GridSortChangedDetail","summary":"GridSortChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridSortChangedDetail {\n  field: string | null;\n  direction: 'asc' | 'desc' | null;\n  previous: ActiveSort | null;\n  sortModel: SortModelEntry[];\n  previousModel: SortModelEntry[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/sortChanged","title":"sortChanged","description":"정렬 기준이 바뀌었을 때 발생합니다. 현재 정렬 모델을 앱의 검색 조건이나 화면 저장에 반영합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveSort","title":"ActiveSort","description":""},{"path":"/ko/docs/types/SortModelEntry","title":"SortModelEntry","description":""}]}]}]},{"path":"/ko/docs/types/GridSortDirection","kind":"type","title":"GridSortDirection","summary":"GridSortDirection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridSortDirection = 'asc' | 'desc';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/sortBy","title":"sortBy","description":"한 열의 정렬을 지정합니다. 방향 생략은 정렬 순환, null은 해당 열 정렬 해제이며 전체 다중 모델은 setSortModel로 설정합니다."}]}]}]},{"path":"/ko/docs/types/GridStateApplyOptions","kind":"type","title":"GridStateApplyOptions","summary":"GridStateApplyOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridStateApplyOptions {\n  readonly applyOrder?: boolean;\n  readonly slices?: readonly SyGridStateSliceKey[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setState","title":"setState","description":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""}]}]}]},{"path":"/ko/docs/types/GridSyncStatus","kind":"type","title":"GridSyncStatus","summary":"GridSyncStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridSyncStatus = 'offline' | 'connecting' | 'synced';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/connectCollabRoom","title":"connectCollabRoom","description":"설정된 협업 방 연결을 시작하고 동기화 상태를 반환합니다."},{"path":"/ko/docs/methods/getSyncStatus","title":"getSyncStatus","description":"현재 협업 연결·동기화 상태를 읽습니다."},{"path":"/ko/docs/events/syncStatusChanged","title":"syncStatusChanged","description":"협업 동기화 상태가 바뀌었을 때 발생합니다. 연결 상태와 서버 영구 저장 완료를 구분해 안내합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridTheme","kind":"type","title":"GridTheme","summary":"GridTheme의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridTheme = GridThemePresetName | GridThemeObject | null | undefined;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/theme","title":"theme","description":"밝은·어두운 프리셋 또는 프리셋을 확장한 토큰 객체로 Grid의 색상과 표현을 설정합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridThemeChangedDetail","title":"GridThemeChangedDetail","description":""},{"path":"/ko/docs/types/GridThemeObject","title":"GridThemeObject","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridThemePresetName","title":"GridThemePresetName","description":""},{"path":"/ko/docs/types/GridThemeObject","title":"GridThemeObject","description":""}]}]}]},{"path":"/ko/docs/types/GridThemeChangedDetail","kind":"type","title":"GridThemeChangedDetail","summary":"GridThemeChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridThemeChangedDetail {\n  theme: GridTheme;\n  resolvedTokens: Record<string, string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/themeChanged","title":"themeChanged","description":"Grid 테마가 바뀌었을 때 발생합니다. 앱 바깥 영역의 테마와 함께 확인합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""}]}]}]},{"path":"/ko/docs/types/GridThemeObject","kind":"type","title":"GridThemeObject","summary":"GridThemeObject의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridThemeObject {\n  extends?: GridTheme;\n  tokens?: GridTokenOverrides;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/ko/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""}]}]}]},{"path":"/ko/docs/types/GridThemePresetName","kind":"type","title":"GridThemePresetName","summary":"GridThemePresetName의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridThemePresetName = 'alpine' | 'balham' | 'alpine-dark' | 'balham-dark';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""}]}]}]},{"path":"/ko/docs/types/GridTokenName","kind":"type","title":"GridTokenName","summary":"GridTokenName의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridTokenName = string;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTokenOverrides","title":"GridTokenOverrides","description":""}]}]}]},{"path":"/ko/docs/types/GridTokenOverrides","kind":"type","title":"GridTokenOverrides","summary":"GridTokenOverrides의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridTokenOverrides = Partial<Record<GridTokenName, string>>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridThemeObject","title":"GridThemeObject","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridTokenName","title":"GridTokenName","description":""}]}]}]},{"path":"/ko/docs/types/GridUnavailableBehaviour","kind":"type","title":"GridUnavailableBehaviour","summary":"GridUnavailableBehaviour의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridUnavailableBehaviour = 'fallback' | 'error';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/unavailable","title":"unavailable","description":"요청한 엔진을 사용할 수 없을 때 대체 경로로 실행할지 오류로 처리할지 정합니다."}]}]}]},{"path":"/ko/docs/types/GridWorkbookBinding","kind":"type","title":"GridWorkbookBinding","summary":"GridWorkbookBinding의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridWorkbookBinding {\n  readonly workbookId: string;\n  readonly workbookKey: number;\n  readonly sheetName: string;\n  readonly sheetId: number;\n  readonly registrationId: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getWorkbookBinding","title":"getWorkbookBinding","description":"현재 워크북과 시트의 연결 정보를 읽습니다. 연결되지 않았으면 null입니다."},{"path":"/ko/docs/methods/reconnectWorkbook","title":"reconnectWorkbook","description":"현재 워크북 설정으로 연결을 다시 구성하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/GridWorkbookBindingChangeKind","kind":"type","title":"GridWorkbookBindingChangeKind","summary":"GridWorkbookBindingChangeKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridWorkbookBindingChangeKind =\n  | 'connected'\n  | 'renamed'\n  | 'reconnected'\n  | 'disconnected';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","kind":"type","title":"GridWorkbookBindingChangedDetail","summary":"GridWorkbookBindingChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridWorkbookBindingChangedDetail {\n  readonly kind: GridWorkbookBindingChangeKind;\n  readonly reason: GridWorkbookBindingReason;\n  readonly binding: GridWorkbookBinding | null;\n  readonly previousBinding: GridWorkbookBinding | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/workbookBindingChanged","title":"workbookBindingChanged","description":"Grid의 워크북·시트 연결이 바뀌었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingChangeKind","title":"GridWorkbookBindingChangeKind","description":""},{"path":"/ko/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]}]},{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","kind":"type","title":"GridWorkbookBindingErrorDetail","summary":"GridWorkbookBindingErrorDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridWorkbookBindingErrorDetail {\n  readonly code: WorkbookRegistryErrorCode | 'unexpected';\n  readonly message: string;\n  readonly reason: GridWorkbookBindingReason;\n  readonly workbookId?: string;\n  readonly sheetName?: string;\n  readonly retainedBinding: GridWorkbookBinding | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/workbookBindingError","title":"workbookBindingError","description":"워크북 연결을 구성하지 못했을 때 발생합니다. 식별자와 연결 오류 정보를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/WorkbookRegistryErrorCode","title":"WorkbookRegistryErrorCode","description":""},{"path":"/ko/docs/types/GridWorkbookBindingReason","title":"GridWorkbookBindingReason","description":""},{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""}]}]}]},{"path":"/ko/docs/types/GridWorkbookBindingReason","kind":"type","title":"GridWorkbookBindingReason","summary":"GridWorkbookBindingReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type GridWorkbookBindingReason =\n  | 'initial'\n  | 'property-change'\n  | 'dom-disconnect'\n  | 'dom-reconnect'\n  | 'formulas-disabled'\n  | 'properties-cleared'\n  | 'method';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]}]},{"path":"/ko/docs/types/GridXlsxImportedDetail","kind":"type","title":"GridXlsxImportedDetail","summary":"GridXlsxImportedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GridXlsxImportedDetail {\n  sheetName: string;\n  snapshot: XlsxGridSnapshot;\n  workbookSheetCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/xlsxImported","title":"xlsxImported","description":"XLSX 파싱 후 선택한 시트의 Grid용 snapshot을 전달합니다. 필요하면 snapshot.columnDefs와 snapshot.rowData를 앱에서 적용합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/GroupableLeaf","kind":"type","title":"GroupableLeaf","summary":"GroupableLeaf의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface GroupableLeaf {\n  field?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnGroupDef","title":"ColumnGroupDef","description":""}]}]}]},{"path":"/ko/docs/types/InfiniteGetRowsParams","kind":"type","title":"InfiniteGetRowsParams","summary":"InfiniteGetRowsParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface InfiniteGetRowsParams {\n  startRow: number;\n  endRow: number;\n  sortModel?: ReadonlyArray<{ colId: string; sort: 'asc' | 'desc' }>;\n  filterModel?: Readonly<Record<string, unknown>>;\n  quickFilter?: string;\n  conditionModel?: unknown;\n  success: (rows: unknown[], lastRow?: number) => void;\n  fail: () => void;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/InfiniteRowDatasource","title":"InfiniteRowDatasource","description":""}]}]}]},{"path":"/ko/docs/types/InfiniteRowDatasource","kind":"type","title":"InfiniteRowDatasource","summary":"InfiniteRowDatasource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface InfiniteRowDatasource {\n  getRows: (params: InfiniteGetRowsParams) => void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/datasource","title":"datasource","description":"무한 스크롤 모델의 데이터 공급자입니다. 요청된 행 범위에 대해 성공 또는 실패 콜백을 완료해야 합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/InfiniteGetRowsParams","title":"InfiniteGetRowsParams","description":""}]}]}]},{"path":"/ko/docs/types/LoadingMode","kind":"type","title":"LoadingMode","summary":"LoadingMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type LoadingMode = 'auto' | 'manual' | 'off';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/loadingMode","title":"loadingMode","description":"Grid의 로딩 표시 방식을 선택합니다. 지원 값은 LoadingMode 타입에서 확인합니다."}]}]}]},{"path":"/ko/docs/types/MergedRangeInfo","kind":"type","title":"MergedRangeInfo","summary":"MergedRangeInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface MergedRangeInfo {\n  readonly rangeRef: string;\n  readonly range: CellRange;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/ko/docs/types/MessageKey","kind":"type","title":"MessageKey","summary":"MessageKey의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type MessageKey = string;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMessageOverrides","title":"GridMessageOverrides","description":""}]}]}]},{"path":"/ko/docs/types/MultiFilterPart","kind":"type","title":"MultiFilterPart","summary":"MultiFilterPart의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type MultiFilterPart = MultiFilterSpec['parts'][number];","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ConditionLeaf","title":"ConditionLeaf","description":""},{"path":"/ko/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/MultiFilterSpec","title":"MultiFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/MultiFilterSpec","kind":"type","title":"MultiFilterSpec","summary":"MultiFilterSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface MultiFilterSpec<TRow = unknown> {\n  field: string;\n  parts: ReadonlyArray<MultiFilterPart<TRow>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/ko/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/MultiFilterPart","title":"MultiFilterPart","description":""}]}]}]},{"path":"/ko/docs/types/NestedObject","kind":"type","title":"NestedObject","summary":"NestedObject의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type NestedObject<T> =\n  NonNullable<T> extends GridFieldLeaf ? never\n    : NonNullable<T> extends readonly unknown[] ? never\n      : NonNullable<T> extends object ? NonNullable<T>\n        : never;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldLeaf","title":"GridFieldLeaf","description":""}]}]}]},{"path":"/ko/docs/types/NumberFilterOp","kind":"type","title":"NumberFilterOp","summary":"NumberFilterOp의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type NumberFilterOp =\n  | 'equals'\n  | 'notEqual'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'between'\n  | 'notBetween';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/NumberFilterSpec","title":"NumberFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/NumberFilterSpec","kind":"type","title":"NumberFilterSpec","summary":"NumberFilterSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface NumberFilterSpec<TRow = unknown> {\n  field: string;\n  op: NumberFilterOp;\n  value: number | bigint | [number | bigint, number | bigint];\n  valueGetter?: (row: TRow) => unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/NumberFilterOp","title":"NumberFilterOp","description":""}]}]}]},{"path":"/ko/docs/types/PdfDownloadOptions","kind":"type","title":"PdfDownloadOptions","summary":"PdfDownloadOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PdfDownloadOptions<TRow = Record<string, unknown>> extends PdfExportOptions<TRow> {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportColumn","kind":"type","title":"PdfExportColumn","summary":"PdfExportColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PdfExportColumn {\n  field: string;\n  headerName?: string;\n  width?: number;\n  align?: 'left' | 'center' | 'right';\n  valueGetter?: ColumnDef['valueGetter'];\n  valueFormatter?: ColumnDef['valueFormatter'];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportFontBytes","kind":"type","title":"PdfExportFontBytes","summary":"PdfExportFontBytes의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PdfExportFontBytes = Uint8Array | ArrayBuffer | ArrayBufferView;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportOptions","kind":"type","title":"PdfExportOptions","summary":"PdfExportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PdfExportOptions<TRow = Record<string, unknown>> {\n  columns: ReadonlyArray<PdfExportColumn>;\n  rows: ReadonlyArray<TRow>;\n  pageSize?: PdfExportPageSize;\n  orientation?: PdfExportOrientation;\n  title?: string;\n  footer?: string;\n  pageNumbers?: boolean;\n  zebra?: boolean;\n  author?: string;\n  locale?: string;\n  fontBytes?: PdfExportFontBytes;\n  fontBaseName?: string;\n  blankForNullish?: boolean;\n  fit?: 'shrink' | 'orient' | 'none';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/ko/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportColumn","title":"PdfExportColumn","description":""},{"path":"/ko/docs/types/PdfExportPageSize","title":"PdfExportPageSize","description":""},{"path":"/ko/docs/types/PdfExportOrientation","title":"PdfExportOrientation","description":""},{"path":"/ko/docs/types/PdfExportFontBytes","title":"PdfExportFontBytes","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportOrientation","kind":"type","title":"PdfExportOrientation","summary":"PdfExportOrientation의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PdfExportOrientation = 'portrait' | 'landscape';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportPageSize","kind":"type","title":"PdfExportPageSize","summary":"PdfExportPageSize의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PdfExportPageSize = 'A4' | 'Letter' | 'Legal' | 'Tabloid';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/PdfExportResult","kind":"type","title":"PdfExportResult","summary":"PdfExportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PdfExportResult {\n  bytes: Uint8Array;\n  rowCount: number;\n  columnCount: number;\n  pageCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."},{"path":"/ko/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelAxis","kind":"type","title":"PivotPanelAxis","summary":"PivotPanelAxis의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PivotPanelAxis = 'rowGroupColumns' | 'pivotColumns' | 'valueColumns';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelChangeDetail","kind":"type","title":"PivotPanelChangeDetail","summary":"PivotPanelChangeDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PivotPanelChangeDetail extends PivotPanelConfig {\n  readonly type: 'pivot-panel-change';\n  readonly operation: PivotPanelChangeOperation;\n  readonly field: string;\n  readonly from: PivotPanelLocation;\n  readonly to: PivotPanelLocation;\n  readonly previousAggFunc: string | null;\n  readonly aggFunc: string | null;\n  readonly availableFields: readonly string[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/pivotPanelChanged","title":"pivotPanelChanged","description":"피벗 패널에서 축 구성이 바뀌었을 때 발생합니다. 변경된 축과 현재 피벗 상태를 확인합니다."},{"path":"/ko/docs/events/pivotChanged","title":"pivotChanged","description":"피벗 구성이 바뀌었음을 알립니다. 호환 이벤트와 패널 이벤트를 중복 구독해 같은 저장을 반복하지 마세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelConfig","title":"PivotPanelConfig","description":""},{"path":"/ko/docs/types/PivotPanelChangeOperation","title":"PivotPanelChangeOperation","description":""},{"path":"/ko/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelChangeOperation","kind":"type","title":"PivotPanelChangeOperation","summary":"PivotPanelChangeOperation의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PivotPanelChangeOperation = 'assign' | 'remove' | 'move' | 'reorder' | 'aggregation';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelConfig","kind":"type","title":"PivotPanelConfig","summary":"PivotPanelConfig의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PivotPanelConfig {\n  readonly rowGroupColumns: readonly string[];\n  readonly pivotColumns: readonly string[];\n  readonly pivotValueColumns: readonly string[];\n  readonly pivotAggFuncs: Readonly<Record<string, string>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelLane","kind":"type","title":"PivotPanelLane","summary":"PivotPanelLane의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type PivotPanelLane = 'availableFields' | PivotPanelAxis;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelLocation","title":"PivotPanelLocation","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelAxis","title":"PivotPanelAxis","description":""}]}]}]},{"path":"/ko/docs/types/PivotPanelLocation","kind":"type","title":"PivotPanelLocation","summary":"PivotPanelLocation의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface PivotPanelLocation {\n  readonly lane: PivotPanelLane;\n  readonly index: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PivotPanelLane","title":"PivotPanelLane","description":""}]}]}]},{"path":"/ko/docs/types/RbacCellReadParams","kind":"type","title":"RbacCellReadParams","summary":"RbacCellReadParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface RbacCellReadParams {\n  readonly rowIndex: number;\n  readonly field: string;\n  readonly colId: string;\n  readonly data: Record<string, unknown> | null;\n  readonly value: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanEditCellFn","title":"CanEditCellFn","description":""},{"path":"/ko/docs/types/CanReadCellFn","title":"CanReadCellFn","description":""}]}]}]},{"path":"/ko/docs/types/RowClickButton","kind":"type","title":"RowClickButton","summary":"RowClickButton의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type RowClickButton = 'left' | 'middle' | 'right' | 'other';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/ko/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/ko/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]}]},{"path":"/ko/docs/types/RowClickModifiers","kind":"type","title":"RowClickModifiers","summary":"RowClickModifiers의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface RowClickModifiers {\n  ctrl: boolean;\n  shift: boolean;\n  meta: boolean;\n  alt: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridCellClickedDetail","title":"GridCellClickedDetail","description":""},{"path":"/ko/docs/types/GridCellDoubleClickedDetail","title":"GridCellDoubleClickedDetail","description":""},{"path":"/ko/docs/types/GridRowClickedDetail","title":"GridRowClickedDetail","description":""}]}]}]},{"path":"/ko/docs/types/RowDataTransaction","kind":"type","title":"RowDataTransaction","summary":"RowDataTransaction의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface RowDataTransaction<TRow = Record<string, unknown>> {\n  add?: ReadonlyArray<TRow>;\n  addIndex?: number;\n  update?: ReadonlyArray<Partial<TRow>>;\n  remove?: ReadonlyArray<TRow | Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyTransaction","title":"applyTransaction","description":"안정적인 ID를 기준으로 원본 행을 추가·수정·삭제합니다. 결과를 확인하고 앱 서버 저장과 구분합니다."}]}]}]},{"path":"/ko/docs/types/RowSelectionMode","kind":"type","title":"RowSelectionMode","summary":"RowSelectionMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type RowSelectionMode = 'single' | 'multi' | 'none';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/rowSelection","title":"rowSelection","description":"행 선택을 사용하지 않을지, 단일 또는 복수로 선택할지 정합니다. 셀 범위 선택과 별개입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/RowsSlicesApplyResult","kind":"type","title":"RowsSlicesApplyResult","summary":"RowsSlicesApplyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface RowsSlicesApplyResult {\n  readonly collapsedGroupRoutes: readonly string[];\n  readonly pivotCollapsedGroupRoutes: readonly string[];\n  readonly collapsedTreeNodePaths: readonly string[];\n  readonly expandedDetailRowIds: readonly SyGridRowId[];\n  readonly selection: {\n    readonly mode: 'none' | 'single' | 'multi';\n    readonly ids: readonly SyGridRowId[];\n  };\n  readonly ranges: readonly CellRange[];\n  readonly report: {\n    readonly missingDetailRowIds: readonly SyGridRowId[];\n    readonly unverifiedDetailRowIds: readonly SyGridRowId[];\n    readonly missingSelectedRowIds: readonly SyGridRowId[];\n    readonly unverifiedSelectedRowIds: readonly SyGridRowId[];\n    readonly missingTreeNodePaths: readonly string[];\n    readonly unverifiedTreeNodePaths: readonly string[];\n    readonly deferredPivotRoutes: readonly string[];\n    readonly droppedRanges: readonly CellRange[];\n  };\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowId","title":"SyGridRowId","description":""},{"path":"/ko/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/ko/docs/types/ServerSideColumn","kind":"type","title":"ServerSideColumn","summary":"ServerSideColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ServerSideColumn {\n  readonly id?: string;\n  readonly colId?: string;\n  readonly field?: string;\n  readonly displayName?: string;\n  readonly aggFunc?: string;\n  readonly [key: string]: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""}]}]}]},{"path":"/ko/docs/types/ServerSideColumnRef","kind":"type","title":"ServerSideColumnRef","summary":"ServerSideColumnRef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ServerSideColumnRef = string | ServerSideColumn;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideColumn","title":"ServerSideColumn","description":""}]}]}]},{"path":"/ko/docs/types/ServerSideDatasource","kind":"type","title":"ServerSideDatasource","summary":"ServerSideDatasource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ServerSideDatasource<TRow> {\n  getRows(\n    params: ServerSideGetRowsParams,\n    onSuccess: (result: ServerSideGetRowsResult<TRow>) => void,\n    onFail: () => void,\n  ): void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/serverSideDatasource","title":"serverSideDatasource","description":"서버가 정렬·필터·그룹 등의 요청을 처리하는 행 모델의 데이터 공급자입니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideGetRowsParams","title":"ServerSideGetRowsParams","description":""},{"path":"/ko/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""}]}]}]},{"path":"/ko/docs/types/ServerSideGetRowsParams","kind":"type","title":"ServerSideGetRowsParams","summary":"ServerSideGetRowsParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ServerSideGetRowsParams {\n  groupKeys: readonly string[];\n  pivotMode?: boolean;\n  rowGroupCols: readonly ServerSideColumnRef[];\n  pivotCols?: readonly ServerSideColumnRef[];\n  startRow: number;\n  endRow: number;\n  sortModel?: ReadonlyArray<{ colId: string; sort: 'asc' | 'desc' }>;\n  filterModel?: Readonly<Record<string, unknown>>;\n  quickFilter?: string;\n  conditionModel?: unknown;\n  valueCols?: readonly ServerSideColumnRef[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideColumnRef","title":"ServerSideColumnRef","description":""}]}]}]},{"path":"/ko/docs/types/ServerSideGetRowsResult","kind":"type","title":"ServerSideGetRowsResult","summary":"ServerSideGetRowsResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ServerSideGetRowsResult<TRow> {\n  rows: TRow[];\n  rowCount?: number;\n  pivotResultFields?: readonly string[];\n  pivotResultColumns?: readonly ServerSidePivotResultColumn[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideDatasource","title":"ServerSideDatasource","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSidePivotResultColumn","title":"ServerSidePivotResultColumn","description":""}]}]}]},{"path":"/ko/docs/types/ServerSidePivotResultColumn","kind":"type","title":"ServerSidePivotResultColumn","summary":"ServerSidePivotResultColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ServerSidePivotResultColumn {\n  readonly colId?: string;\n  readonly field?: string;\n  readonly headerName?: string;\n  readonly children?: readonly ServerSidePivotResultColumn[];\n  readonly [key: string]: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ServerSideGetRowsResult","title":"ServerSideGetRowsResult","description":""}]}]}]},{"path":"/ko/docs/types/SetFilterSpec","kind":"type","title":"SetFilterSpec","summary":"SetFilterSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SetFilterSpec<TRow = unknown> {\n  field: string;\n  values: ReadonlyArray<string | null> | null;\n  caseSensitive?: boolean;\n  trim?: boolean;\n  valueGetter?: (row: TRow) => unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]}]},{"path":"/ko/docs/types/SheetToRowDataOptions","kind":"type","title":"SheetToRowDataOptions","summary":"SheetToRowDataOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SheetToRowDataOptions {\n  readonly firstRowAsHeader?: boolean;\n  readonly fieldFromHeader?: (header: string, columnIndex: number) => string;\n  readonly preserveFormulas?: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""}]}]}]},{"path":"/ko/docs/types/SideBarPanelId","kind":"type","title":"SideBarPanelId","summary":"SideBarPanelId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SideBarPanelId = 'columns' | 'filters';","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/toolPanelToggled","title":"toolPanelToggled","description":"열·필터 도구 패널의 열림 상태가 바뀌었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SnapshotDiff","kind":"type","title":"SnapshotDiff","summary":"SnapshotDiff의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SnapshotDiff<TRow = Record<string, unknown>> {\n  readonly added: TRow[];\n  readonly removed: TRow[];\n  readonly changed: SnapshotRowChange[];\n  readonly summary: { added: number; removed: number; changed: number };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/diffSnapshots","title":"diffSnapshots","description":"저장 시점 두 개 또는 저장 시점과 현재 데이터의 차이를 비교합니다. 두 번째 ID를 생략하면 현재 데이터와 비교합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""}]}]}]},{"path":"/ko/docs/types/SnapshotFieldChange","kind":"type","title":"SnapshotFieldChange","summary":"SnapshotFieldChange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SnapshotFieldChange {\n  readonly field: string;\n  readonly before: unknown;\n  readonly after: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotRowChange","title":"SnapshotRowChange","description":""}]}]}]},{"path":"/ko/docs/types/SnapshotMeta","kind":"type","title":"SnapshotMeta","summary":"SnapshotMeta의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SnapshotMeta {\n  readonly id: string;\n  readonly name: string;\n  readonly ts: number;\n  readonly rowCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/listSnapshots","title":"listSnapshots","description":"보관 중인 데이터 스냅샷의 메타데이터 목록을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SnapshotRowChange","kind":"type","title":"SnapshotRowChange","summary":"SnapshotRowChange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SnapshotRowChange {\n  readonly rowId: unknown;\n  readonly fields: SnapshotFieldChange[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SnapshotFieldChange","title":"SnapshotFieldChange","description":""}]}]}]},{"path":"/ko/docs/types/SortModelEntry","kind":"type","title":"SortModelEntry","summary":"SortModelEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SortModelEntry {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getSortModel","title":"getSortModel","description":"현재 정렬 열·방향·우선순위 목록을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSortChangedDetail","title":"GridSortChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/StateUpdateSource","kind":"type","title":"StateUpdateSource","summary":"StateUpdateSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type StateUpdateSource = 'interactive' | 'api' | 'restore' | 'initial-state';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]}]},{"path":"/ko/docs/types/StringKey","kind":"type","title":"StringKey","summary":"StringKey의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type StringKey<T> = Extract<keyof T, string>;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/GridFieldPathLevel2","title":"GridFieldPathLevel2","description":""}]}]}]},{"path":"/ko/docs/types/SyChartConcreteType","kind":"type","title":"SyChartConcreteType","summary":"SyChartConcreteType의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyChartConcreteType = \"line\" | \"area\" | \"column\" | \"bar\" | \"scatter\" | \"pie\" | \"gauge\" | \"radar\" | \"funnel\" | \"pyramid\" | \"pareto\" | \"lollipop\" | \"dumbbell\" | \"variwide\" | \"tornado\" | \"marimekko\" | \"dot-plot\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""},{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""},{"path":"/ko/docs/types/GridChartMenuEntry","title":"GridChartMenuEntry","description":""},{"path":"/ko/docs/types/GridChartModel","title":"GridChartModel","description":""},{"path":"/ko/docs/types/GridChartTypeVerdict","title":"GridChartTypeVerdict","description":""}]}]}]},{"path":"/ko/docs/types/SyGridActiveCell","kind":"type","title":"SyGridActiveCell","summary":"SyGridActiveCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridActiveCell {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridActiveCellChangedEventDetail","kind":"type","title":"SyGridActiveCellChangedEventDetail","summary":"SyGridActiveCellChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridActiveCellChangedEventDetail {\n  active: SyGridActiveCell | null;\n  previous: SyGridActiveCell | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridActiveCell","title":"SyGridActiveCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedColumnState","kind":"type","title":"SyGridAlignedColumnState","summary":"SyGridAlignedColumnState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridAlignedColumnState {\n  readonly colId: string;\n  readonly width: number;\n  readonly visible: boolean;\n  readonly pinned: SyGridAlignedPinSide;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedPinSide","title":"SyGridAlignedPinSide","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedGridsInput","kind":"type","title":"SyGridAlignedGridsInput","summary":"SyGridAlignedGridsInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridAlignedGridsInput =\n  | { readonly group: string }\n  | ReadonlyArray<HTMLElement>\n  | null;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/alignedGrids","title":"alignedGrids","description":"열 배치 등을 함께 맞출 Grid 연결을 지정합니다. 연결 결과와 순환 제한은 정렬된 Grid 보고서에서 확인합니다."},{"path":"/ko/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedGridsRefusalReason","kind":"type","title":"SyGridAlignedGridsRefusalReason","summary":"SyGridAlignedGridsRefusalReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridAlignedGridsRefusalReason =\n  | 'invalid-input'\n  | 'empty-group-name'\n  | 'no-peers'\n  | 'not-a-grid'\n  | 'peer-refused';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedGridsReport","kind":"type","title":"SyGridAlignedGridsReport","summary":"SyGridAlignedGridsReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridAlignedGridsReport {\n  readonly configured: boolean;\n  readonly group: string | null;\n  readonly memberId: string;\n  readonly members: ReadonlyArray<string>;\n  readonly generation: number;\n  readonly alignedColumns: ReadonlyArray<string>;\n  readonly canonical: { readonly columns: ReadonlyArray<SyGridAlignedColumnState>; readonly scrollLeft: number } | null;\n  readonly mismatches: ReadonlyArray<SyGridAlignedMismatch>;\n  readonly stats: SyGridAlignedStats | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getAlignedGrids","title":"getAlignedGrids","description":"현재 연결된 Grid와 정렬 연결 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""},{"path":"/ko/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""},{"path":"/ko/docs/types/SyGridAlignedStats","title":"SyGridAlignedStats","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedGridsResult","kind":"type","title":"SyGridAlignedGridsResult","summary":"SyGridAlignedGridsResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridAlignedGridsResult {\n  readonly status: 'joined' | 'left' | 'unchanged' | 'refused';\n  readonly group: string | null;\n  readonly reason: SyGridAlignedGridsRefusalReason | null;\n  readonly detail: string | null;\n  readonly seeded: boolean;\n  readonly members: ReadonlyArray<string>;\n  readonly mismatches: ReadonlyArray<SyGridAlignedMismatch>;\n  readonly peersConfigured: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setAlignedGrids","title":"setAlignedGrids","description":"Grid 간 열 정렬 연결을 설정하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsRefusalReason","title":"SyGridAlignedGridsRefusalReason","description":""},{"path":"/ko/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedMismatch","kind":"type","title":"SyGridAlignedMismatch","summary":"SyGridAlignedMismatch의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridAlignedMismatch {\n  readonly reason: SyGridAlignedMismatchReason;\n  readonly memberId: string;\n  readonly colId: string | null;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedMismatchReason","title":"SyGridAlignedMismatchReason","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedMismatchReason","kind":"type","title":"SyGridAlignedMismatchReason","summary":"SyGridAlignedMismatchReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridAlignedMismatchReason =\n  | 'absent-locally'\n  | 'extra-locally'\n  | 'disjoint'\n  | 'duplicate-column'\n  | 'unknown-column';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedMismatch","title":"SyGridAlignedMismatch","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedPinSide","kind":"type","title":"SyGridAlignedPinSide","summary":"SyGridAlignedPinSide의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridAlignedPinSide = 'left' | 'right' | null;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedColumnState","title":"SyGridAlignedColumnState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridAlignedStats","kind":"type","title":"SyGridAlignedStats","summary":"SyGridAlignedStats의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridAlignedStats {\n  readonly accepted: number;\n  readonly echoes: number;\n  readonly noOps: number;\n  readonly refused: number;\n  readonly publishes: number;\n  readonly queued: number;\n  readonly maxDrainDepth: number;\n  readonly drainOverflows: number;\n  readonly applyThrew: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridApi","kind":"type","title":"SyGridApi","summary":"SyGridApi의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridApi<\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n  TFilterModel = unknown,\n> extends HTMLElement,\n    SyGridImperativeMethods<TData, TContext, TValue, TFilterModel> {\n  rowData?: TData[];\n  columnDefs?: Array<GridColumnDefinition<TData, TContext, TValue>>;\n  context?: TContext;\n  getRowId?: GridGetRowId<TData>;\n  components?: GridComponentLocalDefinitions<\n    TData,\n    TValue,\n    TFilterModel,\n    TContext\n  >;\n  externalFilter?:\n    | GridExternalFilterCallbacks<TData>\n    | GridExternalFilterInstance<TData, TContext>;\n  componentTimeoutMs?: number;\n  addEventListener<K extends keyof SyGridEventMap<TData, TContext, TValue>>(\n    type: K,\n    listener:\n      | SyGridEventListener<\n          SyGridEventMap<TData, TContext, TValue>[K],\n          TData,\n          TContext,\n          TValue\n        >\n      | null,\n    options?: boolean | AddEventListenerOptions,\n  ): void;\n  addEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject | null,\n    options?: boolean | AddEventListenerOptions,\n  ): void;\n  removeEventListener<K extends keyof SyGridEventMap<TData, TContext, TValue>>(\n    type: K,\n    listener:\n      | SyGridEventListener<\n          SyGridEventMap<TData, TContext, TValue>[K],\n          TData,\n          TContext,\n          TValue\n        >\n      | null,\n    options?: boolean | EventListenerOptions,\n  ): void;\n  removeEventListener(\n    type: string,\n    listener: EventListenerOrEventListenerObject | null,\n    options?: boolean | EventListenerOptions,\n  ): void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getApi","title":"getApi","description":"현재 Grid의 타입 지정 API와 앱 context에 접근합니다. 초기화가 완료된 요소에서 읽으세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellCallbackParams","title":"CellCallbackParams","description":""},{"path":"/ko/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""},{"path":"/ko/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/ValueFormatterParams","title":"ValueFormatterParams","description":""},{"path":"/ko/docs/types/ValueGetterParams","title":"ValueGetterParams","description":""},{"path":"/ko/docs/types/ValueParserParams","title":"ValueParserParams","description":""},{"path":"/ko/docs/types/ValueSetterParams","title":"ValueSetterParams","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/GridColumnDefinition","title":"GridColumnDefinition","description":""},{"path":"/ko/docs/types/GridGetRowId","title":"GridGetRowId","description":""},{"path":"/ko/docs/types/GridComponentLocalDefinitions","title":"GridComponentLocalDefinitions","description":""},{"path":"/ko/docs/types/GridExternalFilterCallbacks","title":"GridExternalFilterCallbacks","description":""},{"path":"/ko/docs/types/GridExternalFilterInstance","title":"GridExternalFilterInstance","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""}]}]}]},{"path":"/ko/docs/types/SyGridApiPdfAutoFontOptions","kind":"type","title":"SyGridApiPdfAutoFontOptions","summary":"SyGridApiPdfAutoFontOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridApiPdfAutoFontOptions {\n  autoFont?: boolean;\n  fallbackFontUrl?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","kind":"type","title":"SyGridApiPdfDownloadOptions","summary":"SyGridApiPdfDownloadOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridApiPdfDownloadOptions<TData = GridData> =\n  Omit<PdfDownloadOptions<TData>, 'columns' | 'rows'> & SyGridApiPdfAutoFontOptions;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","kind":"type","title":"SyGridApiPdfExportOptions","summary":"SyGridApiPdfExportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridApiPdfExportOptions<TData = GridData> =\n  Omit<PdfExportOptions<TData>, 'columns' | 'rows'> & SyGridApiPdfAutoFontOptions;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfAutoFontOptions","title":"SyGridApiPdfAutoFontOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridApplyColumnStateOptions","kind":"type","title":"SyGridApplyColumnStateOptions","summary":"SyGridApplyColumnStateOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridApplyColumnStateOptions {\n  applyOrder?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridBatchCommitOptions","kind":"type","title":"SyGridBatchCommitOptions","summary":"SyGridBatchCommitOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridBatchCommitOptions {\n  atomicity?: 'atomic' | 'best-effort';\n  partialInvalid?: 'reject-all' | 'commit-valid';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridBatchCommitReport","kind":"type","title":"SyGridBatchCommitReport","summary":"SyGridBatchCommitReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridBatchCommitReport {\n  status: 'committed' | 'rejected' | 'cancelled' | 'none';\n  mutationId: GridMutationId | null;\n  writtenCount: number;\n  rejectedCells: ReadonlyArray<SyGridEditRejectedCell>;\n  transactionRejectedRowIds: ReadonlyArray<GridRowId>;\n  sessionOpen: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/commitBatchEdit","title":"commitBatchEdit","description":"대기 변경을 검증·확정하고 셀별 처리 결과를 보고합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","kind":"type","title":"SyGridBatchEditEndEventDetail","summary":"SyGridBatchEditEndEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridBatchEditEndEventDetail {\n  mutationId: GridMutationId;\n  status: 'committed' | 'rejected' | 'cancelled';\n  writtenCount: number;\n  rejectedCells: ReadonlyArray<SyGridEditRejectedCell>;\n  reason?: 'escape' | 'api' | 'disconnect';\n  droppedCount?: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/batchEditEnd","title":"batchEditEnd","description":"일괄 편집이 확정되거나 취소되었을 때 발생합니다. 종료 이유와 처리 결과를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridBatchEditStartEventDetail","kind":"type","title":"SyGridBatchEditStartEventDetail","summary":"SyGridBatchEditStartEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridBatchEditStartEventDetail {\n  mutationId: GridMutationId;\n  sessionId: number;\n  stagedCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/batchEditStart","title":"batchEditStart","description":"일괄 편집이 시작되었을 때 발생합니다. 대기 변경 UI를 열 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridBatchStartOptions","kind":"type","title":"SyGridBatchStartOptions","summary":"SyGridBatchStartOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridBatchStartOptions {\n  reentrant?: 'reject' | 'join';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/startBatchEdit","title":"startBatchEdit","description":"여러 셀의 변경을 모아 확정하는 일괄 편집을 시작합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCanonicalChange","kind":"type","title":"SyGridCanonicalChange","summary":"SyGridCanonicalChange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridCanonicalChange = CanonicalRangeChange;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalRangeChange","title":"CanonicalRangeChange","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCanonicalRange","kind":"type","title":"SyGridCanonicalRange","summary":"SyGridCanonicalRange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridCanonicalRange = CanonicalRange;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCanonicalRanges","title":"getCanonicalRanges","description":"현재 선택 범위를 안정적인 행·열 식별자를 포함하는 정규 범위로 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CanonicalRange","title":"CanonicalRange","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellClickedEventDetail","kind":"type","title":"SyGridCellClickedEventDetail","summary":"SyGridCellClickedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellClickedEventDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: GridFieldPath<TData>;\n  button?: SyGridRowClickButton;\n  modifiers?: SyGridRowClickModifiers;\n  doubleClick?: boolean;\n  dragged?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/ko/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","kind":"type","title":"SyGridCellDoubleClickedEventDetail","summary":"SyGridCellDoubleClickedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellDoubleClickedEventDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: GridFieldPath<TData>;\n  button: SyGridRowClickButton;\n  modifiers: SyGridRowClickModifiers;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/ko/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellEditingCancelledEventDetail","kind":"type","title":"SyGridCellEditingCancelledEventDetail","summary":"SyGridCellEditingCancelledEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellEditingCancelledEventDetail {\n  rowIndex: number;\n  colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellEditingCommittedEventDetail","kind":"type","title":"SyGridCellEditingCommittedEventDetail","summary":"SyGridCellEditingCommittedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellEditingCommittedEventDetail<TValue = unknown> {\n  rowIndex: number;\n  colIndex: number;\n  originalValue: TValue;\n  draftValue: TValue;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellEditingRequestedEventDetail","kind":"type","title":"SyGridCellEditingRequestedEventDetail","summary":"SyGridCellEditingRequestedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellEditingRequestedEventDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  colIndex: number;\n  field: GridFieldPath<TData>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellRangeInput","kind":"type","title":"SyGridCellRangeInput","summary":"SyGridCellRangeInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridCellRangeInput = CellRange;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setCanonicalRanges","title":"setCanonicalRanges","description":"정규 범위 입력으로 셀 선택을 바꾸고 변경 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRange","title":"CellRange","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellSpanInfo","kind":"type","title":"SyGridCellSpanInfo","summary":"SyGridCellSpanInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellSpanInfo {\n  readonly status: SyGridRowLayoutStatus;\n  readonly rowIndex: number;\n  readonly colIndex: number;\n  readonly colId: string;\n  readonly origin: SyGridSpanAddress;\n  readonly rowSpan: number;\n  readonly colSpan: number;\n  readonly combination: SyGridSpanCombination;\n  readonly covered: boolean;\n  readonly container: 'left' | 'middle' | 'right';\n  readonly rect: { readonly heightPx: number | null; readonly widthPx: number | null };\n  readonly rejected: {\n    readonly row: ReadonlyArray<SyGridRowSpanRejection>;\n    readonly column: ReadonlyArray<SyGridColSpanRejection>;\n  };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getCellSpan","title":"getCellSpan","description":"특정 셀의 가로·세로 병합 정보를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/ko/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""},{"path":"/ko/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/ko/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""},{"path":"/ko/docs/types/SyGridColSpanRejection","title":"SyGridColSpanRejection","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellTooltipTarget","kind":"type","title":"SyGridCellTooltipTarget","summary":"SyGridCellTooltipTarget의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellTooltipTarget<TData = GridData> {\n  rowIndex: number;\n  field: GridFieldPath<TData>;\n  displayedText?: string;\n  isOverflowing?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","kind":"type","title":"SyGridCellValueChangedEventDetail","summary":"SyGridCellValueChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCellValueChangedEventDetail<\n  TData = GridData,\n  TValue = unknown,\n  TContext = unknown,\n> {\n  rowIndex: number;\n  colIndex: number;\n  field: GridFieldPath<TData>;\n  rowId: GridRowId;\n  oldValue: TValue;\n  newValue: TValue;\n  data: Readonly<TData>;\n  context: TContext | undefined;\n  source: SyGridEditSource;\n  origin?: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartAccessibleReport","kind":"type","title":"SyGridChartAccessibleReport","summary":"SyGridChartAccessibleReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartAccessibleReport = ChartLinkAccessibleReport;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartAccessibleSummary","title":"getChartAccessibleSummary","description":"차트가 제공하는 데이터 요약과 접근성 검사 정보를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkAccessibleReport","title":"ChartLinkAccessibleReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartCaptureResult","kind":"type","title":"SyGridChartCaptureResult","summary":"SyGridChartCaptureResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartCaptureResult = GridChartModelCaptureResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartModels","title":"getChartModels","description":"살아 있는 차트들을 버전 포함 envelope와 캡처 문제 목록으로 읽습니다. 복원에는 결과의 envelope를 전달합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelCaptureResult","title":"GridChartModelCaptureResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartCreateParams","kind":"type","title":"SyGridChartCreateParams","summary":"SyGridChartCreateParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartCreateParams = ChartLinkCreateParams;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/createRangeChart","title":"createRangeChart","description":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkCreateParams","title":"ChartLinkCreateParams","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartCreateResult","kind":"type","title":"SyGridChartCreateResult","summary":"SyGridChartCreateResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartCreateResult = ChartLinkCreateResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/createRangeChart","title":"createRangeChart","description":"선택 범위 또는 명시적 소스로 연결 차트를 생성합니다. 성공 시 chartId, 실패 시 거절 이유를 확인합니다."},{"path":"/ko/docs/methods/activateChartToolPanelItem","title":"activateChartToolPanelItem","description":"차트 도구 패널에서 현재 포커스된 항목을 실행해 차트를 생성합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkCreateResult","title":"ChartLinkCreateResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartCrossFilterAction","kind":"type","title":"SyGridChartCrossFilterAction","summary":"SyGridChartCrossFilterAction의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartCrossFilterAction = GridChartCrossFilterAction;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterAction","title":"GridChartCrossFilterAction","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartCrossFilterResult","kind":"type","title":"SyGridChartCrossFilterResult","summary":"SyGridChartCrossFilterResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartCrossFilterResult = GridChartCrossFilterResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyChartCrossFilter","title":"applyChartCrossFilter","description":"차트의 선택 동작을 Grid 필터 모델에 반영합니다."},{"path":"/ko/docs/methods/resetChartCrossFilter","title":"resetChartCrossFilter","description":"차트가 소유한 교차 필터를 해제합니다. 앱의 외부 필터는 그대로 유지합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartCrossFilterResult","title":"GridChartCrossFilterResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartDestroyResult","kind":"type","title":"SyGridChartDestroyResult","summary":"SyGridChartDestroyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartDestroyResult = ChartLinkDestroyResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/destroyChart","title":"destroyChart","description":"지정한 차트를 닫고 차트가 사용하는 자원을 해제합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkDestroyResult","title":"ChartLinkDestroyResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartEvent","kind":"type","title":"SyGridChartEvent","summary":"SyGridChartEvent의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartEvent = GridChartEvent;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/chartCreated","title":"chartCreated","description":"Grid 연결 차트가 생성되었을 때 발생합니다. 차트 식별자로 앱의 차트 목록을 관리합니다."},{"path":"/ko/docs/events/chartRangeChanged","title":"chartRangeChanged","description":"연결 차트의 소스 범위가 바뀌었을 때 발생합니다."},{"path":"/ko/docs/events/chartOptionsChanged","title":"chartOptionsChanged","description":"연결 차트의 설정이 바뀌었을 때 발생합니다. 저장한 차트 모델을 갱신할 수 있습니다."},{"path":"/ko/docs/events/chartDestroyed","title":"chartDestroyed","description":"연결 차트가 해제되었을 때 발생합니다. 앱에서 유지하던 참조와 외부 자원을 정리합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartEvent","title":"GridChartEvent","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartExportRequest","kind":"type","title":"SyGridChartExportRequest","summary":"SyGridChartExportRequest의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartExportRequest = GridChartExportRequest;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/exportChartImage","title":"exportChartImage","description":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartExportRequest","title":"GridChartExportRequest","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartExportResult","kind":"type","title":"SyGridChartExportResult","summary":"SyGridChartExportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartExportResult = ChartLinkExportResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/exportChartImage","title":"exportChartImage","description":"지정한 연결 차트의 이미지 출력을 요청하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkExportResult","title":"ChartLinkExportResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartFleetReport","kind":"type","title":"SyGridChartFleetReport","summary":"SyGridChartFleetReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartFleetReport = ChartLinkFleetReport;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartFleetReport","title":"getChartFleetReport","description":"현재 차트 집합과 열린 자원·정리 상태를 보고합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkFleetReport","title":"ChartLinkFleetReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartMenuReport","kind":"type","title":"SyGridChartMenuReport","summary":"SyGridChartMenuReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartMenuReport = ChartLinkMenuReport;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkMenuReport","title":"ChartLinkMenuReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartPanelReport","kind":"type","title":"SyGridChartPanelReport","summary":"SyGridChartPanelReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartPanelReport = ChartLinkPanelReport;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."},{"path":"/ko/docs/methods/closeChartToolPanel","title":"closeChartToolPanel","description":"차트 생성 도구 패널을 닫고 관련 선택 흐름을 정리합니다."},{"path":"/ko/docs/methods/getChartToolPanelReport","title":"getChartToolPanelReport","description":"차트 도구 패널의 열림·포커스·접근성 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkPanelReport","title":"ChartLinkPanelReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartPermissions","kind":"type","title":"SyGridChartPermissions","summary":"SyGridChartPermissions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartPermissions = GridChartMenuPermissions;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartMenuModel","title":"getChartMenuModel","description":"현재 선택과 권한으로 만들 수 있는 차트 메뉴 모델을 읽습니다."},{"path":"/ko/docs/methods/openChartToolPanel","title":"openChartToolPanel","description":"사용 가능한 차트를 고르는 실제 도구 패널을 엽니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartMenuPermissions","title":"GridChartMenuPermissions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartProperties","kind":"type","title":"SyGridChartProperties","summary":"SyGridChartProperties의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartProperties = GridChartProperties;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartProperties","title":"GridChartProperties","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartReport","kind":"type","title":"SyGridChartReport","summary":"SyGridChartReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartReport = ChartLinkChartReport;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getChartRefs","title":"getChartRefs","description":"현재 살아 있는 연결 차트의 식별자와 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkChartReport","title":"ChartLinkChartReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartRestoreResult","kind":"type","title":"SyGridChartRestoreResult","summary":"SyGridChartRestoreResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridChartRestoreResult {\n  readonly report: GridChartModelRestoreReport;\n  readonly created: readonly SyGridChartReport[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/restoreChartModels","title":"restoreChartModels","description":"저장한 차트 envelope를 현재 Grid의 데이터 계약에 맞춰 복원하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartModelRestoreReport","title":"GridChartModelRestoreReport","description":""},{"path":"/ko/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartSourceInput","kind":"type","title":"SyGridChartSourceInput","summary":"SyGridChartSourceInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartSourceInput = ChartLinkSourceInput;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkSourceInput","title":"ChartLinkSourceInput","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartSyncMutation","kind":"type","title":"SyGridChartSyncMutation","summary":"SyGridChartSyncMutation의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartSyncMutation = GridChartSyncMutation;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/syncCharts","title":"syncCharts","description":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridChartSyncMutation","title":"GridChartSyncMutation","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartSyncReport","kind":"type","title":"SyGridChartSyncReport","summary":"SyGridChartSyncReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridChartSyncReport {\n  readonly mutation: SyGridChartSyncMutation;\n  readonly emitted: number;\n  readonly suppressed: number;\n  readonly stale: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/syncCharts","title":"syncCharts","description":"현재 Grid 뷰를 기준으로 연결 차트의 데이터 투영을 다시 계산합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartUpdatePatch","kind":"type","title":"SyGridChartUpdatePatch","summary":"SyGridChartUpdatePatch의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridChartUpdatePatch {\n  readonly chartType?: string;\n  readonly source?: SyGridChartSourceInput;\n  readonly properties?: Partial<SyGridChartProperties>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/updateChart","title":"updateChart","description":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridChartSourceInput","title":"SyGridChartSourceInput","description":""},{"path":"/ko/docs/types/SyGridChartProperties","title":"SyGridChartProperties","description":""}]}]}]},{"path":"/ko/docs/types/SyGridChartUpdateResult","kind":"type","title":"SyGridChartUpdateResult","summary":"SyGridChartUpdateResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridChartUpdateResult = ChartLinkUpdateResult;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/updateChart","title":"updateChart","description":"생성된 차트의 종류·소스 범위·속성을 바꾸고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ChartLinkUpdateResult","title":"ChartLinkUpdateResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridClipboardPastedEventDetail","kind":"type","title":"SyGridClipboardPastedEventDetail","summary":"SyGridClipboardPastedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type SyGridClipboardPastedEventDetail<\n  TData,\n  TValue,\n  TContext,\n> = {\n  applied: number;\n  skipped: number;\n  top: number;\n  left: number;\n  changes: Array<SyGridCellValueChangedEventDetail<TData, TValue, TContext>>;\n};","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColSpanParams","kind":"type","title":"SyGridColSpanParams","summary":"SyGridColSpanParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColSpanParams<TData = GridData> {\n  readonly row: TData;\n  readonly rowIndex: number;\n  readonly column: ColumnDef<TData>;\n  readonly colIndex: number;\n  readonly container: 'left' | 'middle' | 'right';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/colSpan","title":"colSpan","description":"셀 문맥에서 가로로 차지할 열 수를 반환합니다. 고정 영역과 숨긴 열의 경계를 고려합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColSpanRejection","kind":"type","title":"SyGridColSpanRejection","summary":"SyGridColSpanRejection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColSpanRejection {\n  readonly reason:\n    | 'invalid-span'\n    | 'callback-threw'\n    | 'non-deterministic'\n    | 'clamped-to-container'\n    | 'clamped-to-boundary'\n    | 'clamped-to-end';\n  readonly colIndex: number;\n  readonly requested: number | null;\n  readonly applied: number;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCollabConnectOptions","kind":"type","title":"SyGridCollabConnectOptions","summary":"SyGridCollabConnectOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCollabConnectOptions {\n  realtimeUrl?: string;\n  userName?: string;\n  userColor?: string;\n  presence?: boolean;\n  persistence?: 'none' | 'indexeddb';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColumnReorderedEventDetail","kind":"type","title":"SyGridColumnReorderedEventDetail","summary":"SyGridColumnReorderedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColumnReorderedEventDetail {\n  colId: string;\n  originIndex: number;\n  finalIndex: number;\n  orderBefore: ReadonlyArray<string>;\n  orderAfter: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColumnResizedEventDetail","kind":"type","title":"SyGridColumnResizedEventDetail","summary":"SyGridColumnResizedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColumnResizedEventDetail {\n  colId: string;\n  oldWidth: number;\n  newWidth: number;\n  wasClamped: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColumnState","kind":"type","title":"SyGridColumnState","summary":"SyGridColumnState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColumnState {\n  field: string;\n  width: number | null;\n  order: number | null;\n  hidden: boolean;\n  sortDirection: 'asc' | 'desc' | null;\n  isSorted: boolean;\n  sortIndex?: number | null;\n  pinned?: 'left' | 'right' | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridColumnVisibilityChangedEventDetail","kind":"type","title":"SyGridColumnVisibilityChangedEventDetail","summary":"SyGridColumnVisibilityChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridColumnVisibilityChangedEventDetail {\n  colId: string;\n  hidden: boolean;\n  hiddenIds: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCsvImportOptions","kind":"type","title":"SyGridCsvImportOptions","summary":"SyGridCsvImportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridCsvImportOptions {\n  delimiter?: CsvDelimiter;\n  hasHeader?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CsvDelimiter","title":"CsvDelimiter","description":""}]}]}]},{"path":"/ko/docs/types/SyGridCustomEvent","kind":"type","title":"SyGridCustomEvent","summary":"SyGridCustomEvent의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridCustomEvent<\n  TDetail,\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n> = CustomEvent<TDetail> & {\n  readonly currentTarget:\n    | (EventTarget & SyGridApi<TData, TContext, TValue>)\n    | null;\n};","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventListener","title":"SyGridEventListener","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowDecision","kind":"type","title":"SyGridDisplayRowDecision","summary":"SyGridDisplayRowDecision의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDisplayRowDecision {\n  allowed: boolean;\n  feature: SyGridDisplayRowFeature;\n  kind: SyGridDisplayRowKind;\n  reason: SyGridDisplayRowRefusal | null;\n  instead: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowFeature","title":"SyGridDisplayRowFeature","description":""},{"path":"/ko/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/ko/docs/types/SyGridDisplayRowRefusal","title":"SyGridDisplayRowRefusal","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowFeature","kind":"type","title":"SyGridDisplayRowFeature","summary":"SyGridDisplayRowFeature의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDisplayRowFeature =\n  | 'select'\n  | 'focus'\n  | 'edit'\n  | 'export'\n  | 'quick-filter'\n  | 'expand';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowIdentity","kind":"type","title":"SyGridDisplayRowIdentity","summary":"SyGridDisplayRowIdentity의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDisplayRowIdentity = 'row-id' | 'key-path' | 'singleton';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowInfo","kind":"type","title":"SyGridDisplayRowInfo","summary":"SyGridDisplayRowInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDisplayRowInfo {\n  index: number;\n  kind: SyGridDisplayRowKind;\n  policy: SyGridDisplayRowPolicy;\n  keyPath: ReadonlyArray<string> | null;\n  level: number;\n  label: string | null;\n  features: ReadonlyArray<SyGridDisplayRowDecision>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDisplayRowInfo","title":"getDisplayRowInfo","description":"지정한 표시 행이 일반 데이터·그룹·상세 등 어떤 종류인지 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/ko/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""},{"path":"/ko/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowKind","kind":"type","title":"SyGridDisplayRowKind","summary":"SyGridDisplayRowKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDisplayRowKind =\n  | 'data'\n  | 'group'\n  | 'group-footer'\n  | 'tree'\n  | 'tree-filler'\n  | 'pivot'\n  | 'pivot-grand-total';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""},{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/ko/docs/types/SyGridDisplayRowPolicy","title":"SyGridDisplayRowPolicy","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowPolicy","kind":"type","title":"SyGridDisplayRowPolicy","summary":"SyGridDisplayRowPolicy의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDisplayRowPolicy {\n  kind: SyGridDisplayRowKind;\n  hasBackingData: boolean;\n  identity: SyGridDisplayRowIdentity;\n  selectableAsData: boolean;\n  selectsDescendants: boolean;\n  editable: boolean;\n  focusable: boolean;\n  exportsAsDataRow: boolean;\n  exportsAsSummary: boolean;\n  quickFilterSubject: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowKind","title":"SyGridDisplayRowKind","description":""},{"path":"/ko/docs/types/SyGridDisplayRowIdentity","title":"SyGridDisplayRowIdentity","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDisplayRowRefusal","kind":"type","title":"SyGridDisplayRowRefusal","summary":"SyGridDisplayRowRefusal의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDisplayRowRefusal =\n  | 'no-backing-data'\n  | 'selects-descendants-instead'\n  | 'derived-row'\n  | 'not-expandable';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDisplayRowDecision","title":"SyGridDisplayRowDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDragOrphanCause","kind":"type","title":"SyGridDragOrphanCause","summary":"SyGridDragOrphanCause의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDragOrphanCause =\n  | 'pointer-capture-lost' | 'pointer-cancel' | 'element-disconnected' | 'permission-revoked'\n  | 'document-hidden' | 'window-blur' | 'watchdog-timeout';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDragSafetyReport","kind":"type","title":"SyGridDragSafetyReport","summary":"SyGridDragSafetyReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDragSafetyReport {\n  readonly live: number;\n  readonly stuck: ReadonlyArray<string>;\n  readonly aborts: number;\n  readonly topCauses: ReadonlyArray<{ readonly cause: SyGridDragOrphanCause; readonly count: number }>;\n  readonly watchdogTicks: number;\n  readonly stats: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDragSafetyReport","title":"getDragSafetyReport","description":"현재 설정에서 행 드래그를 안전하게 처리할 수 있는지와 제한을 보고합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDropZoneInput","kind":"type","title":"SyGridDropZoneInput","summary":"SyGridDropZoneInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDropZoneInput {\n  readonly id: string;\n  readonly kind: 'grid' | 'external';\n  readonly element?: HTMLElement | string;\n  readonly grid?: HTMLElement;\n  readonly accepting?: boolean;\n  readonly schema?: {\n    readonly id: string;\n    readonly fields: ReadonlyArray<{ readonly field: string; readonly type: 'string' | 'number' | 'boolean' | 'date' | 'any'; readonly required: boolean }>;\n    readonly allowExtraFields: boolean;\n  };\n  readonly permit?: (request: {\n    readonly sourceZoneId: string;\n    readonly targetZoneId: string;\n    readonly mode: 'move' | 'copy';\n    readonly rowKey: string;\n    readonly row: unknown;\n    readonly context: unknown;\n  }) => { readonly allow: true } | { readonly allow: false; readonly detail: string };\n  readonly adapt?: (row: unknown, sourceZoneId: string) => unknown;\n  readonly consumes?: boolean;\n  readonly mode?: 'move' | 'copy';\n  readonly duplicateIds?: 'refuse' | 'skip' | 'replace';\n  readonly atomicity?: 'all-or-nothing' | 'best-effort';\n  readonly onDrop?: (target: unknown, commit: unknown) => void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/registerDropZone","title":"registerDropZone","description":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDropZoneRegistration","kind":"type","title":"SyGridDropZoneRegistration","summary":"SyGridDropZoneRegistration의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridDropZoneRegistration =\n  | { readonly outcome: 'added'; readonly zoneId: string; readonly generation: number }\n  | { readonly outcome: 'refused'; readonly zoneId: string; readonly reason: string; readonly detail: string };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/registerDropZone","title":"registerDropZone","description":"행을 받을 드롭 영역을 등록하고 등록 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridDropZonesReport","kind":"type","title":"SyGridDropZonesReport","summary":"SyGridDropZonesReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridDropZonesReport {\n  readonly zones: ReadonlyArray<{ readonly id: string; readonly kind: 'grid' | 'external'; readonly accepting: boolean; readonly consumes: boolean; readonly registeredAt: number }>;\n  readonly generation: number;\n  readonly stats: unknown;\n  readonly activeTargetZoneId: string | null;\n  readonly ownZoneId: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDropZones","title":"getDropZones","description":"현재 드롭 영역 등록 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridEditRejectedCell","kind":"type","title":"SyGridEditRejectedCell","summary":"SyGridEditRejectedCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridEditRejectedCell {\n  rowId: GridRowId;\n  colId: string;\n  reason: 'rbac' | 'validation';\n  detail: string | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridEditSource","kind":"type","title":"SyGridEditSource","summary":"SyGridEditSource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridEditSource = 'local' | 'remote' | 'undo' | 'redo';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridEventListener","kind":"type","title":"SyGridEventListener","summary":"SyGridEventListener의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridEventListener<\n  TDetail,\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n> = (\n  this: SyGridApi<TData, TContext, TValue>,\n  event: SyGridCustomEvent<TDetail, TData, TContext, TValue>,\n) => void;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/ko/docs/types/SyGridCustomEvent","title":"SyGridCustomEvent","description":""}]}]}]},{"path":"/ko/docs/types/SyGridEventMap","kind":"type","title":"SyGridEventMap","summary":"SyGridEventMap의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridEventMap<\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n> {\n  queryComplete: GridQueryResult & { tier: GridEngineTier };\n  sortChanged: SyGridSortChangedEventDetail;\n  filterChanged: {\n    field: string;\n    filter: ActiveFilter | null;\n    activeMap: ActiveFilterMap;\n    customModel?: unknown;\n    previousCustomModel?: unknown;\n    source?: 'ui' | 'api' | 'restore' | 'component';\n  };\n  filterModified: {\n    field: string;\n    source: 'component';\n  };\n  conditionFilterChanged: { model: ConditionNode<TData> | null };\n  conditionPresetsChanged: {\n    presets: Array<{ name: string; json: string }>;\n  };\n  columnGroupToggled: { groupId: string; open: boolean };\n  rowGroupToggled: { key: string | null; expanded: boolean };\n  treeNodeToggled: { path: readonly string[]; expanded: boolean };\n  detailRowToggled: { rowId: GridRowId; expanded: boolean };\n  detailRowCreated: { rowId: GridRowId; master: TData | null };\n  detailRowDestroyed: { rowId: GridRowId };\n  rangeSelectionChanged: { ranges: CellRangeBounds[] };\n  toolPanelToggled: { id: SideBarPanelId; open: boolean };\n  csvImported: { rowCount: number; columnCount: number };\n  clipboardCopied: { text: string; ranges: CellRangeBounds[] };\n  clipboardPasted: SyGridClipboardPastedEventDetail<\n    TData,\n    TValue,\n    TContext\n  >;\n  paginationChanged: {\n    pageIndex: number;\n    pageSize: number;\n    pageCount: number;\n    totalRows: number;\n    previous: ActivePagination;\n  };\n  quickFilterChanged: { value: string; previous: string };\n  emptyStateActionClicked: {\n    kind: EmptyStateKind;\n    action: 'clear-filters' | 'reload';\n  };\n  activeCellChanged: SyGridActiveCellChangedEventDetail;\n  cellClicked: SyGridCellClickedEventDetail<TData>;\n  cellDoubleClicked: SyGridCellDoubleClickedEventDetail<TData>;\n  rowClicked: SyGridRowClickedEventDetail<TData>;\n  cellEditingRequested: SyGridCellEditingRequestedEventDetail<TData>;\n  cellEditingCancelled: SyGridCellEditingCancelledEventDetail;\n  cellEditingCommitted: SyGridCellEditingCommittedEventDetail<TValue>;\n  formulaEvaluated: {\n    rowIndex: number;\n    colIndex: number;\n    field: string;\n    formula: string;\n    value: unknown;\n  };\n  formulaError: {\n    rowIndex: number;\n    colIndex: number;\n    field: string;\n    formula: string;\n    type: string;\n    description: string;\n  };\n  workbookBindingChanged: GridWorkbookBindingChangedDetail;\n  workbookBindingError: GridWorkbookBindingErrorDetail;\n  chunkLoading: GridChunkLoadEventDetail;\n  chunkLoaded: GridChunkLoadEventDetail;\n  chunkLoadFailed: GridChunkLoadEventDetail;\n  componentError: GridComponentErrorDetails;\n  rowDataChanged: SyGridRowDataChangedEventDetail<TData>;\n  cellValueChanged: SyGridCellValueChangedEventDetail<\n    TData,\n    TValue,\n    TContext\n  >;\n  rowMoved: { fromIndex: number; toIndex: number; row: TData };\n  rowGroupChanged: { groupBy: string | null };\n  pivotPanelChanged: PivotPanelChangeDetail;\n  pivotChanged: PivotPanelChangeDetail;\n  pivotModeChanged: { pivotMode: boolean };\n  contextMenuItemClicked: { id: string; rowIndex: number; field?: string };\n  remoteEditApplied: SyGridRemoteEditAppliedEventDetail<\n    TData,\n    TValue,\n    TContext\n  >;\n  presenceChanged: { collaborators: ReadonlyArray<GridCollaboratorInfo> };\n  collabConflictResolved: GridCollabConflict;\n  collaboratorJoined: GridCollaboratorInfo;\n  collaboratorLeft: { id: string };\n  syncStatusChanged: { status: GridSyncStatus };\n  cellCommentsChanged: {\n    rowId: string;\n    field: string;\n    comments: GridCellComment[];\n  };\n  commentMentioned: {\n    rowId: string;\n    field: string;\n    comment: GridCellComment;\n  };\n  auditLogChanged: { entry: AuditEntry };\n  conditionalFormatsChanged: { rules: ConditionalFormatRule[] };\n  cellValidationFailed: {\n    rowIndex: number;\n    field: string;\n    value: unknown;\n    message: string;\n  };\n  snapshotCaptured: { id: string; name: string; rowCount: number };\n  snapshotRestored: { id: string; name: string; rowCount: number };\n  xlsxImported: {\n    sheetName: string;\n    snapshot: XlsxGridSnapshot;\n    workbookSheetCount: number;\n  };\n  historyChanged: SyGridHistoryChangedEventDetail;\n  columnResized: SyGridColumnResizedEventDetail;\n  columnReordered: SyGridColumnReorderedEventDetail;\n  columnVisibilityChanged: SyGridColumnVisibilityChangedEventDetail;\n  selectionChanged: SyGridSelectionChangedEventDetail;\n  spanConflict: SyGridSpanConflictEventDetail;\n  rowDragEnter: SyGridRowDragEventDetail;\n  rowDragMove: SyGridRowDragEventDetail;\n  rowDragLeave: SyGridRowDragEventDetail;\n  rowDragEnd: SyGridRowDragEndDetail;\n  rowDragCancel: SyGridRowDragCancelDetail;\n  rowsTransferred: SyGridRowsTransferredDetail;\n  pinnedRowsChanged: SyGridPinnedRowsChangedDetail<TData>;\n  rowLayoutRefused: SyGridRowLayoutRefusedDetail;\n  treeReparented: SyGridTreeReparentedDetail;\n  rowHoverChanged: {\n    hoveredRowId: GridRowId | null;\n    previousRowId: GridRowId | null;\n  };\n  themeChanged: {\n    theme: GridTheme;\n    resolvedTokens: Record<string, string>;\n  };\n  localeChanged: {\n    locale: GridLocale;\n    resolvedMessages: Record<string, string>;\n  };\n  gridObjectChanged: GridLiveObjectEvent<TData, TValue>;\n  stateUpdated: SyGridStateUpdatedDetail;\n  preDestroyed: SyGridPreDestroyedDetail;\n  batchEditStart: SyGridBatchEditStartEventDetail;\n  batchEditEnd: SyGridBatchEditEndEventDetail;\n  rowValueChanged: SyGridRowValueChangedEventDetail;\n  rowEditStart: SyGridRowEditStartEventDetail;\n  rowEditStop: SyGridRowEditStopEventDetail;\n  fillStart: SyGridFillStartEventDetail;\n  fillEnd: SyGridFillEndEventDetail;\n  pivotCombinationConflict: SyGridPivotCombinationConflictDetail;\n  pivotColumnsChanged: SyGridPivotColumnsChangedDetail;\n  serverStoreUpdated: SyGridServerStoreUpdatedDetail;\n  workbookValuesPropagated: SyGridWorkbookPropagationDetail;\n  chartCreated: SyGridChartEvent;\n  chartRangeChanged: SyGridChartEvent;\n  chartOptionsChanged: SyGridChartEvent;\n  chartDestroyed: SyGridChartEvent;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridQueryResult","title":"GridQueryResult","description":""},{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/ko/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""},{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""},{"path":"/ko/docs/types/ActiveFilterMap","title":"ActiveFilterMap","description":""},{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/SideBarPanelId","title":"SideBarPanelId","description":""},{"path":"/ko/docs/types/SyGridClipboardPastedEventDetail","title":"SyGridClipboardPastedEventDetail","description":""},{"path":"/ko/docs/types/ActivePagination","title":"ActivePagination","description":""},{"path":"/ko/docs/types/EmptyStateKind","title":"EmptyStateKind","description":""},{"path":"/ko/docs/types/SyGridActiveCellChangedEventDetail","title":"SyGridActiveCellChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingRequestedEventDetail","title":"SyGridCellEditingRequestedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingCancelledEventDetail","title":"SyGridCellEditingCancelledEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellEditingCommittedEventDetail","title":"SyGridCellEditingCommittedEventDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingChangedDetail","title":"GridWorkbookBindingChangedDetail","description":""},{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""},{"path":"/ko/docs/types/GridChunkLoadEventDetail","title":"GridChunkLoadEventDetail","description":""},{"path":"/ko/docs/types/GridComponentErrorDetails","title":"GridComponentErrorDetails","description":""},{"path":"/ko/docs/types/SyGridRowDataChangedEventDetail","title":"SyGridRowDataChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""},{"path":"/ko/docs/types/PivotPanelChangeDetail","title":"PivotPanelChangeDetail","description":""},{"path":"/ko/docs/types/SyGridRemoteEditAppliedEventDetail","title":"SyGridRemoteEditAppliedEventDetail","description":""},{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/ko/docs/types/GridCollabConflict","title":"GridCollabConflict","description":""},{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/ko/docs/types/ConditionalFormatRule","title":"ConditionalFormatRule","description":""},{"path":"/ko/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""},{"path":"/ko/docs/types/SyGridHistoryChangedEventDetail","title":"SyGridHistoryChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColumnResizedEventDetail","title":"SyGridColumnResizedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColumnReorderedEventDetail","title":"SyGridColumnReorderedEventDetail","description":""},{"path":"/ko/docs/types/SyGridColumnVisibilityChangedEventDetail","title":"SyGridColumnVisibilityChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridSelectionChangedEventDetail","title":"SyGridSelectionChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/ko/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridRowLayoutRefusedDetail","title":"SyGridRowLayoutRefusedDetail","description":""},{"path":"/ko/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""},{"path":"/ko/docs/types/GridTheme","title":"GridTheme","description":""},{"path":"/ko/docs/types/GridLocale","title":"GridLocale","description":""},{"path":"/ko/docs/types/GridLiveObjectEvent","title":"GridLiveObjectEvent","description":""},{"path":"/ko/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""},{"path":"/ko/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""},{"path":"/ko/docs/types/SyGridBatchEditStartEventDetail","title":"SyGridBatchEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridBatchEditEndEventDetail","title":"SyGridBatchEditEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","title":"SyGridRowValueChangedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowEditStartEventDetail","title":"SyGridRowEditStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowEditStopEventDetail","title":"SyGridRowEditStopEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillStartEventDetail","title":"SyGridFillStartEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/ko/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""},{"path":"/ko/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""},{"path":"/ko/docs/types/SyGridChartEvent","title":"SyGridChartEvent","description":""}]}]}]},{"path":"/ko/docs/types/SyGridExcelDownloadOptions","kind":"type","title":"SyGridExcelDownloadOptions","summary":"SyGridExcelDownloadOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridExcelDownloadOptions extends SyGridExcelGenerateOptions {\n  fileName?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridExcelGenerateOptions","kind":"type","title":"SyGridExcelGenerateOptions","summary":"SyGridExcelGenerateOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridExcelGenerateOptions {\n  sheetName?: string;\n  onlySelected?: boolean;\n  columnKeys?: readonly string[];\n  skipHeaders?: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFillEndEventDetail","kind":"type","title":"SyGridFillEndEventDetail","summary":"SyGridFillEndEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFillEndEventDetail {\n  mutationId: GridMutationId;\n  status: 'committed' | 'rejected' | 'cancelled';\n  writtenCount: number;\n  rejectedCells: ReadonlyArray<SyGridFillRejectedCell>;\n  resultingRange: CellRangeBounds;\n  reason?: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/fillEnd","title":"fillEnd","description":"범위 채우기가 끝났을 때 발생합니다. 적용·건너뜀·거절 결과를 사용자에게 안내합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFillRangeOptions","kind":"type","title":"SyGridFillRangeOptions","summary":"SyGridFillRangeOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFillRangeOptions {\n  to: { row: number; col: number };\n  source?: CellRangeBounds;\n  mode?: 'copy' | 'series';\n  formatted?: boolean;\n  atomicity?: 'atomic' | 'best-effort';\n  formulaPolicy?: 'overwrite' | 'skip';\n  allowedDirections?: ReadonlyArray<FillDirection>;\n  pattern?: ((laneValues: ReadonlyArray<unknown>, index: number, target: { row: number; col: number }) => unknown) | null;\n  setFillValue?: ((target: { row: number; col: number; sourceRow: number; sourceCol: number; proposed: unknown; kind: string }) => unknown) | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/fillRange","title":"fillRange","description":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/FillDirection","title":"FillDirection","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFillRangeReport","kind":"type","title":"SyGridFillRangeReport","summary":"SyGridFillRangeReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFillRangeReport {\n  status: 'committed' | 'rejected' | 'cancelled' | 'none';\n  mutationId: GridMutationId | null;\n  writtenCount: number;\n  rejectedCells: ReadonlyArray<SyGridFillRejectedCell>;\n  resultingRange: CellRangeBounds | null;\n  transactionRejectedRowIds: ReadonlyArray<GridRowId>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/fillRange","title":"fillRange","description":"소스 범위의 값이나 패턴으로 목표 범위를 채우고 적용·거절 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridFillRejectedCell","title":"SyGridFillRejectedCell","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFillRejectedCell","kind":"type","title":"SyGridFillRejectedCell","summary":"SyGridFillRejectedCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFillRejectedCell {\n  row: number;\n  col: number;\n  reason: 'rbac' | 'validation' | 'formula-protected';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFillEndEventDetail","title":"SyGridFillEndEventDetail","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFillStartEventDetail","kind":"type","title":"SyGridFillStartEventDetail","summary":"SyGridFillStartEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFillStartEventDetail {\n  mode: FillPlanMode;\n  source: CellRangeBounds;\n  target: CellRangeBounds | null;\n  direction: FillDirection | null;\n  mutationId: GridMutationId;\n  sourceRangeId: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/fillStart","title":"fillStart","description":"범위 채우기가 시작되었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/FillPlanMode","title":"FillPlanMode","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/FillDirection","title":"FillDirection","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFilterSlice","kind":"type","title":"SyGridFilterSlice","summary":"SyGridFilterSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFilterSlice {\n  readonly builtIn: Readonly<Record<string, unknown>>;\n  readonly customModels: Readonly<Record<string, unknown>> | null;\n  readonly quickFilter: string | null;\n  readonly conditionTree: string | null;\n  readonly externalFilterActive: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getFilterModel","title":"getFilterModel","description":"현재 필터 계열을 통합한 상태를 읽습니다."},{"path":"/ko/docs/methods/setFilterModel","title":"setFilterModel","description":"검증된 통합 필터 모델을 적용합니다. null은 모든 필터 계열을 지우며 유효하지 않은 모델은 보고서를 확인해야 합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFocusSlice","kind":"type","title":"SyGridFocusSlice","summary":"SyGridFocusSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFocusSlice {\n  readonly activeCell: { readonly rowIndex: number; readonly colIndex: number } | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthContainer","kind":"type","title":"SyGridFullWidthContainer","summary":"SyGridFullWidthContainer의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridFullWidthContainer = 'left' | 'middle' | 'right';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""},{"path":"/ko/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","kind":"type","title":"SyGridFullWidthLayoutReport","summary":"SyGridFullWidthLayoutReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFullWidthLayoutReport {\n  readonly declared: boolean;\n  readonly loaded: boolean;\n  readonly rowCount: number;\n  readonly fullWidthCount: number;\n  readonly mountCount: number;\n  readonly refusals: ReadonlyArray<{ readonly reason: SyGridFullWidthRefusalReason; readonly rowIndex: number; readonly rowId: GridRowId | null; readonly requested: string; readonly applied: string; readonly detail: string }>;\n  readonly predicateCalls: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRefusalReason","title":"SyGridFullWidthRefusalReason","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthMode","kind":"type","title":"SyGridFullWidthMode","summary":"SyGridFullWidthMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridFullWidthMode = 'full-width' | 'embedded';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthRefusalReason","kind":"type","title":"SyGridFullWidthRefusalReason","summary":"SyGridFullWidthRefusalReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridFullWidthRefusalReason =\n  | 'predicate-threw'\n  | 'non-deterministic'\n  | 'renderer-missing'\n  | 'renderer-threw'\n  | 'mode-mismatch'\n  | 'kind-conflict'\n  | 'invalid-row-id'\n  | 'duplicate-row-id'\n  | 'empty-container'\n  | 'invalid-height';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthRenderParams","kind":"type","title":"SyGridFullWidthRenderParams","summary":"SyGridFullWidthRenderParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFullWidthRenderParams<TData = GridData> {\n  readonly row: TData;\n  readonly rowId: GridRowId;\n  readonly rowIndex: number;\n  readonly rowKind: SyGridFullWidthRowKind;\n  readonly startCol: number;\n  readonly endCol: number;\n  readonly mountKey: string;\n  readonly container: SyGridFullWidthContainer | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRenderer","title":"SyGridFullWidthRenderer","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowKind","title":"SyGridFullWidthRowKind","description":""},{"path":"/ko/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthRenderer","kind":"type","title":"SyGridFullWidthRenderer","summary":"SyGridFullWidthRenderer의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFullWidthRenderer<TData = GridData> {\n  readonly mode?: SyGridFullWidthMode;\n  readonly create: (params: SyGridFullWidthRenderParams<TData>) => HTMLElement | { readonly gui: HTMLElement };\n  readonly refresh?: (instance: HTMLElement | { readonly gui: HTMLElement }, params: SyGridFullWidthRenderParams<TData>) => boolean;\n  readonly destroy?: (instance: HTMLElement | { readonly gui: HTMLElement }, params: SyGridFullWidthRenderParams<TData>) => void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/fullWidthCellRenderer","title":"fullWidthCellRenderer","description":"전체 폭 행의 내용을 그리는 렌더러입니다. 일반 셀 렌더러와 다른 입력 계약을 사용합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","kind":"type","title":"SyGridFullWidthRowInfo","summary":"SyGridFullWidthRowInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFullWidthRowInfo<TData = GridData> {\n  readonly rowIndex: number;\n  readonly kind: 'cells' | 'full-width';\n  readonly rowId: GridRowId | null;\n  readonly mode: SyGridFullWidthMode | null;\n  readonly height: number | null;\n  readonly heightSource: 'measured' | 'declared' | 'uniform' | null;\n  readonly segments: ReadonlyArray<SyGridFullWidthSegment>;\n  readonly mounted: boolean;\n  readonly rowKind?: TData;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getFullWidthRowInfo","title":"getFullWidthRowInfo","description":"특정 전체 폭 행의 정보를 읽거나 인수를 생략해 전체 레이아웃 보고서를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridFullWidthMode","title":"SyGridFullWidthMode","description":""},{"path":"/ko/docs/types/SyGridFullWidthSegment","title":"SyGridFullWidthSegment","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthRowKind","kind":"type","title":"SyGridFullWidthRowKind","summary":"SyGridFullWidthRowKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridFullWidthRowKind = 'detail' | 'group' | 'group-footer' | 'loading' | 'custom';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRenderParams","title":"SyGridFullWidthRenderParams","description":""}]}]}]},{"path":"/ko/docs/types/SyGridFullWidthSegment","kind":"type","title":"SyGridFullWidthSegment","summary":"SyGridFullWidthSegment의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridFullWidthSegment {\n  readonly container: SyGridFullWidthContainer | null;\n  readonly startCol: number;\n  readonly endCol: number;\n  readonly colSpan: number;\n  readonly mountKey: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridFullWidthContainer","title":"SyGridFullWidthContainer","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckEvidence","kind":"type","title":"SyGridGroupCheckEvidence","summary":"SyGridGroupCheckEvidence의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridGroupCheckEvidence = 'complete' | 'partial';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckState","kind":"type","title":"SyGridGroupCheckState","summary":"SyGridGroupCheckState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridGroupCheckState = 'checked' | 'unchecked' | 'indeterminate';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckStateEntry","kind":"type","title":"SyGridGroupCheckStateEntry","summary":"SyGridGroupCheckStateEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridGroupCheckStateEntry {\n  key: string;\n  label: string;\n  level: number;\n  state: SyGridGroupCheckState;\n  evidence: SyGridGroupCheckEvidence;\n  selected: number;\n  total: number;\n  unloaded: number;\n  unloadedSelected: boolean | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckState","title":"SyGridGroupCheckState","description":""},{"path":"/ko/docs/types/SyGridGroupCheckEvidence","title":"SyGridGroupCheckEvidence","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckStatesOptions","kind":"type","title":"SyGridGroupCheckStatesOptions","summary":"SyGridGroupCheckStatesOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridGroupCheckStatesOptions {\n  descendantScope?: SyGridGroupDescendantScope;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","kind":"type","title":"SyGridGroupCheckStatesReport","summary":"SyGridGroupCheckStatesReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridGroupCheckStatesReport {\n  status: 'ok' | 'unavailable';\n  reason: SyGridGroupCheckUnavailableReason | null;\n  groupCount: number;\n  leafCount: number;\n  descendantScope: SyGridGroupDescendantScope;\n  states: ReadonlyArray<SyGridGroupCheckStateEntry>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getGroupCheckStates","title":"getGroupCheckStates","description":"행 그룹의 선택 상태를 계산합니다. 접힌 그룹·행 ID 없음·다른 행 모델 등 확실히 판단할 수 없는 경우 거절 사유를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckUnavailableReason","title":"SyGridGroupCheckUnavailableReason","description":""},{"path":"/ko/docs/types/SyGridGroupDescendantScope","title":"SyGridGroupDescendantScope","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStateEntry","title":"SyGridGroupCheckStateEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupCheckUnavailableReason","kind":"type","title":"SyGridGroupCheckUnavailableReason","summary":"SyGridGroupCheckUnavailableReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridGroupCheckUnavailableReason =\n  | 'not-grouped'\n  | 'collapsed-groups'\n  | 'tree-data'\n  | 'server-side'\n  | 'pivot-mode'\n  | 'no-row-id';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridGroupDescendantScope","kind":"type","title":"SyGridGroupDescendantScope","summary":"SyGridGroupDescendantScope의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridGroupDescendantScope = 'all' | 'filtered';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridHistoryChangedEventDetail","kind":"type","title":"SyGridHistoryChangedEventDetail","summary":"SyGridHistoryChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridHistoryChangedEventDetail {\n  kind: 'recorded' | 'undone' | 'redone' | 'cleared';\n  depth: { undo: number; redo: number };\n  label?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridImperativeMethods","kind":"type","title":"SyGridImperativeMethods","summary":"SyGridImperativeMethods의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridImperativeMethods<\n  TData = GridData,\n  TContext = unknown,\n  TValue = unknown,\n  TFilterModel = unknown,\n> {\n  getAuditLog(filter?: AuditLogFilter): Promise<AuditEntry[]>;\n  clearAuditLog(): Promise<void>;\n  getAuditLogAsCsv(filter?: AuditLogFilter): Promise<string>;\n  getAuditLogAsJson(filter?: AuditLogFilter, pretty?: boolean): Promise<string>;\n  exportAuditLogAsCsv(fileName?: string, filter?: AuditLogFilter): Promise<void>;\n  exportAuditLogAsJson(fileName?: string, filter?: AuditLogFilter): Promise<void>;\n  openCellCommentPanel(rowId: GridRowId, field: string): Promise<void>;\n  closeCellCommentPanel(): Promise<void>;\n  getApi<\n    TNextData = TData,\n    TNextContext = TContext,\n    TNextValue = TValue,\n    TNextFilterModel = TFilterModel,\n  >(): Promise<\n    SyGridApi<\n      TNextData,\n      TNextContext,\n      TNextValue,\n      TNextFilterModel\n    >\n  >;\n  getColumn<TValue = unknown>(\n    columnId: string,\n  ): Promise<GridColumnRef<TData, TValue, TContext> | null>;\n  getColumns(): Promise<ReadonlyArray<GridColumnRef<TData, unknown, TContext>>>;\n  getColumnGroup(groupId: string): Promise<GridColumnGroupRef<TData, TContext> | null>;\n  getColumnGroups(): Promise<ReadonlyArray<GridColumnGroupRef<TData, TContext>>>;\n  getRow(rowId: GridRowId): Promise<GridRowRef<TData, TContext> | null>;\n  getDisplayedRowAtIndex(index: number): Promise<GridRowRef<TData, TContext> | null>;\n  forEachRow(callback: (row: GridRowRef<TData, TContext>) => void): Promise<void>;\n  forEachDisplayedRow(callback: (row: GridRowRef<TData, TContext>) => void): Promise<void>;\n  getWorkbookBinding(): Promise<GridWorkbookBinding | null>;\n  reconnectWorkbook(): Promise<GridWorkbookBinding | null>;\n  disconnectWorkbook(): Promise<boolean>;\n  sortBy(column: string, direction?: 'asc' | 'desc' | null): Promise<void>;\n  setSortModel(model: ReadonlyArray<SyGridSortModelEntry>): Promise<void>;\n  getSortModel(): Promise<SyGridSortModelEntry[]>;\n  setQuery(query: string): Promise<void>;\n  getActiveTier(): Promise<GridEngineTier>;\n  registerAggFunc(\n    name: string,\n    fn: (values: unknown[], rows: readonly TData[]) => unknown,\n  ): Promise<void>;\n  unregisterAggFunc(name: string): Promise<void>;\n  getRegisteredAggFuncNames(): Promise<string[]>;\n  setRowGroupExpanded(key: string | null, expanded: boolean): Promise<void>;\n  expandAllRowGroups(): Promise<void>;\n  collapseAllRowGroups(): Promise<void>;\n  setTreeNodeExpanded(path: readonly string[], expanded: boolean): Promise<void>;\n  expandAllTreeNodes(): Promise<void>;\n  collapseAllTreeNodes(): Promise<void>;\n  setDetailRowExpanded(rowId: GridRowId, expanded: boolean): Promise<void>;\n  expandAllDetailRows(): Promise<void>;\n  collapseAllDetailRows(): Promise<void>;\n  setColumnGroupOpened(groupId: string, open: boolean): Promise<void>;\n  getValidationErrors(): Promise<Array<{\n    rowIndex: number;\n    rowId: unknown;\n    field: string;\n    value: unknown;\n    message: string;\n  }>>;\n  captureSnapshot(name?: string): Promise<string>;\n  listSnapshots(): Promise<SnapshotMeta[]>;\n  deleteSnapshot(id: string): Promise<boolean>;\n  diffSnapshots(idA: string, idB?: string): Promise<SnapshotDiff<TData>>;\n  restoreSnapshot(id: string): Promise<boolean>;\n  getCellRanges(): Promise<CellRangeBounds[]>;\n  copyRangeToClipboard(): Promise<boolean>;\n  pasteFromClipboard(): Promise<boolean>;\n  clearCellRanges(): Promise<void>;\n  refreshInfiniteCache(): Promise<void>;\n  refreshRowHeights(): Promise<void>;\n  scrollToTop(): Promise<void>;\n  selectRows(ids: GridRowId[]): Promise<void>;\n  getSelectedRowIds(): Promise<ReadonlyArray<GridRowId>>;\n  applyTransaction(\n    transaction: GridRowTransaction<TData>,\n    label?: string,\n    opts?: { source?: SyGridEditSource; origin?: unknown },\n  ): Promise<SyGridRowTransactionResult<TData>>;\n  undo(): Promise<boolean>;\n  redo(): Promise<boolean>;\n  clearHistory(): Promise<void>;\n  connectCollabRoom(opts?: SyGridCollabConnectOptions): Promise<GridSyncStatus>;\n  preloadChunks(ids: GridChunkId[]): Promise<void>;\n  disconnectCollabRoom(): Promise<void>;\n  getSyncStatus(): Promise<GridSyncStatus>;\n  getCollaborators(): Promise<GridCollaboratorInfo[]>;\n  addCellComment(\n    rowId: GridRowId,\n    field: string,\n    text: string,\n    parentId?: string,\n  ): Promise<string | null>;\n  getCellComments(rowId: GridRowId, field: string): Promise<GridCellComment[]>;\n  setCellCommentResolved(\n    rowId: GridRowId,\n    field: string,\n    commentId: string,\n    resolved: boolean,\n  ): Promise<boolean>;\n  deleteCellComment(\n    rowId: GridRowId,\n    field: string,\n    commentId: string,\n  ): Promise<boolean>;\n  getDataAsCsv(\n    options?: Omit<CsvExportOptions<TData>, 'columns' | 'rows'>,\n  ): Promise<CsvExportResult>;\n  exportDataAsCsv(\n    options?: Omit<CsvDownloadOptions<TData>, 'columns' | 'rows'>,\n  ): Promise<CsvExportResult>;\n  getDataAsExcel(options?: SyGridExcelGenerateOptions): Promise<Uint8Array>;\n  exportDataAsExcel(options?: SyGridExcelDownloadOptions): Promise<void>;\n  importCsvText(\n    text: string,\n    options?: SyGridCsvImportOptions,\n  ): Promise<{ rowCount: number; columnCount: number }>;\n  getDataAsPdf(options?: SyGridApiPdfExportOptions<TData>): Promise<PdfExportResult>;\n  exportDataAsPdf(options?: SyGridApiPdfDownloadOptions<TData>): Promise<PdfExportResult>;\n  importDataFromXlsx(\n    source: ArrayBuffer | Uint8Array,\n    options?: SyGridXlsxImportOptions,\n  ): Promise<XlsxImportResult>;\n  getContextMenuItems(\n    target: { rowIndex: number; field?: string },\n  ): Promise<ContextMenuItem<TData>[]>;\n  copyCellAt(rowIndex: number, field: string): Promise<boolean>;\n  copyRowAt(rowIndex: number): Promise<boolean>;\n  getCellTooltipText(target: SyGridCellTooltipTarget<TData>): Promise<string>;\n  getUndoRedoDepth(): Promise<{ undo: number; redo: number }>;\n  setColumnWidth(colId: string, width: number): Promise<void>;\n  resetColumnWidth(colId: string): Promise<void>;\n  getColumnWidth(colId: string): Promise<number | null>;\n  setColumnPinned(field: string, side: 'left' | 'right' | null): Promise<void>;\n  getColumnPinned(field: string): Promise<'left' | 'right' | null>;\n  setColumnOrder(orderedColIds: string[]): Promise<void>;\n  getColumnOrder(): Promise<string[]>;\n  hideColumn(colId: string): Promise<void>;\n  showColumn(colId: string): Promise<void>;\n  toggleColumnVisibility(colId: string): Promise<boolean>;\n  setHiddenColumns(colIds: string[]): Promise<void>;\n  resetColumnVisibility(): Promise<void>;\n  getHiddenColumns(): Promise<string[]>;\n  autoSizeColumn(colId: string): Promise<number | null>;\n  autoSizeAllColumns(): Promise<void>;\n  getColumnState(): Promise<SyGridColumnState[]>;\n  applyColumnState(\n    state: SyGridColumnState[],\n    opts?: SyGridApplyColumnStateOptions,\n  ): Promise<void>;\n  getState(): Promise<SyGridState>;\n  setState(\n    state: SyGridState,\n    options?: GridStateApplyOptions,\n  ): Promise<SyGridStateApplyReport>;\n  getFilterModel(): Promise<SyGridFilterSlice>;\n  setFilterModel(\n    model: SyGridFilterSlice | null,\n  ): Promise<FilterSliceApplyResult['report']>;\n  setHoveredRow(rowId: GridRowId | null): Promise<void>;\n  getHoveredRowId(): Promise<GridRowId | null>;\n  getActiveEditTransaction(): Promise<EditTransaction | null>;\n  commitActiveEdit(): Promise<boolean>;\n  cancelActiveEdit(): Promise<boolean>;\n  registerCellRenderer(name: string, renderer: CellRenderer<TData>): Promise<boolean>;\n  listRegisteredCellRenderers(): Promise<ReadonlyArray<string>>;\n  unregisterCellRenderer(name: string): Promise<boolean>;\n  registerGridComponent<TKind extends GridComponentKind>(\n    scope: GridComponentRegistrationScope,\n    kind: TKind,\n    name: string,\n    definition: GridComponentDefinitionFor<\n      TKind,\n      TData,\n      TValue,\n      TFilterModel,\n      TContext\n    >,\n  ): Promise<void>;\n  replaceGridComponent<TKind extends GridComponentKind>(\n    scope: GridComponentRegistrationScope,\n    kind: TKind,\n    name: string,\n    definition: GridComponentDefinitionFor<\n      TKind,\n      TData,\n      TValue,\n      TFilterModel,\n      TContext\n    >,\n  ): Promise<void>;\n  unregisterGridComponent(\n    scope: GridComponentRegistrationScope,\n    kind: GridComponentKind,\n    name: string,\n  ): Promise<boolean>;\n  getRegisteredGridComponentNames(\n    scope: GridComponentRegistrationScope,\n    kind: GridComponentKind,\n  ): Promise<ReadonlyArray<string>>;\n  getCellRendererInstance(\n    rowId: GridRowId,\n    colId: string,\n  ): Promise<GridRendererDiscovery<TData, TValue, TContext>>;\n  destroyCellRendererInstance(\n    rowId: GridRowId,\n    colId: string,\n  ): Promise<boolean>;\n  focusCellRendererInstance(\n    rowId: GridRowId,\n    colId: string,\n    direction: 'in' | 'out',\n  ): Promise<boolean>;\n  getCellEditorInstance(): Promise<\n    | GridMountedComponentLookup<\n        GridEditorInstance<TData, TValue, TContext>,\n        GridEditorParams<TData, TValue, TContext>,\n        HTMLElement\n      >\n    | null\n  >;\n  getColumnFilterInstance<\n    TColumnValue = TValue,\n    TModel = TFilterModel,\n  >(\n    columnId: string,\n  ): Promise<\n    GridFilterInstance<TData, TColumnValue, TModel, TContext> | null\n  >;\n  getColumnFilterModel<TModel = TFilterModel>(\n    columnId: string,\n  ): Promise<TModel | null>;\n  setColumnFilterModel<TModel = TFilterModel>(\n    columnId: string,\n    model: TModel | null,\n  ): Promise<boolean>;\n  onFilterChanged(): Promise<void>;\n  refreshExternalFilter(): Promise<boolean>;\n  destroyColumnFilter(columnId: string): Promise<boolean>;\n  recreateColumnFilter(\n    columnId: string,\n    options?: { preserveModel?: boolean },\n  ): Promise<boolean>;\n  setPivotColumns(columns: string[]): Promise<boolean>;\n  setValueColumns(columns: string[]): Promise<boolean>;\n  setConditionFilter(model: ConditionNode<TData> | null): Promise<void>;\n  getConditionFilter(): Promise<ConditionNode<TData> | null>;\n  setConditionPresets(\n    presets: ReadonlyArray<{ name: string; json: string }>,\n  ): Promise<void>;\n  getConditionPresets(): Promise<Array<{ name: string; json: string }>>;\n  openToolPanel(id: string): Promise<boolean>;\n  closeToolPanel(): Promise<void>;\n  getOpenedToolPanel(): Promise<string | null>;\n  getCanonicalRanges(): Promise<SyGridCanonicalRange[]>;\n  setCanonicalRanges(ranges: SyGridCellRangeInput[]): Promise<SyGridCanonicalChange[]>;\n  startBatchEdit(options?: SyGridBatchStartOptions): Promise<boolean>;\n  isBatchEditing(): Promise<boolean>;\n  stageBatchCell(rowId: GridRowId, colId: string, value: unknown): Promise<boolean>;\n  getPendingBatchCells(): Promise<SyGridPendingBatchCell[]>;\n  cancelBatchEdit(): Promise<number>;\n  commitBatchEdit(options?: SyGridBatchCommitOptions): Promise<SyGridBatchCommitReport>;\n  startRowEdit(rowId: GridRowId): Promise<boolean>;\n  stageRowEditCell(colId: string, value: unknown): Promise<boolean>;\n  stopRowEdit(reason?: 'commit' | 'cancel'): Promise<SyGridRowEditReport>;\n  getStateCaptureReport(): Promise<SyGridStateCaptureReport>;\n  fillRange(options: SyGridFillRangeOptions): Promise<SyGridFillRangeReport>;\n  getDisplayRowInfo(index: number): Promise<SyGridDisplayRowInfo | null>;\n  getPivotCombinationReport(): Promise<SyGridPivotCombinationReport>;\n  getPivotSecondaryColumns(): Promise<SyGridPivotSecondaryColumns | null>;\n  getGroupCheckStates(\n    options?: SyGridGroupCheckStatesOptions,\n  ): Promise<SyGridGroupCheckStatesReport>;\n  refreshServerSide(\n    input?: SyGridServerRefreshInput,\n  ): Promise<SyGridServerRefreshResult>;\n  applyServerSideTransaction(\n    transaction: SyGridServerTransactionInput,\n  ): Promise<SyGridServerTransactionResult>;\n  applyServerSideTransactionAsync(\n    transaction: SyGridServerTransactionInput,\n    onSettle?: (settlement: SyGridServerTransactionSettlement) => void,\n  ): Promise<SyGridServerTransactionEnqueue>;\n  flushServerSideAsyncTransactions(): Promise<SyGridServerFlushReport>;\n  getServerSideStoreState(): Promise<SyGridServerStateReport | null>;\n  getServerPivotResultColumns(): Promise<SyGridServerPivotColumnsReport | null>;\n  auditServerPivotResultColumns(\n    colIds: ReadonlyArray<string>,\n  ): Promise<SyGridServerPivotColumnAudit | null>;\n  getServerSideSelectionState(): Promise<SyGridServerSelectionState>;\n  setServerSideSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>;\n  selectAllServerSide(action?: 'select' | 'clear'): Promise<SyGridServerSelectAllResult>;\n  getServerGroupSelectionState(): Promise<SyGridServerSelectionState>;\n  setServerGroupSelectionState(input: unknown): Promise<SyGridServerSelectionSetResult>;\n  selectServerGroupChildren(\n    groupKeys: ReadonlyArray<string>,\n    action?: 'select' | 'deselect',\n  ): Promise<SyGridServerGroupChildrenResult>;\n  getRowSpan(colId: string): Promise<SyGridRowSpanReport | null>;\n  getCellSpan(rowIndex: number, colId: string): Promise<SyGridCellSpanInfo | null>;\n  getSpanInteraction(query?: SyGridSpanInteractionQuery): Promise<SyGridSpanInteractionReport>;\n  startRowDrag(input: SyGridRowDragStartInput): Promise<SyGridRowDragStartResult>;\n  getRowDragSession(): Promise<SyGridRowDragSessionReport>;\n  registerDropZone(input: SyGridDropZoneInput): Promise<SyGridDropZoneRegistration>;\n  unregisterDropZone(zoneId: string): Promise<boolean>;\n  getDropZones(): Promise<SyGridDropZonesReport>;\n  getDragSafetyReport(): Promise<SyGridDragSafetyReport>;\n  setPinnedRows(input: SyGridPinnedRowSetInput<TData>): Promise<SyGridPinnedRowsResult<TData>>;\n  getPinnedRows(): Promise<SyGridPinnedRowsReport<TData>>;\n  getPinnedRowInfo(displayIndex: number): Promise<SyGridPinnedRowInfo<TData> | null>;\n  getFullWidthRowInfo(rowIndex?: number): Promise<SyGridFullWidthRowInfo<TData> | SyGridFullWidthLayoutReport | null>;\n  setAlignedGrids(input: SyGridAlignedGridsInput): Promise<SyGridAlignedGridsResult>;\n  getAlignedGrids(): Promise<SyGridAlignedGridsReport>;\n  reparentRows(request: SyGridReparentRequest): Promise<SyGridReparentResult>;\n  getWorkbookPropagationState(): Promise<SyGridWorkbookPropagationState>;\n  flushWorkbookPropagation(): Promise<SyGridWorkbookFlushReport>;\n  getWorkbookSnapshotReport(): Promise<SyGridWorkbookSnapshotReport>;\n  getWorkbookIntegrityReport(): Promise<SyGridWorkbookIntegrityReport>;\n  applySpillFormula(input: SyGridSpillApplyInput): Promise<SyGridSpillApplyResult>;\n  clearSpillFormula(target: SyGridSpillTarget): Promise<SyGridSpillClearResult>;\n  undoSpillTransaction(mutationId: GridMutationId): Promise<SyGridSpillUndoResult>;\n  getSpillReport(): Promise<SyGridSpillReport>;\n  createRangeChart(params: SyGridChartCreateParams): Promise<SyGridChartCreateResult>;\n  updateChart(chartId: string, patch: SyGridChartUpdatePatch): Promise<SyGridChartUpdateResult>;\n  destroyChart(chartId: string): Promise<SyGridChartDestroyResult>;\n  getChartRefs(): Promise<SyGridChartReport[]>;\n  syncCharts(mutation?: SyGridChartSyncMutation): Promise<SyGridChartSyncReport>;\n  getChartMenuModel(permissions?: SyGridChartPermissions): Promise<SyGridChartMenuReport>;\n  openChartToolPanel(permissions?: SyGridChartPermissions): Promise<SyGridChartPanelReport>;\n  closeChartToolPanel(): Promise<SyGridChartPanelReport>;\n  getChartToolPanelReport(): Promise<SyGridChartPanelReport>;\n  activateChartToolPanelItem(): Promise<SyGridChartCreateResult>;\n  getChartModels(): Promise<SyGridChartCaptureResult>;\n  restoreChartModels(envelope: unknown): Promise<SyGridChartRestoreResult>;\n  exportChartImage(\n    chartId: string,\n    request: SyGridChartExportRequest,\n  ): Promise<SyGridChartExportResult>;\n  applyChartCrossFilter(\n    chartId: string,\n    colId: string,\n    action: SyGridChartCrossFilterAction,\n    categories: unknown[],\n  ): Promise<SyGridChartCrossFilterResult>;\n  resetChartCrossFilter(): Promise<SyGridChartCrossFilterResult>;\n  getChartAccessibleSummary(chartId: string): Promise<SyGridChartAccessibleReport | null>;\n  getChartFleetReport(): Promise<SyGridChartFleetReport>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/AuditLogFilter","title":"AuditLogFilter","description":""},{"path":"/ko/docs/types/AuditEntry","title":"AuditEntry","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""},{"path":"/ko/docs/types/GridColumnRef","title":"GridColumnRef","description":""},{"path":"/ko/docs/types/GridColumnGroupRef","title":"GridColumnGroupRef","description":""},{"path":"/ko/docs/types/GridRowRef","title":"GridRowRef","description":""},{"path":"/ko/docs/types/GridWorkbookBinding","title":"GridWorkbookBinding","description":""},{"path":"/ko/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""},{"path":"/ko/docs/types/GridEngineTier","title":"GridEngineTier","description":""},{"path":"/ko/docs/types/SnapshotMeta","title":"SnapshotMeta","description":""},{"path":"/ko/docs/types/SnapshotDiff","title":"SnapshotDiff","description":""},{"path":"/ko/docs/types/CellRangeBounds","title":"CellRangeBounds","description":""},{"path":"/ko/docs/types/GridRowTransaction","title":"GridRowTransaction","description":""},{"path":"/ko/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""},{"path":"/ko/docs/types/SyGridRowTransactionResult","title":"SyGridRowTransactionResult","description":""},{"path":"/ko/docs/types/SyGridCollabConnectOptions","title":"SyGridCollabConnectOptions","description":""},{"path":"/ko/docs/types/GridSyncStatus","title":"GridSyncStatus","description":""},{"path":"/ko/docs/types/GridChunkId","title":"GridChunkId","description":""},{"path":"/ko/docs/types/GridCollaboratorInfo","title":"GridCollaboratorInfo","description":""},{"path":"/ko/docs/types/GridCellComment","title":"GridCellComment","description":""},{"path":"/ko/docs/types/CsvExportOptions","title":"CsvExportOptions","description":""},{"path":"/ko/docs/types/CsvExportResult","title":"CsvExportResult","description":""},{"path":"/ko/docs/types/CsvDownloadOptions","title":"CsvDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridExcelGenerateOptions","title":"SyGridExcelGenerateOptions","description":""},{"path":"/ko/docs/types/SyGridExcelDownloadOptions","title":"SyGridExcelDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridCsvImportOptions","title":"SyGridCsvImportOptions","description":""},{"path":"/ko/docs/types/SyGridApiPdfExportOptions","title":"SyGridApiPdfExportOptions","description":""},{"path":"/ko/docs/types/PdfExportResult","title":"PdfExportResult","description":""},{"path":"/ko/docs/types/SyGridApiPdfDownloadOptions","title":"SyGridApiPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridXlsxImportOptions","title":"SyGridXlsxImportOptions","description":""},{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""},{"path":"/ko/docs/types/ContextMenuItem","title":"ContextMenuItem","description":""},{"path":"/ko/docs/types/SyGridCellTooltipTarget","title":"SyGridCellTooltipTarget","description":""},{"path":"/ko/docs/types/SyGridColumnState","title":"SyGridColumnState","description":""},{"path":"/ko/docs/types/SyGridApplyColumnStateOptions","title":"SyGridApplyColumnStateOptions","description":""},{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/ko/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/ko/docs/types/SyGridFilterSlice","title":"SyGridFilterSlice","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/ko/docs/types/EditTransaction","title":"EditTransaction","description":""},{"path":"/ko/docs/types/CellRenderer","title":"CellRenderer","description":""},{"path":"/ko/docs/types/GridComponentKind","title":"GridComponentKind","description":""},{"path":"/ko/docs/types/GridComponentRegistrationScope","title":"GridComponentRegistrationScope","description":""},{"path":"/ko/docs/types/GridComponentDefinitionFor","title":"GridComponentDefinitionFor","description":""},{"path":"/ko/docs/types/GridRendererDiscovery","title":"GridRendererDiscovery","description":""},{"path":"/ko/docs/types/GridMountedComponentLookup","title":"GridMountedComponentLookup","description":""},{"path":"/ko/docs/types/GridEditorInstance","title":"GridEditorInstance","description":""},{"path":"/ko/docs/types/GridEditorParams","title":"GridEditorParams","description":""},{"path":"/ko/docs/types/GridFilterInstance","title":"GridFilterInstance","description":""},{"path":"/ko/docs/types/ConditionNode","title":"ConditionNode","description":""},{"path":"/ko/docs/types/SyGridCanonicalRange","title":"SyGridCanonicalRange","description":""},{"path":"/ko/docs/types/SyGridCellRangeInput","title":"SyGridCellRangeInput","description":""},{"path":"/ko/docs/types/SyGridCanonicalChange","title":"SyGridCanonicalChange","description":""},{"path":"/ko/docs/types/SyGridBatchStartOptions","title":"SyGridBatchStartOptions","description":""},{"path":"/ko/docs/types/SyGridPendingBatchCell","title":"SyGridPendingBatchCell","description":""},{"path":"/ko/docs/types/SyGridBatchCommitOptions","title":"SyGridBatchCommitOptions","description":""},{"path":"/ko/docs/types/SyGridBatchCommitReport","title":"SyGridBatchCommitReport","description":""},{"path":"/ko/docs/types/SyGridRowEditReport","title":"SyGridRowEditReport","description":""},{"path":"/ko/docs/types/SyGridStateCaptureReport","title":"SyGridStateCaptureReport","description":""},{"path":"/ko/docs/types/SyGridFillRangeOptions","title":"SyGridFillRangeOptions","description":""},{"path":"/ko/docs/types/SyGridFillRangeReport","title":"SyGridFillRangeReport","description":""},{"path":"/ko/docs/types/SyGridDisplayRowInfo","title":"SyGridDisplayRowInfo","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""},{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesOptions","title":"SyGridGroupCheckStatesOptions","description":""},{"path":"/ko/docs/types/SyGridGroupCheckStatesReport","title":"SyGridGroupCheckStatesReport","description":""},{"path":"/ko/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/ko/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""},{"path":"/ko/docs/types/SyGridServerTransactionInput","title":"SyGridServerTransactionInput","description":""},{"path":"/ko/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""},{"path":"/ko/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""},{"path":"/ko/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""},{"path":"/ko/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""},{"path":"/ko/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""},{"path":"/ko/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""},{"path":"/ko/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""},{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""},{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/ko/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/ko/docs/types/SyGridServerGroupChildrenResult","title":"SyGridServerGroupChildrenResult","description":""},{"path":"/ko/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""},{"path":"/ko/docs/types/SyGridRowDragStartInput","title":"SyGridRowDragStartInput","description":""},{"path":"/ko/docs/types/SyGridRowDragStartResult","title":"SyGridRowDragStartResult","description":""},{"path":"/ko/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""},{"path":"/ko/docs/types/SyGridDropZoneInput","title":"SyGridDropZoneInput","description":""},{"path":"/ko/docs/types/SyGridDropZoneRegistration","title":"SyGridDropZoneRegistration","description":""},{"path":"/ko/docs/types/SyGridDropZonesReport","title":"SyGridDropZonesReport","description":""},{"path":"/ko/docs/types/SyGridDragSafetyReport","title":"SyGridDragSafetyReport","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/SyGridFullWidthRowInfo","title":"SyGridFullWidthRowInfo","description":""},{"path":"/ko/docs/types/SyGridFullWidthLayoutReport","title":"SyGridFullWidthLayoutReport","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsInput","title":"SyGridAlignedGridsInput","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsResult","title":"SyGridAlignedGridsResult","description":""},{"path":"/ko/docs/types/SyGridAlignedGridsReport","title":"SyGridAlignedGridsReport","description":""},{"path":"/ko/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""},{"path":"/ko/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/ko/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/ko/docs/types/SyGridSpillApplyInput","title":"SyGridSpillApplyInput","description":""},{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""},{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/ko/docs/types/SyGridChartCreateParams","title":"SyGridChartCreateParams","description":""},{"path":"/ko/docs/types/SyGridChartCreateResult","title":"SyGridChartCreateResult","description":""},{"path":"/ko/docs/types/SyGridChartUpdatePatch","title":"SyGridChartUpdatePatch","description":""},{"path":"/ko/docs/types/SyGridChartUpdateResult","title":"SyGridChartUpdateResult","description":""},{"path":"/ko/docs/types/SyGridChartDestroyResult","title":"SyGridChartDestroyResult","description":""},{"path":"/ko/docs/types/SyGridChartReport","title":"SyGridChartReport","description":""},{"path":"/ko/docs/types/SyGridChartSyncMutation","title":"SyGridChartSyncMutation","description":""},{"path":"/ko/docs/types/SyGridChartSyncReport","title":"SyGridChartSyncReport","description":""},{"path":"/ko/docs/types/SyGridChartPermissions","title":"SyGridChartPermissions","description":""},{"path":"/ko/docs/types/SyGridChartMenuReport","title":"SyGridChartMenuReport","description":""},{"path":"/ko/docs/types/SyGridChartPanelReport","title":"SyGridChartPanelReport","description":""},{"path":"/ko/docs/types/SyGridChartCaptureResult","title":"SyGridChartCaptureResult","description":""},{"path":"/ko/docs/types/SyGridChartRestoreResult","title":"SyGridChartRestoreResult","description":""},{"path":"/ko/docs/types/SyGridChartExportRequest","title":"SyGridChartExportRequest","description":""},{"path":"/ko/docs/types/SyGridChartExportResult","title":"SyGridChartExportResult","description":""},{"path":"/ko/docs/types/SyGridChartCrossFilterAction","title":"SyGridChartCrossFilterAction","description":""},{"path":"/ko/docs/types/SyGridChartCrossFilterResult","title":"SyGridChartCrossFilterResult","description":""},{"path":"/ko/docs/types/SyGridChartAccessibleReport","title":"SyGridChartAccessibleReport","description":""},{"path":"/ko/docs/types/SyGridChartFleetReport","title":"SyGridChartFleetReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPaginationSlice","kind":"type","title":"SyGridPaginationSlice","summary":"SyGridPaginationSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPaginationSlice {\n  readonly pageIndex: number;\n  readonly pageSize: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPdfAutoFontOptions","kind":"type","title":"SyGridPdfAutoFontOptions","summary":"SyGridPdfAutoFontOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPdfAutoFontOptions = {\n  autoFont?: boolean;\n  fontUrl?: string;\n};","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPdfDownloadOptions","title":"SyGridPdfDownloadOptions","description":""},{"path":"/ko/docs/types/SyGridPdfExportOptions","title":"SyGridPdfExportOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPdfDownloadOptions","kind":"type","title":"SyGridPdfDownloadOptions","summary":"SyGridPdfDownloadOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPdfDownloadOptions = Omit<PdfDownloadOptions<GridRow>, 'columns' | 'rows'> & SyGridPdfAutoFontOptions;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/exportDataAsPdf","title":"exportDataAsPdf","description":"표를 PDF 파일로 내려받고 생성 결과를 반환합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfDownloadOptions","title":"PdfDownloadOptions","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPdfExportOptions","kind":"type","title":"SyGridPdfExportOptions","summary":"SyGridPdfExportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPdfExportOptions = Omit<PdfExportOptions<GridRow>, 'columns' | 'rows'> & SyGridPdfAutoFontOptions;","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getDataAsPdf","title":"getDataAsPdf","description":"PDF 다운로드 없이 생성 결과 객체를 얻습니다. 한글 출력에는 지원하는 글꼴을 준비합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/PdfExportOptions","title":"PdfExportOptions","description":""},{"path":"/ko/docs/types/GridRow","title":"GridRow","description":""},{"path":"/ko/docs/types/SyGridPdfAutoFontOptions","title":"SyGridPdfAutoFontOptions","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPendingBatchCell","kind":"type","title":"SyGridPendingBatchCell","summary":"SyGridPendingBatchCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPendingBatchCell {\n  rowId: GridRowId;\n  colId: string;\n  value: unknown;\n  oldValue: unknown;\n  sequence: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getPendingBatchCells","title":"getPendingBatchCells","description":"아직 확정되지 않은 일괄 편집 셀 목록을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRow","kind":"type","title":"SyGridPinnedRow","summary":"SyGridPinnedRow의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRow<TData = GridData> {\n  readonly id: GridRowId;\n  readonly section: SyGridPinnedRowSection;\n  readonly pinSeq: number;\n  readonly rev: number;\n  readonly data: TData;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowBand","kind":"type","title":"SyGridPinnedRowBand","summary":"SyGridPinnedRowBand의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPinnedRowBand = 'top' | 'center' | 'bottom';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowChange","kind":"type","title":"SyGridPinnedRowChange","summary":"SyGridPinnedRowChange의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPinnedRowChange<TData = GridData> =\n  | { readonly kind: 'pinned'; readonly id: GridRowId; readonly section: SyGridPinnedRowSection; readonly index: number; readonly row: SyGridPinnedRow<TData> }\n  | { readonly kind: 'unpinned'; readonly id: GridRowId; readonly section: SyGridPinnedRowSection; readonly index: number; readonly row: SyGridPinnedRow<TData> }\n  | { readonly kind: 'moved'; readonly id: GridRowId; readonly from: { readonly section: SyGridPinnedRowSection; readonly index: number }; readonly to: { readonly section: SyGridPinnedRowSection; readonly index: number }; readonly row: SyGridPinnedRow<TData> }\n  | { readonly kind: 'updated'; readonly id: GridRowId; readonly section: SyGridPinnedRowSection; readonly index: number; readonly row: SyGridPinnedRow<TData>; readonly previous: SyGridPinnedRow<TData> };","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","title":"SyGridPinnedRowsChangedDetail","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridPinnedRowSection","title":"SyGridPinnedRowSection","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowFeature","kind":"type","title":"SyGridPinnedRowFeature","summary":"SyGridPinnedRowFeature의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPinnedRowFeature =\n  | 'row-selection'\n  | 'range-selection'\n  | 'cell-edit'\n  | 'row-edit'\n  | 'fill'\n  | 'clipboard-copy'\n  | 'clipboard-paste'\n  | 'export-csv'\n  | 'export-xlsx'\n  | 'export-pdf'\n  | 'formula-evaluate'\n  | 'formula-reference'\n  | 'rbac-read'\n  | 'rbac-write'\n  | 'keyboard-navigate';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowInfo","kind":"type","title":"SyGridPinnedRowInfo","summary":"SyGridPinnedRowInfo의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowInfo<TData = GridData> {\n  readonly displayIndex: number;\n  readonly band: SyGridPinnedRowBand;\n  readonly index: number;\n  readonly row: SyGridPinnedRow<TData> | null;\n  readonly policy: ReadonlyArray<SyGridPinnedRowPolicyDecision>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getPinnedRowInfo","title":"getPinnedRowInfo","description":"지정한 고정 행의 세부 정보를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridPinnedRowBand","title":"SyGridPinnedRowBand","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowInput","kind":"type","title":"SyGridPinnedRowInput","summary":"SyGridPinnedRowInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowInput<TData = GridData> {\n  readonly id: GridRowId;\n  readonly data: TData;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowSetInput","title":"SyGridPinnedRowSetInput","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowPolicyDecision","kind":"type","title":"SyGridPinnedRowPolicyDecision","summary":"SyGridPinnedRowPolicyDecision의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowPolicyDecision {\n  readonly feature: SyGridPinnedRowFeature;\n  readonly support: 'supported' | 'unsupported' | 'delegated';\n  readonly reason: string;\n  readonly detail: string;\n  readonly delegateKey: 'row-id' | 'pinned-address' | null;\n  readonly mutating: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowInfo","title":"SyGridPinnedRowInfo","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsReport","title":"SyGridPinnedRowsReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowFeature","title":"SyGridPinnedRowFeature","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowRejection","kind":"type","title":"SyGridPinnedRowRejection","summary":"SyGridPinnedRowRejection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowRejection {\n  readonly reason: SyGridPinnedRowRejectionReason;\n  readonly id: GridRowId | null;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowsResult","title":"SyGridPinnedRowsResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowRejectionReason","title":"SyGridPinnedRowRejectionReason","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowRejectionReason","kind":"type","title":"SyGridPinnedRowRejectionReason","summary":"SyGridPinnedRowRejectionReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPinnedRowRejectionReason =\n  | 'invalid-id'\n  | 'already-pinned'\n  | 'duplicate-id'\n  | 'section-conflict'\n  | 'unknown-id'\n  | 'invalid-slice'\n  | 'row-id-required'\n  | 'not-loaded';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowSection","kind":"type","title":"SyGridPinnedRowSection","summary":"SyGridPinnedRowSection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPinnedRowSection = 'top' | 'bottom';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowSetInput","kind":"type","title":"SyGridPinnedRowSetInput","summary":"SyGridPinnedRowSetInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowSetInput<TData = GridData> {\n  readonly top?: ReadonlyArray<SyGridPinnedRowInput<TData>>;\n  readonly bottom?: ReadonlyArray<SyGridPinnedRowInput<TData>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setPinnedRows","title":"setPinnedRows","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridPinnedRowInput","title":"SyGridPinnedRowInput","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowsChangedDetail","kind":"type","title":"SyGridPinnedRowsChangedDetail","summary":"SyGridPinnedRowsChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowsChangedDetail<TData = GridData> {\n  readonly changes: ReadonlyArray<SyGridPinnedRowChange<TData>>;\n  readonly top: ReadonlyArray<GridRowId>;\n  readonly bottom: ReadonlyArray<GridRowId>;\n  readonly source: 'api' | 'prop' | 'state-restore';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/pinnedRowsChanged","title":"pinnedRowsChanged","description":"위·아래 고정 행 데이터가 바뀌었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowsReport","kind":"type","title":"SyGridPinnedRowsReport","summary":"SyGridPinnedRowsReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowsReport<TData = GridData> {\n  readonly loaded: boolean;\n  readonly top: ReadonlyArray<SyGridPinnedRow<TData>>;\n  readonly bottom: ReadonlyArray<SyGridPinnedRow<TData>>;\n  readonly count: number;\n  readonly displayCount: number;\n  readonly centerCount: number;\n  readonly dangling: ReadonlyArray<GridRowId>;\n  readonly idCollisions: ReadonlyArray<GridRowId>;\n  readonly stableRowIds: boolean;\n  readonly policy: ReadonlyArray<SyGridPinnedRowPolicyDecision>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getPinnedRows","title":"getPinnedRows","description":"현재 고정 행 데이터를 보고서로 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridPinnedRow","title":"SyGridPinnedRow","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""},{"path":"/ko/docs/types/SyGridPinnedRowPolicyDecision","title":"SyGridPinnedRowPolicyDecision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowsResult","kind":"type","title":"SyGridPinnedRowsResult","summary":"SyGridPinnedRowsResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowsResult<TData = GridData> {\n  readonly status: 'applied' | 'unchanged' | 'refused';\n  readonly changes: ReadonlyArray<SyGridPinnedRowChange<TData>>;\n  readonly rejected: ReadonlyArray<SyGridPinnedRowRejection>;\n  readonly top: ReadonlyArray<GridRowId>;\n  readonly bottom: ReadonlyArray<GridRowId>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setPinnedRows","title":"setPinnedRows","description":"위·아래 고정 행 데이터를 설정하고 적용 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridPinnedRowChange","title":"SyGridPinnedRowChange","description":""},{"path":"/ko/docs/types/SyGridPinnedRowRejection","title":"SyGridPinnedRowRejection","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPinnedRowsSlice","kind":"type","title":"SyGridPinnedRowsSlice","summary":"SyGridPinnedRowsSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPinnedRowsSlice {\n  readonly topRowIds: readonly SyGridRowId[];\n  readonly bottomRowIds: readonly SyGridRowId[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowId","title":"SyGridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotAxes","kind":"type","title":"SyGridPivotAxes","summary":"SyGridPivotAxes의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotAxes {\n  rowGroupColumns: ReadonlyArray<string>;\n  pivotColumns: ReadonlyArray<string>;\n  valueColumns: ReadonlyArray<string>;\n  includeTotals: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotColumnIdentity","kind":"type","title":"SyGridPivotColumnIdentity","summary":"SyGridPivotColumnIdentity의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotColumnIdentity {\n  valueColumn: string;\n  pivotKey: string;\n  isTotal: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotColumnKind","kind":"type","title":"SyGridPivotColumnKind","summary":"SyGridPivotColumnKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPivotColumnKind = 'row-header' | 'value' | 'total' | 'group';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotColumnMove","kind":"type","title":"SyGridPivotColumnMove","summary":"SyGridPivotColumnMove의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotColumnMove {\n  colId: string;\n  from: number;\n  to: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotColumnsChangedDetail","title":"SyGridPivotColumnsChangedDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotColumnsChangedDetail","kind":"type","title":"SyGridPivotColumnsChangedDetail","summary":"SyGridPivotColumnsChangedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotColumnsChangedDetail {\n  retained: string[];\n  added: string[];\n  removed: string[];\n  moved: SyGridPivotColumnMove[];\n  axesChanged: boolean;\n  columnCount: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/pivotColumnsChanged","title":"pivotColumnsChanged","description":"피벗 결과 열 모델이 바뀌었을 때 발생합니다. 기존 결과 열 ID를 쓰는 차트·출력 코드를 갱신합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotColumnMove","title":"SyGridPivotColumnMove","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","kind":"type","title":"SyGridPivotCombinationConflictDetail","summary":"SyGridPivotCombinationConflictDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotCombinationConflictDetail {\n  feature: SyGridPivotCombinationFeature;\n  support: SyGridPivotCombinationSupport;\n  winner: SyGridPivotCombinationWinner;\n  warning: string;\n  pivotActive: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/pivotCombinationConflict","title":"pivotCombinationConflict","description":"피벗과 다른 기능의 설정이 충돌했을 때 발생합니다. 실제 조합 결정을 보고 앱의 옵션을 조정합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","kind":"type","title":"SyGridPivotCombinationEntry","summary":"SyGridPivotCombinationEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotCombinationEntry {\n  feature: SyGridPivotCombinationFeature;\n  support: SyGridPivotCombinationSupport;\n  winner: SyGridPivotCombinationWinner;\n  warning: string | null;\n  docs: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationSupport","title":"SyGridPivotCombinationSupport","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationWinner","title":"SyGridPivotCombinationWinner","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationFeature","kind":"type","title":"SyGridPivotCombinationFeature","summary":"SyGridPivotCombinationFeature의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPivotCombinationFeature =\n  | 'rowGrouping'\n  | 'treeData'\n  | 'masterDetail'\n  | 'serverSide'\n  | 'viewport'\n  | 'infinite'\n  | 'pagination'\n  | 'quickFilter'\n  | 'columnFilter'\n  | 'sort'\n  | 'rowSpan'\n  | 'colSpan'\n  | 'fullWidthRows'\n  | 'pinnedRows'\n  | 'alignedGrids'\n  | 'rowDrag'\n  | 'clipboard'\n  | 'export'\n  | 'cellSelection';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationReport","title":"SyGridPivotCombinationReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationReport","kind":"type","title":"SyGridPivotCombinationReport","summary":"SyGridPivotCombinationReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotCombinationReport {\n  pivotRequested: boolean;\n  pivotActive: boolean;\n  delegated: boolean;\n  activeFeatures: ReadonlyArray<SyGridPivotCombinationFeature>;\n  ignoredFeatures: ReadonlyArray<SyGridPivotCombinationFeature>;\n  winningFeatures: ReadonlyArray<SyGridPivotCombinationFeature>;\n  warnings: ReadonlyArray<string>;\n  entries: ReadonlyArray<SyGridPivotCombinationEntry>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getPivotCombinationReport","title":"getPivotCombinationReport","description":"현재 피벗과 다른 기능의 조합에서 활성화·우선순위·제한 결정을 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationFeature","title":"SyGridPivotCombinationFeature","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationSupport","kind":"type","title":"SyGridPivotCombinationSupport","summary":"SyGridPivotCombinationSupport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPivotCombinationSupport =\n  | 'supported'\n  | 'delegated'\n  | 'superseded'\n  | 'yields'\n  | 'unsupported';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotCombinationWinner","kind":"type","title":"SyGridPivotCombinationWinner","summary":"SyGridPivotCombinationWinner의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridPivotCombinationWinner = 'pivot' | 'other' | 'both' | 'neither';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotCombinationConflictDetail","title":"SyGridPivotCombinationConflictDetail","description":""},{"path":"/ko/docs/types/SyGridPivotCombinationEntry","title":"SyGridPivotCombinationEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotSecondaryColumn","kind":"type","title":"SyGridPivotSecondaryColumn","summary":"SyGridPivotSecondaryColumn의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotSecondaryColumn {\n  colId: string;\n  kind: SyGridPivotColumnKind;\n  headerName: string;\n  identity: SyGridPivotColumnIdentity | null;\n  parentGroupId: string | null;\n  depth: number;\n  leafIndex: number;\n  width: number | null;\n  pinned: 'left' | 'right' | null;\n  generated: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","title":"SyGridPivotSecondaryColumns","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotColumnKind","title":"SyGridPivotColumnKind","description":""},{"path":"/ko/docs/types/SyGridPivotColumnIdentity","title":"SyGridPivotColumnIdentity","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPivotSecondaryColumns","kind":"type","title":"SyGridPivotSecondaryColumns","summary":"SyGridPivotSecondaryColumns의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPivotSecondaryColumns {\n  columns: ReadonlyArray<SyGridPivotSecondaryColumn>;\n  leaves: ReadonlyArray<SyGridPivotSecondaryColumn>;\n  groups: ReadonlyArray<SyGridPivotSecondaryColumn>;\n  unparsed: ReadonlyArray<string>;\n  duplicateIds: ReadonlyArray<string>;\n  axes: SyGridPivotAxes;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getPivotSecondaryColumns","title":"getPivotSecondaryColumns","description":"현재 클라이언트 피벗이 실제 생성한 결과 열의 식별 모델을 읽습니다. 활성 피벗이 없으면 null입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridPivotSecondaryColumn","title":"SyGridPivotSecondaryColumn","description":""},{"path":"/ko/docs/types/SyGridPivotAxes","title":"SyGridPivotAxes","description":""}]}]}]},{"path":"/ko/docs/types/SyGridPreDestroyedDetail","kind":"type","title":"SyGridPreDestroyedDetail","summary":"SyGridPreDestroyedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridPreDestroyedDetail {\n  state: SyGridState;\n  captureIssues: ReadonlyArray<{ path: string; detail: string }>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/preDestroyed","title":"preDestroyed","description":"Grid가 해제되기 전에 상태와 캡처 문제를 전달합니다. 화면 설정 저장과 자원 정리에 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRemoteEditAppliedEventDetail","kind":"type","title":"SyGridRemoteEditAppliedEventDetail","summary":"SyGridRemoteEditAppliedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"type SyGridRemoteEditAppliedEventDetail<\n  TData,\n  TValue,\n  TContext,\n> = {\n  changes: ReadonlyArray<\n    SyGridCellValueChangedEventDetail<TData, TValue, TContext>\n  >;\n  origin?: unknown;\n};","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellValueChangedEventDetail","title":"SyGridCellValueChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridReparentAtomicity","kind":"type","title":"SyGridReparentAtomicity","summary":"SyGridReparentAtomicity의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridReparentAtomicity = 'all-or-nothing' | 'best-effort';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentRequest","title":"SyGridReparentRequest","description":""}]}]}]},{"path":"/ko/docs/types/SyGridReparentEntry","kind":"type","title":"SyGridReparentEntry","summary":"SyGridReparentEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridReparentEntry {\n  readonly nodeId: string;\n  readonly status: 'moved' | 'refused';\n  readonly reason: SyGridReparentRefusalReason | null;\n  readonly detail: string;\n  readonly previousParentId: string | null;\n  readonly descendantCount: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""},{"path":"/ko/docs/types/SyGridTreeReparentedDetail","title":"SyGridTreeReparentedDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""}]}]}]},{"path":"/ko/docs/types/SyGridReparentRefusalReason","kind":"type","title":"SyGridReparentRefusalReason","summary":"SyGridReparentRefusalReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridReparentRefusalReason =\n  | 'unknown-node'\n  | 'unknown-parent'\n  | 'self-drop'\n  | 'descendant-drop'\n  | 'unresolved-ancestry'\n  | 'existing-cycle'\n  | 'filtered-parent'\n  | 'unloaded-parent'\n  | 'no-op'\n  | 'stale-revision'\n  | 'duplicate-node'\n  | 'depth-limit'\n  | 'ambiguous-id'\n  | 'partial-failure'\n  | 'empty-request'\n  | 'index-out-of-range'\n  | 'not-id-linkage'\n  | 'disposed';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/ko/docs/types/SyGridReparentResult","title":"SyGridReparentResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridReparentRequest","kind":"type","title":"SyGridReparentRequest","summary":"SyGridReparentRequest의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridReparentRequest {\n  readonly nodeIds: ReadonlyArray<string>;\n  readonly newParentId: string | null;\n  readonly childIndex?: number;\n  readonly atomicity?: SyGridReparentAtomicity;\n  readonly maxDepth?: number;\n  readonly allowFilteredParent?: boolean;\n  readonly expectedRevisions?: Readonly<Record<string, number>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/reparentRows","title":"reparentRows","description":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentAtomicity","title":"SyGridReparentAtomicity","description":""}]}]}]},{"path":"/ko/docs/types/SyGridReparentResult","kind":"type","title":"SyGridReparentResult","summary":"SyGridReparentResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridReparentResult =\n  | {\n    readonly status: 'applied';\n    readonly newParentId: string | null;\n    readonly moved: ReadonlyArray<SyGridReparentEntry>;\n    readonly refused: ReadonlyArray<SyGridReparentEntry>;\n    readonly rowCount: number;\n  }\n  | {\n    readonly status: 'refused';\n    readonly reason: SyGridReparentRefusalReason;\n    readonly detail: string;\n    readonly entries: ReadonlyArray<SyGridReparentEntry>;\n  };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/reparentRows","title":"reparentRows","description":"트리 행의 부모를 변경하고 적용·거절 결과를 반환합니다. 순환·권한·행 모델 제한을 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""},{"path":"/ko/docs/types/SyGridReparentRefusalReason","title":"SyGridReparentRefusalReason","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowClickButton","kind":"type","title":"SyGridRowClickButton","summary":"SyGridRowClickButton의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowClickButton = 'left' | 'middle' | 'right' | 'other';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowClickModifiers","kind":"type","title":"SyGridRowClickModifiers","summary":"SyGridRowClickModifiers의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowClickModifiers {\n  ctrl: boolean;\n  shift: boolean;\n  meta: boolean;\n  alt: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellClickedEventDetail","title":"SyGridCellClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridCellDoubleClickedEventDetail","title":"SyGridCellDoubleClickedEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","title":"SyGridRowClickedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowClickedEventDetail","kind":"type","title":"SyGridRowClickedEventDetail","summary":"SyGridRowClickedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowClickedEventDetail<TData = GridData> {\n  row: TData;\n  rowIndex: number;\n  button: SyGridRowClickButton;\n  modifiers: SyGridRowClickModifiers;\n  doubleClick: boolean;\n  dragged: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridRowClickButton","title":"SyGridRowClickButton","description":""},{"path":"/ko/docs/types/SyGridRowClickModifiers","title":"SyGridRowClickModifiers","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDataChangedEventDetail","kind":"type","title":"SyGridRowDataChangedEventDetail","summary":"SyGridRowDataChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDataChangedEventDetail<TData = GridData> {\n  added: ReadonlyArray<{ row: TData; index: number }>;\n  updated: ReadonlyArray<{ row: TData; previous: TData; index: number }>;\n  removed: ReadonlyArray<{ row: TData; index: number }>;\n  rejected: ReadonlyArray<{\n    kind: 'add' | 'update' | 'remove';\n    row: unknown;\n    reason: string;\n  }>;\n  txId: number;\n  source?: SyGridEditSource;\n  origin?: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/SyGridEditSource","title":"SyGridEditSource","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragCancelDetail","kind":"type","title":"SyGridRowDragCancelDetail","summary":"SyGridRowDragCancelDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragCancelDetail {\n  readonly dragId: string;\n  readonly item: SyGridRowDragItem | null;\n  readonly reason: SyGridRowDragEndReason;\n  readonly cause: SyGridDragOrphanCause | 'escape' | 'cancel' | 'no-target' | 'keyboard';\n  readonly residue: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowDragCancel","title":"rowDragCancel","description":"행 드래그가 취소되었을 때 발생합니다. 완료 처리나 서버 순서 저장을 실행하지 마세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/ko/docs/types/SyGridRowDragEndReason","title":"SyGridRowDragEndReason","description":""},{"path":"/ko/docs/types/SyGridDragOrphanCause","title":"SyGridDragOrphanCause","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragEndDetail","kind":"type","title":"SyGridRowDragEndDetail","summary":"SyGridRowDragEndDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragEndDetail extends SyGridRowDragEventDetail {\n  readonly delegated: boolean;\n  readonly suggestedInsertionIndex: number | null;\n  readonly transfer: SyGridRowTransferReport | null;\n  readonly residue: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowDragEnd","title":"rowDragEnd","description":"행 드래그가 끝났을 때 발생합니다. 실제 반영 결과와 드롭 위치를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragEndReason","kind":"type","title":"SyGridRowDragEndReason","summary":"SyGridRowDragEndReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowDragEndReason =\n  | 'drop' | 'escape' | 'cancel' | 'no-target' | 'pointer-cancel' | 'capture-lost' | 'blur';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragEventDetail","kind":"type","title":"SyGridRowDragEventDetail","summary":"SyGridRowDragEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragEventDetail {\n  readonly dragId: string;\n  readonly item: SyGridRowDragItem;\n  readonly target: SyGridRowDragTarget | null;\n  readonly insertionIndex: number | null;\n  readonly stale?: boolean;\n  readonly keyboard: boolean;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowDragEnter","title":"rowDragEnter","description":"행 드래그가 대상 영역에 진입했을 때 발생합니다."},{"path":"/ko/docs/events/rowDragMove","title":"rowDragMove","description":"행 드래그가 이동 중일 때 발생합니다. 고빈도 이벤트이므로 무거운 저장 작업을 매번 실행하지 마세요."},{"path":"/ko/docs/events/rowDragLeave","title":"rowDragLeave","description":"행 드래그가 영역을 벗어났을 때 발생합니다. 드래그 완료와는 다른 상태입니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""},{"path":"/ko/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/ko/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragItem","kind":"type","title":"SyGridRowDragItem","summary":"SyGridRowDragItem의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragItem {\n  readonly dragId: string;\n  readonly mode: 'managed' | 'unmanaged';\n  readonly sourceZoneId: string;\n  readonly rowKey: string;\n  readonly startIndex: number;\n  readonly data: unknown;\n  readonly rowKeys: ReadonlyArray<string>;\n  readonly rows: ReadonlyArray<unknown>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragCancelDetail","title":"SyGridRowDragCancelDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragSessionReport","kind":"type","title":"SyGridRowDragSessionReport","summary":"SyGridRowDragSessionReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragSessionReport {\n  readonly enabled: boolean;\n  readonly loaded: boolean;\n  readonly gesture: {\n    readonly phase: 'idle' | 'pending' | 'armed' | 'yielded';\n    readonly pointerType: 'mouse' | 'pen' | 'touch' | null;\n    readonly travelled: number;\n    readonly yieldReason: string | null;\n    readonly [extra: string]: unknown;\n  } | null;\n  readonly session: {\n    readonly dragId: string;\n    readonly mode: 'managed' | 'unmanaged';\n    readonly phase: 'dragging' | 'ended';\n    readonly item: SyGridRowDragItem;\n    readonly target: SyGridRowDragTarget | null;\n    readonly [extra: string]: unknown;\n  } | null;\n  readonly report: unknown;\n  readonly events: ReadonlyArray<unknown>;\n  readonly residue: ReadonlyArray<string>;\n  readonly keyboard: { readonly grabbed: boolean; readonly originIndex: number; readonly currentIndex: number } | null;\n  readonly zones: ReadonlyArray<string>;\n  readonly lastAutoScroll: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getRowDragSession","title":"getRowDragSession","description":"현재 행 드래그 세션의 진행 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragItem","title":"SyGridRowDragItem","description":""},{"path":"/ko/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragStartInput","kind":"type","title":"SyGridRowDragStartInput","summary":"SyGridRowDragStartInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragStartInput {\n  readonly rowIndex?: number;\n  readonly rowId?: GridRowId;\n  readonly mode?: 'keyboard' | 'pointer';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/startRowDrag","title":"startRowDrag","description":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragStartResult","kind":"type","title":"SyGridRowDragStartResult","summary":"SyGridRowDragStartResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowDragStartResult =\n  | { readonly status: 'grabbed'; readonly rowIndex: number; readonly rowKey: string }\n  | { readonly status: 'armed'; readonly dragId: string; readonly rowKey: string; readonly rowIndex: number; readonly rowKeys: ReadonlyArray<string> }\n  | { readonly status: 'pending'; readonly rowIndex: number; readonly rowKey: string }\n  | { readonly status: 'refused'; readonly reason: string; readonly detail: string };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/startRowDrag","title":"startRowDrag","description":"공개 입력 계약으로 행 드래그 세션을 시작합니다. 실제 시작 여부와 거절 사유를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDragTarget","kind":"type","title":"SyGridRowDragTarget","summary":"SyGridRowDragTarget의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowDragTarget {\n  readonly zoneId: string;\n  readonly rowIndex: number | null;\n  readonly rowKey: string | null;\n  readonly position: SyGridRowDropPosition;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEventDetail","title":"SyGridRowDragEventDetail","description":""},{"path":"/ko/docs/types/SyGridRowDragSessionReport","title":"SyGridRowDragSessionReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDropPosition","title":"SyGridRowDropPosition","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowDropPosition","kind":"type","title":"SyGridRowDropPosition","summary":"SyGridRowDropPosition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowDropPosition = 'above' | 'below';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragTarget","title":"SyGridRowDragTarget","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowEditReport","kind":"type","title":"SyGridRowEditReport","summary":"SyGridRowEditReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowEditReport {\n  status: 'committed' | 'rejected' | 'cancelled' | 'none';\n  mutationId: GridMutationId | null;\n  writtenCount: number;\n  rejectedCells: ReadonlyArray<SyGridEditRejectedCell>;\n  rowInvalid: {\n    cellReasons: Readonly<Record<string, string>> | null;\n    rowReason: string | null;\n  } | null;\n  droppedCount: number;\n  transactionRejectedRowIds: ReadonlyArray<GridRowId>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/stopRowEdit","title":"stopRowEdit","description":"현재 행 편집을 확정하거나 취소하고 처리 보고서를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridEditRejectedCell","title":"SyGridEditRejectedCell","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowEditStartEventDetail","kind":"type","title":"SyGridRowEditStartEventDetail","summary":"SyGridRowEditStartEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowEditStartEventDetail {\n  rowId: GridRowId;\n  editableColumns: string[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowEditStart","title":"rowEditStart","description":"전체 행 편집이 시작되었을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowEditStopEventDetail","kind":"type","title":"SyGridRowEditStopEventDetail","summary":"SyGridRowEditStopEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowEditStopEventDetail {\n  rowId: GridRowId;\n  status: string;\n  writtenCount: number;\n  reason: 'commit' | 'cancel';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowEditStop","title":"rowEditStop","description":"전체 행 편집이 끝났을 때 발생합니다. 확정과 취소를 구분합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowId","kind":"type","title":"SyGridRowId","summary":"SyGridRowId의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowId = string | number;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowLayoutRefusedDetail","kind":"type","title":"SyGridRowLayoutRefusedDetail","summary":"SyGridRowLayoutRefusedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowLayoutRefusedDetail {\n  readonly area: 'pinned-rows' | 'full-width-rows' | 'aligned-grids' | 'reparent';\n  readonly feature: string;\n  readonly reason: string;\n  readonly detail: string;\n  readonly rowIndex: number | null;\n  readonly colIndex: number | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowLayoutRefused","title":"rowLayoutRefused","description":"요청한 행 레이아웃을 적용할 수 없을 때 발생합니다. 거절 이유에 맞춰 조합을 수정합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowLayoutStatus","kind":"type","title":"SyGridRowLayoutStatus","summary":"SyGridRowLayoutStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridRowLayoutStatus = 'ok' | 'not-configured' | 'not-client-side' | 'auto-height';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowSpanParams","kind":"type","title":"SyGridRowSpanParams","summary":"SyGridRowSpanParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowSpanParams<TData = GridData> {\n  readonly row: TData;\n  readonly index: number;\n  readonly column: ColumnDef<TData>;\n  readonly sectionKey: string | number | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/rowSpan","title":"rowSpan","description":"셀 문맥에서 세로로 차지할 행 수를 반환합니다. 충돌과 표시 모델의 제한은 span 보고서에서 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowSpanRejection","kind":"type","title":"SyGridRowSpanRejection","summary":"SyGridRowSpanRejection의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowSpanRejection {\n  readonly reason:\n    | 'invalid-span'\n    | 'callback-threw'\n    | 'non-deterministic'\n    | 'clamped-to-section'\n    | 'clamped-to-end'\n    | 'clamped-to-max';\n  readonly index: number;\n  readonly requested: number | null;\n  readonly applied: number;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridRowSpanReport","title":"SyGridRowSpanReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowSpanReport","kind":"type","title":"SyGridRowSpanReport","summary":"SyGridRowSpanReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowSpanReport {\n  readonly status: SyGridRowLayoutStatus;\n  readonly colId: string;\n  readonly rowCount: number;\n  readonly spans: ReadonlyArray<{ readonly originIndex: number; readonly span: number; readonly endIndex: number }>;\n  readonly rejected: ReadonlyArray<SyGridRowSpanRejection>;\n  readonly callbackCalls: number;\n  readonly cache: {\n    readonly revision: number;\n    readonly entries: number;\n    readonly hits: number;\n    readonly misses: number;\n    readonly invalidations: number;\n    readonly lastReason: 'sort' | 'filter' | 'group' | 'data' | 'height' | 'columns' | 'manual' | null;\n  };\n  readonly maxRowSpan: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getRowSpan","title":"getRowSpan","description":"세로 병합 범위의 계산 결과를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/ko/docs/types/SyGridRowSpanRejection","title":"SyGridRowSpanRejection","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowTransactionResult","kind":"type","title":"SyGridRowTransactionResult","summary":"SyGridRowTransactionResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowTransactionResult<TData = GridData> {\n  rows: TData[];\n  added: ReadonlyArray<{ row: TData; index: number }>;\n  updated: ReadonlyArray<{ row: TData; previous: TData; index: number }>;\n  removed: ReadonlyArray<{ row: TData; index: number }>;\n  rejected: ReadonlyArray<{\n    kind: 'add' | 'update' | 'remove';\n    row: unknown;\n    reason: string;\n  }>;\n  meta: { txId: number; timestamp: number };\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowTransferEntry","kind":"type","title":"SyGridRowTransferEntry","summary":"SyGridRowTransferEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowTransferEntry {\n  readonly rowKey: string;\n  readonly outcome: string;\n  readonly reason: string | null;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowTransferReport","kind":"type","title":"SyGridRowTransferReport","summary":"SyGridRowTransferReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowTransferReport {\n  readonly transferId: string;\n  readonly sourceZoneId: string;\n  readonly targetZoneId: string;\n  readonly mode: 'move' | 'copy';\n  readonly requested: number;\n  readonly transferred: number;\n  readonly refused: number;\n  readonly entries: ReadonlyArray<SyGridRowTransferEntry>;\n  readonly [extra: string]: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowDragEndDetail","title":"SyGridRowDragEndDetail","description":""},{"path":"/ko/docs/types/SyGridRowsTransferredDetail","title":"SyGridRowsTransferredDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowTransferEntry","title":"SyGridRowTransferEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowValueChangedEventDetail","kind":"type","title":"SyGridRowValueChangedEventDetail","summary":"SyGridRowValueChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowValueChangedEventDetail {\n  mutationId: GridMutationId;\n  rowId: GridRowId;\n  writtenCount: number;\n  oldRow: Readonly<Record<string, unknown>>;\n  newRow: Readonly<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowValueChanged","title":"rowValueChanged","description":"전체 행 편집의 값 변경 결과를 알립니다. 한 행에 대한 저장 단위를 구성할 때 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridRowsTransferredDetail","kind":"type","title":"SyGridRowsTransferredDetail","summary":"SyGridRowsTransferredDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridRowsTransferredDetail {\n  readonly transferId: string;\n  readonly sourceZoneId: string;\n  readonly targetZoneId: string;\n  readonly mode: 'move' | 'copy';\n  readonly report: SyGridRowTransferReport;\n  readonly outcome:\n    | { readonly outcome: 'applied'; readonly sourceWritten: boolean; readonly targetWritten: boolean }\n    | { readonly outcome: 'reverted'; readonly failedSide: 'source' | 'target'; readonly error: string; readonly targetUndone: boolean }\n    | { readonly outcome: 'compromised'; readonly [extra: string]: unknown };\n  readonly commit: unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/rowsTransferred","title":"rowsTransferred","description":"드롭 영역 간 행 전달 결과를 알립니다. 실제 이동·복사·거절 결과를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowTransferReport","title":"SyGridRowTransferReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridScrollSlice","kind":"type","title":"SyGridScrollSlice","summary":"SyGridScrollSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridScrollSlice {\n  readonly top: number;\n  readonly left: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSelectionChangedEventDetail","kind":"type","title":"SyGridSelectionChangedEventDetail","summary":"SyGridSelectionChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSelectionChangedEventDetail {\n  mode: 'single' | 'multi' | 'none';\n  selectedRowIds: ReadonlyArray<GridRowId>;\n  addedIds: ReadonlyArray<GridRowId>;\n  removedIds: ReadonlyArray<GridRowId>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridRowId","title":"GridRowId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerBlockSnapshot","kind":"type","title":"SyGridServerBlockSnapshot","summary":"SyGridServerBlockSnapshot의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerBlockSnapshot {\n  blockNumber: number;\n  status: 'loading' | 'loaded' | 'failed';\n  rowCount: number;\n  startRow: number;\n  endRow: number;\n  lastAccess: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerCacheSnapshot","kind":"type","title":"SyGridServerCacheSnapshot","summary":"SyGridServerCacheSnapshot의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerCacheSnapshot {\n  present: boolean;\n  blockSize: number;\n  maxBlocks: number;\n  rowCount: number;\n  lastRowKnown: boolean;\n  virtualRowCount: number;\n  loadedBlockCount: number;\n  loadingBlockCount: number;\n  failedBlockCount: number;\n  complete: boolean;\n  firstUnloadedBlock: number;\n  accessSeq: number;\n  blocks: ReadonlyArray<SyGridServerBlockSnapshot>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerBlockSnapshot","title":"SyGridServerBlockSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerFlushCause","kind":"type","title":"SyGridServerFlushCause","summary":"SyGridServerFlushCause의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerFlushCause = 'window' | 'api' | 'destroy-drain';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerFlushReport","kind":"type","title":"SyGridServerFlushReport","summary":"SyGridServerFlushReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerFlushReport {\n  status: SyGridServerFlushStatus;\n  batchId: number;\n  settledCount: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/flushServerSideAsyncTransactions","title":"flushServerSideAsyncTransactions","description":"대기 중인 서버 행 트랜잭션을 처리하고 완료 보고서를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerFlushStatus","title":"SyGridServerFlushStatus","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerFlushStatus","kind":"type","title":"SyGridServerFlushStatus","summary":"SyGridServerFlushStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerFlushStatus =\n  | 'flushed'\n  | 'empty'\n  | 'refused-reentrant'\n  | 'refused-destroyed';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerFlushReport","title":"SyGridServerFlushReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerGroupChildrenResult","kind":"type","title":"SyGridServerGroupChildrenResult","summary":"SyGridServerGroupChildrenResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerGroupChildrenResult {\n  status: 'applied' | 'unchanged' | 'refused' | 'not-server-side' | 'no-row-id' | 'model-mismatch';\n  reason: string;\n  groupKeys: ReadonlyArray<string>;\n  action: 'select' | 'deselect';\n  loadedSelectedRowIds: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/selectServerGroupChildren","title":"selectServerGroupChildren","description":"그룹 키 경로 아래의 서버 하위 행들을 선택하거나 선택 해제합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerGroupToggledNode","kind":"type","title":"SyGridServerGroupToggledNode","summary":"SyGridServerGroupToggledNode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerGroupToggledNode {\n  rowId: string;\n  selectAllChildren?: boolean;\n  toggledNodes?: ReadonlyArray<SyGridServerGroupToggledNode>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerPivotColumnAudit","kind":"type","title":"SyGridServerPivotColumnAudit","summary":"SyGridServerPivotColumnAudit의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerPivotColumnAudit {\n  status: 'ok' | 'no-metadata' | 'refused';\n  stale: boolean;\n  results: ReadonlyArray<{\n    colId: string;\n    disposition: SyGridServerPivotUsageDisposition;\n  }>;\n  liveCount: number;\n  staleCount: number;\n  unknownCount: number;\n  clean: boolean;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/auditServerPivotResultColumns","title":"auditServerPivotResultColumns","description":"차트·출력·복원에 쓰려는 서버 피벗 열 ID가 현재 모델에 존재하는지 검사합니다. 사라진 열을 계속 사용하지 않도록 결과를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotUsageDisposition","title":"SyGridServerPivotUsageDisposition","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerPivotColumnDescriptor","kind":"type","title":"SyGridServerPivotColumnDescriptor","summary":"SyGridServerPivotColumnDescriptor의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerPivotColumnDescriptor {\n  colId: string;\n  kind: 'value' | 'group';\n  headerName: string;\n  field: string;\n  groupPath: ReadonlyArray<string>;\n  identityKey: string;\n  hasParentGroup: boolean;\n  parentGroupId: string;\n  depth: number;\n  leafIndex: number;\n  meta: Readonly<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotColumnsReport","title":"SyGridServerPivotColumnsReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerPivotColumnsReport","kind":"type","title":"SyGridServerPivotColumnsReport","summary":"SyGridServerPivotColumnsReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerPivotColumnsReport {\n  status: 'ok' | 'no-metadata' | 'refused';\n  source: 'columns' | 'fields' | 'none';\n  stale: boolean;\n  columns: ReadonlyArray<SyGridServerPivotColumnDescriptor>;\n  leafCount: number;\n  groupCount: number;\n  coverageChecked: boolean;\n  fieldsWithoutColumn: ReadonlyArray<string>;\n  leavesWithoutField: ReadonlyArray<string>;\n  duplicateIds: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getServerPivotResultColumns","title":"getServerPivotResultColumns","description":"서버가 제공한 피벗 결과 열 모델을 읽습니다. stale과 메타데이터 없음 상태를 구분합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotColumnDescriptor","title":"SyGridServerPivotColumnDescriptor","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerPivotUsageDisposition","kind":"type","title":"SyGridServerPivotUsageDisposition","summary":"SyGridServerPivotUsageDisposition의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerPivotUsageDisposition = 'live' | 'live-stale' | 'unknown-column';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerPivotColumnAudit","title":"SyGridServerPivotColumnAudit","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerRefreshInput","kind":"type","title":"SyGridServerRefreshInput","summary":"SyGridServerRefreshInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerRefreshInput {\n  route?: ReadonlyArray<string>;\n  mode?: SyGridServerRefreshMode;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/refreshServerSide","title":"refreshServerSide","description":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerRefreshMode","kind":"type","title":"SyGridServerRefreshMode","summary":"SyGridServerRefreshMode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerRefreshMode = 'soft' | 'purge';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerRefreshInput","title":"SyGridServerRefreshInput","description":""},{"path":"/ko/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerRefreshResult","kind":"type","title":"SyGridServerRefreshResult","summary":"SyGridServerRefreshResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerRefreshResult {\n  status: SyGridServerRefreshStatus;\n  storeId: string;\n  mode: SyGridServerRefreshMode;\n  reloadedStoreIds: ReadonlyArray<string>;\n  closedStoreIds: ReadonlyArray<string>;\n  recreatedStoreIds: ReadonlyArray<string>;\n  abortedStoreIds: ReadonlyArray<string>;\n  rescuedLoadingBlocks: number;\n  generation: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/refreshServerSide","title":"refreshServerSide","description":"지정한 서버 저장소 범위를 새로 조회하고 처리 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerRefreshStatus","title":"SyGridServerRefreshStatus","description":""},{"path":"/ko/docs/types/SyGridServerRefreshMode","title":"SyGridServerRefreshMode","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerRefreshStatus","kind":"type","title":"SyGridServerRefreshStatus","summary":"SyGridServerRefreshStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerRefreshStatus =\n  | 'accepted'\n  | 'invalid-route'\n  | 'store-not-open'\n  | 'not-server-side';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerRefreshResult","title":"SyGridServerRefreshResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectAllResult","kind":"type","title":"SyGridServerSelectAllResult","summary":"SyGridServerSelectAllResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerSelectAllResult {\n  status: 'applied' | 'unchanged' | 'not-server-side' | 'no-row-id';\n  model: SyGridServerSelectionModel;\n  action: 'select' | 'clear';\n  loadedSelectedRowIds: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/selectAllServerSide","title":"selectAllServerSide","description":"서버 데이터 전체를 행별로 메모리에 펼치지 않고 전체 선택 조건을 설정합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectionModel","kind":"type","title":"SyGridServerSelectionModel","summary":"SyGridServerSelectionModel의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerSelectionModel = 'flat' | 'group';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectAllResult","title":"SyGridServerSelectAllResult","description":""},{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""},{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectionSetResult","kind":"type","title":"SyGridServerSelectionSetResult","summary":"SyGridServerSelectionSetResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerSelectionSetResult {\n  status: SyGridServerSelectionSetStatus;\n  model: SyGridServerSelectionModel;\n  reason: string;\n  droppedDuplicateIds: ReadonlyArray<string>;\n  droppedInvalidCount: number;\n  loadedSelectedRowIds: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setServerSideSelectionState","title":"setServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 교체합니다."},{"path":"/ko/docs/methods/setServerGroupSelectionState","title":"setServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 선택 상태를 교체합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionSetStatus","title":"SyGridServerSelectionSetStatus","description":""},{"path":"/ko/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectionSetStatus","kind":"type","title":"SyGridServerSelectionSetStatus","summary":"SyGridServerSelectionSetStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerSelectionSetStatus =\n  | 'applied'\n  | 'refused'\n  | 'not-server-side'\n  | 'no-row-id'\n  | 'model-mismatch';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionSetResult","title":"SyGridServerSelectionSetResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectionState","kind":"type","title":"SyGridServerSelectionState","summary":"SyGridServerSelectionState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerSelectionState {\n  status: SyGridServerSelectionStatus;\n  model: SyGridServerSelectionModel;\n  selectAll: boolean;\n  toggledRowIds: ReadonlyArray<string>;\n  toggledNodes: ReadonlyArray<SyGridServerGroupToggledNode>;\n  selectedCount: number;\n  selectedCountKnown: boolean;\n  loadedSelectedRowIds: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getServerSideSelectionState","title":"getServerSideSelectionState","description":"평면 서버 행 모델의 전체 선택 조건과 예외 ID를 읽습니다. 그룹형 모델에서는 모델 불일치를 보고합니다."},{"path":"/ko/docs/methods/getServerGroupSelectionState","title":"getServerGroupSelectionState","description":"그룹형 서버 행 모델의 계층적 전체 선택·예외 상태를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridSelectionChangedDetail","title":"GridSelectionChangedDetail","description":""},{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionStatus","title":"SyGridServerSelectionStatus","description":""},{"path":"/ko/docs/types/SyGridServerSelectionModel","title":"SyGridServerSelectionModel","description":""},{"path":"/ko/docs/types/SyGridServerGroupToggledNode","title":"SyGridServerGroupToggledNode","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerSelectionStatus","kind":"type","title":"SyGridServerSelectionStatus","summary":"SyGridServerSelectionStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerSelectionStatus =\n  | 'ok'\n  | 'not-server-side'\n  | 'no-row-id'\n  | 'model-mismatch';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerSelectionState","title":"SyGridServerSelectionState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerStateReport","kind":"type","title":"SyGridServerStateReport","summary":"SyGridServerStateReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerStateReport {\n  registryId: string;\n  topologySignature: string;\n  generation: number;\n  seq: number;\n  storeCount: number;\n  stores: ReadonlyArray<SyGridServerStoreSnapshot>;\n  nodesWithoutStore: ReadonlyArray<string>;\n  expandedWithoutNode: ReadonlyArray<string>;\n  discardedStaleLandings: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getServerSideStoreState","title":"getServerSideStoreState","description":"서버 행 저장소의 경로·상태·블록 캐시를 읽습니다. 로딩 정도는 상태 이름뿐 아니라 블록 수와 complete도 함께 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerStoreSnapshot","kind":"type","title":"SyGridServerStoreSnapshot","summary":"SyGridServerStoreSnapshot의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerStoreSnapshot {\n  storeId: string;\n  kind: 'root' | 'nested' | 'tree' | 'pivot';\n  routeKeys: ReadonlyArray<string>;\n  path: string;\n  level: number;\n  leaf: boolean;\n  storeSeq: number;\n  generation: number;\n  status: SyGridServerStoreStatus;\n  hasParent: boolean;\n  parentStoreId: string;\n  expanded: boolean;\n  cache: SyGridServerCacheSnapshot;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStateReport","title":"SyGridServerStateReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""},{"path":"/ko/docs/types/SyGridServerCacheSnapshot","title":"SyGridServerCacheSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerStoreStatus","kind":"type","title":"SyGridServerStoreStatus","summary":"SyGridServerStoreStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerStoreStatus =\n  | 'empty'\n  | 'loading'\n  | 'partial'\n  | 'loaded'\n  | 'failed'\n  | 'stale';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreSnapshot","title":"SyGridServerStoreSnapshot","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerStoreUpdateKind","kind":"type","title":"SyGridServerStoreUpdateKind","summary":"SyGridServerStoreUpdateKind의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerStoreUpdateKind =\n  | 'fetch-started'\n  | 'block-loaded'\n  | 'block-failed'\n  | 'fetch-aborted'\n  | 'stale-load-discarded'\n  | 'rows-changed';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","title":"SyGridServerStoreUpdatedDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerStoreUpdatedDetail","kind":"type","title":"SyGridServerStoreUpdatedDetail","summary":"SyGridServerStoreUpdatedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerStoreUpdatedDetail {\n  mutationId: GridMutationId;\n  storeId: string;\n  storeSeq: number;\n  update: SyGridServerStoreUpdateKind;\n  generation: number;\n  previousStatus: SyGridServerStoreStatus;\n  status: SyGridServerStoreStatus;\n  requestId?: number;\n  blockNumber?: number;\n  rowsLoaded?: number;\n  rowsChanged?: { added: number; updated: number; removed: number };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/serverStoreUpdated","title":"serverStoreUpdated","description":"서버 행 저장소가 갱신되었을 때 발생합니다. 경로와 캐시 상태를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridServerStoreUpdateKind","title":"SyGridServerStoreUpdateKind","description":""},{"path":"/ko/docs/types/SyGridServerStoreStatus","title":"SyGridServerStoreStatus","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionEnqueue","kind":"type","title":"SyGridServerTransactionEnqueue","summary":"SyGridServerTransactionEnqueue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerTransactionEnqueue {\n  status: SyGridServerTransactionEnqueueStatus;\n  txnId: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionEnqueueStatus","title":"SyGridServerTransactionEnqueueStatus","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionEnqueueStatus","kind":"type","title":"SyGridServerTransactionEnqueueStatus","summary":"SyGridServerTransactionEnqueueStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerTransactionEnqueueStatus =\n  | 'queued'\n  | 'refused-destroyed'\n  | 'not-server-side'\n  | 'no-row-id';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionEnqueue","title":"SyGridServerTransactionEnqueue","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionInput","kind":"type","title":"SyGridServerTransactionInput","summary":"SyGridServerTransactionInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerTransactionInput {\n  route?: ReadonlyArray<string>;\n  add?: ReadonlyArray<Record<string, unknown>>;\n  addIndex?: number;\n  update?: ReadonlyArray<Record<string, unknown>>;\n  remove?: ReadonlyArray<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."},{"path":"/ko/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionResult","kind":"type","title":"SyGridServerTransactionResult","summary":"SyGridServerTransactionResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridServerTransactionResult {\n  status: SyGridServerTransactionStatus;\n  storeId: string;\n  added: ReadonlyArray<Record<string, unknown>>;\n  updated: ReadonlyArray<Record<string, unknown>>;\n  removed: ReadonlyArray<Record<string, unknown>>;\n  unresolved: ReadonlyArray<Record<string, unknown>>;\n  aggregateStaleStoreIds: ReadonlyArray<string>;\n  regroupOwedRowIds: ReadonlyArray<string>;\n  closedStoreIds: ReadonlyArray<string>;\n  droppedNodePaths: ReadonlyArray<string>;\n  droppedExpandedPaths: ReadonlyArray<string>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyServerSideTransaction","title":"applyServerSideTransaction","description":"서버 행 모델의 캐시에 행 변경을 반영합니다. 서버 원본 저장과 구분합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridServerTransactionSettlement","title":"SyGridServerTransactionSettlement","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionStatus","title":"SyGridServerTransactionStatus","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionSettlement","kind":"type","title":"SyGridServerTransactionSettlement","summary":"SyGridServerTransactionSettlement의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerTransactionSettlement =\n  | {\n    disposition: 'flushed';\n    txnId: number;\n    batchId: number;\n    cause: SyGridServerFlushCause;\n    result: SyGridServerTransactionResult;\n  }\n  | { disposition: 'cancelled'; txnId: number; result: SyGridServerTransactionResult }\n  | { disposition: 'destroyed'; txnId: number; result: SyGridServerTransactionResult };","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applyServerSideTransactionAsync","title":"applyServerSideTransactionAsync","description":"서버 행 트랜잭션을 비동기 큐에 넣습니다. 최종 반영 결과와 큐 등록 결과는 다릅니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerFlushCause","title":"SyGridServerFlushCause","description":""},{"path":"/ko/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridServerTransactionStatus","kind":"type","title":"SyGridServerTransactionStatus","summary":"SyGridServerTransactionStatus의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridServerTransactionStatus =\n  | 'applied'\n  | 'route-invalid'\n  | 'store-not-found'\n  | 'store-loading'\n  | 'cancelled'\n  | 'not-server-side'\n  | 'no-row-id';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridServerTransactionResult","title":"SyGridServerTransactionResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSideBarSlice","kind":"type","title":"SyGridSideBarSlice","summary":"SyGridSideBarSlice의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSideBarSlice {\n  readonly openPanelId: 'columns' | 'filters' | null;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSortChangedEventDetail","kind":"type","title":"SyGridSortChangedEventDetail","summary":"SyGridSortChangedEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSortChangedEventDetail {\n  field: string | null;\n  direction: 'asc' | 'desc' | null;\n  previous: SyGridSortModelEntry | null;\n  sortModel: SyGridSortModelEntry[];\n  previousModel: SyGridSortModelEntry[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSortModelEntry","title":"SyGridSortModelEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSortModelEntry","kind":"type","title":"SyGridSortModelEntry","summary":"SyGridSortModelEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSortModelEntry {\n  field: string;\n  direction: 'asc' | 'desc';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridSortChangedEventDetail","title":"SyGridSortChangedEventDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanAddress","kind":"type","title":"SyGridSpanAddress","summary":"SyGridSpanAddress의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpanAddress {\n  readonly rowIndex: number;\n  readonly colIndex: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanCombination","kind":"type","title":"SyGridSpanCombination","summary":"SyGridSpanCombination의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridSpanCombination = 'single' | 'row' | 'column' | 'rectangular';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridCellSpanInfo","title":"SyGridCellSpanInfo","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanConflict","kind":"type","title":"SyGridSpanConflict","summary":"SyGridSpanConflict의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpanConflict {\n  readonly reason: 'ragged-row-span' | 'ragged-col-span' | 'overlapping-rect' | 'dropped-cover';\n  readonly rowIndex: number;\n  readonly colIndex: number;\n  readonly requestedRowSpan: number;\n  readonly requestedColSpan: number;\n  readonly appliedRowSpan: number;\n  readonly appliedColSpan: number;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanConflictEventDetail","title":"SyGridSpanConflictEventDetail","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanConflictEventDetail","kind":"type","title":"SyGridSpanConflictEventDetail","summary":"SyGridSpanConflictEventDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpanConflictEventDetail {\n  readonly conflicts: ReadonlyArray<SyGridSpanConflict>;\n  readonly renderRange: { readonly startIndex: number; readonly endIndex: number };\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/spanConflict","title":"spanConflict","description":"셀 병합이 다른 범위나 레이아웃과 충돌했을 때 발생합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanFeature","kind":"type","title":"SyGridSpanFeature","summary":"SyGridSpanFeature의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridSpanFeature = 'selection' | 'focus' | 'edit' | 'copy' | 'fill' | 'export' | 'aria';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanInteractionQuery","title":"SyGridSpanInteractionQuery","description":""},{"path":"/ko/docs/types/SyGridSpanInteractionReport","title":"SyGridSpanInteractionReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanInteractionQuery","kind":"type","title":"SyGridSpanInteractionQuery","summary":"SyGridSpanInteractionQuery의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpanInteractionQuery {\n  readonly feature: SyGridSpanFeature;\n  readonly rowIndex: number;\n  readonly colId: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpanInteractionReport","kind":"type","title":"SyGridSpanInteractionReport","summary":"SyGridSpanInteractionReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpanInteractionReport {\n  readonly status: SyGridRowLayoutStatus;\n  readonly window: { readonly startIndex: number; readonly endIndex: number };\n  readonly renderRange: { readonly startIndex: number; readonly endIndex: number };\n  readonly report: {\n    readonly rowCount: number;\n    readonly columnCount: number;\n    readonly cellCount: number;\n    readonly coveredCount: number;\n    readonly combinations: Readonly<Record<SyGridSpanCombination, number>>;\n    readonly conflicts: Readonly<Record<SyGridSpanConflict['reason'], number>>;\n    readonly rowAxisRejections: number;\n    readonly colAxisRejections: number;\n  } | null;\n  readonly conflicts: ReadonlyArray<SyGridSpanConflict>;\n  readonly exportMode: 'origin-once' | 'repeat';\n  readonly access: {\n    readonly feature: SyGridSpanFeature;\n    readonly requested: SyGridSpanAddress;\n    readonly origin: SyGridSpanAddress;\n    readonly redirected: boolean;\n    readonly mutating: boolean;\n  } | null;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getSpanInteraction","title":"getSpanInteraction","description":"병합 셀과 선택·복사 등 상호작용의 처리 결과를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridRowLayoutStatus","title":"SyGridRowLayoutStatus","description":""},{"path":"/ko/docs/types/SyGridSpanCombination","title":"SyGridSpanCombination","description":""},{"path":"/ko/docs/types/SyGridSpanConflict","title":"SyGridSpanConflict","description":""},{"path":"/ko/docs/types/SyGridSpanFeature","title":"SyGridSpanFeature","description":""},{"path":"/ko/docs/types/SyGridSpanAddress","title":"SyGridSpanAddress","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillApplyInput","kind":"type","title":"SyGridSpillApplyInput","summary":"SyGridSpillApplyInput의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillApplyInput {\n  col: number;\n  row: number;\n  source: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applySpillFormula","title":"applySpillFormula","description":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillApplyResult","kind":"type","title":"SyGridSpillApplyResult","summary":"SyGridSpillApplyResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillApplyResult {\n  status: 'landed' | 'landed-blocked' | 'refused';\n  reason: SyGridSpillRefusalReason | null;\n  mutationId: GridMutationId | null;\n  anchor: SyGridSpillTarget;\n  rows: number;\n  cols: number;\n  collisions: ReadonlyArray<SyGridSpillCollision>;\n  blockingCell: SyGridSpillTarget | null;\n  reconciledEmptyCells: number;\n  unpaintedCells: number;\n  rangeHash: string;\n  stateHash: string;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/applySpillFormula","title":"applySpillFormula","description":"동적 배열 수식을 충돌 정책에 따라 원자적으로 적용합니다. 충돌·거절·화면에 그려지지 않은 영역을 보고서에서 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/ko/docs/types/SyGridSpillCollision","title":"SyGridSpillCollision","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillClearResult","kind":"type","title":"SyGridSpillClearResult","summary":"SyGridSpillClearResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillClearResult {\n  status: 'cleared' | 'not-an-anchor' | 'refused';\n  reason: SyGridSpillRefusalReason | null;\n  mutationId: GridMutationId | null;\n  anchor: SyGridSpillTarget;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""},{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillCollision","kind":"type","title":"SyGridSpillCollision","summary":"SyGridSpillCollision의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillCollision {\n  col: number;\n  row: number;\n  classes: ReadonlyArray<'occupied' | 'protected' | 'merged-span' | 'spill-overlap'>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillRangeReport","kind":"type","title":"SyGridSpillRangeReport","summary":"SyGridSpillRangeReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillRangeReport {\n  anchor: SyGridSpillTarget;\n  source: string;\n  rows: number;\n  cols: number;\n  status: 'spilled' | 'blocked';\n  rangeHash: string;\n  cellCount: number;\n  cells: ReadonlyArray<SyGridWorkbookSnapshotCell>;\n  unpaintedCells: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillRefusalReason","kind":"type","title":"SyGridSpillRefusalReason","summary":"SyGridSpillRefusalReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridSpillRefusalReason =\n  | 'workbook-inactive'\n  | 'engine-lane-unsupported'\n  | 'outside-grid'\n  | 'row-unaddressable'\n  | 'invalid-formula'\n  | 'invalid-argument'\n  | 'collision';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""},{"path":"/ko/docs/types/SyGridSpillUndoResult","title":"SyGridSpillUndoResult","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillReport","kind":"type","title":"SyGridSpillReport","summary":"SyGridSpillReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillReport {\n  status: 'ok' | 'refused';\n  reason: SyGridSpillRefusalReason | null;\n  engineLane: 'js' | 'dual' | 'none';\n  anchors: ReadonlyArray<SyGridSpillRangeReport>;\n  overlaps: ReadonlyArray<{\n    col: number;\n    row: number;\n    anchors: ReadonlyArray<SyGridSpillTarget>;\n  }>;\n  stateHash: string;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getSpillReport","title":"getSpillReport","description":"현재 동적 배열 수식과 차지한 범위의 상태를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/ko/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/ko/docs/types/SyGridSpillTarget","title":"SyGridSpillTarget","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillTarget","kind":"type","title":"SyGridSpillTarget","summary":"SyGridSpillTarget의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillTarget {\n  col: number;\n  row: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/clearSpillFormula","title":"clearSpillFormula","description":"동적 배열 수식의 기준 셀을 지우고 차지하던 범위를 정리합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridSpillApplyResult","title":"SyGridSpillApplyResult","description":""},{"path":"/ko/docs/types/SyGridSpillClearResult","title":"SyGridSpillClearResult","description":""},{"path":"/ko/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/ko/docs/types/SyGridSpillReport","title":"SyGridSpillReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridSpillUndoResult","kind":"type","title":"SyGridSpillUndoResult","summary":"SyGridSpillUndoResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridSpillUndoResult {\n  status: 'undone' | 'unknown-mutation' | 'refused';\n  reason: SyGridSpillRefusalReason | null;\n  mutationId: GridMutationId | null;\n  appliedWrites: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/undoSpillTransaction","title":"undoSpillTransaction","description":"동적 배열 수식 트랜잭션을 되돌리고 처리 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillRefusalReason","title":"SyGridSpillRefusalReason","description":""},{"path":"/ko/docs/types/GridMutationId","title":"GridMutationId","description":""}]}]}]},{"path":"/ko/docs/types/SyGridState","kind":"type","title":"SyGridState","summary":"SyGridState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridState {\n  readonly version: SyGridStateVersion;\n  readonly slices: Readonly<Partial<Record<SyGridStateSliceKey, unknown>>>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/initialState","title":"initialState","description":"Grid의 첫 초기화에 한 번 적용할 버전 포함 화면 상태입니다. 실행 중 복원은 setState를 사용합니다."},{"path":"/ko/docs/methods/getState","title":"getState","description":"버전이 포함된 전체 화면 상태의 불변 스냅샷을 읽습니다. 원본 행 데이터를 백업하는 API가 아닙니다."},{"path":"/ko/docs/methods/setState","title":"setState","description":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""},{"path":"/ko/docs/types/SyGridPreDestroyedDetail","title":"SyGridPreDestroyedDetail","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateVersion","title":"SyGridStateVersion","description":""},{"path":"/ko/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateApplyReport","kind":"type","title":"SyGridStateApplyReport","summary":"SyGridStateApplyReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridStateApplyReport {\n  readonly ok: boolean;\n  readonly issues: readonly SyGridStateEnvelopeIssue[];\n  readonly appliedSlices: readonly SyGridStateSliceKey[];\n  readonly requestedAbsentSlices: readonly SyGridStateSliceKey[];\n  readonly unrestorableSlices: readonly SyGridStateSliceKey[];\n  readonly columns: ColumnsSliceApplyResult['report'] | null;\n  readonly filter: FilterSliceApplyResult['report'] | null;\n  readonly rows: RowsSlicesApplyResult['report'] | null;\n  readonly uiUnavailable: readonly UiRestorePlan['unavailable'][number][];\n  readonly afterDataPending: boolean;\n  readonly appliedMigrations: readonly string[];\n  readonly droppedSlices: readonly { slice: string; reason: string }[];\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/setState","title":"setState","description":"전체 또는 지정한 화면 상태 조각을 복원하고 적용·문제 보고서를 반환합니다. appliedSlices에 있는 부분만 실제 반영됩니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""},{"path":"/ko/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/ko/docs/types/ColumnsSliceApplyResult","title":"ColumnsSliceApplyResult","description":""},{"path":"/ko/docs/types/FilterSliceApplyResult","title":"FilterSliceApplyResult","description":""},{"path":"/ko/docs/types/RowsSlicesApplyResult","title":"RowsSlicesApplyResult","description":""},{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateCaptureReport","kind":"type","title":"SyGridStateCaptureReport","summary":"SyGridStateCaptureReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridStateCaptureReport {\n  issues: ReadonlyArray<{ path: string; detail: string }>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getStateCaptureReport","title":"getStateCaptureReport","description":"최근 화면 상태 캡처에서 생략·문제가 있었는지 읽습니다. 저장된 상태의 완전성을 확인할 때 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateEnvelopeIssue","kind":"type","title":"SyGridStateEnvelopeIssue","summary":"SyGridStateEnvelopeIssue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridStateEnvelopeIssue {\n  readonly code: SyGridStateEnvelopeIssueCode;\n  readonly path: string;\n  readonly detail: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateEnvelopeIssueCode","title":"SyGridStateEnvelopeIssueCode","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateEnvelopeIssueCode","kind":"type","title":"SyGridStateEnvelopeIssueCode","summary":"SyGridStateEnvelopeIssueCode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridStateEnvelopeIssueCode =\n  | 'not-an-object'\n  | 'missing-version'\n  | 'malformed-version'\n  | 'newer-major-version'\n  | 'missing-slices'\n  | 'malformed-slices'\n  | 'unknown-slice'\n  | 'duplicate-slice'\n  | 'non-serializable'\n  | 'not-entitled';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateEnvelopeIssue","title":"SyGridStateEnvelopeIssue","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateSliceKey","kind":"type","title":"SyGridStateSliceKey","summary":"SyGridStateSliceKey의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridStateSliceKey = \"filter\" | \"pivot\" | \"columns\" | \"rowGrouping\" | \"expansion\" | \"selection\" | \"focus\" | \"scroll\" | \"pagination\" | \"pinnedRows\" | \"sideBar\" | \"find\";","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridStateApplyOptions","title":"GridStateApplyOptions","description":""},{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""},{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""},{"path":"/ko/docs/types/SyGridStateUpdatedDetail","title":"SyGridStateUpdatedDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateUpdatedDetail","kind":"type","title":"SyGridStateUpdatedDetail","summary":"SyGridStateUpdatedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridStateUpdatedDetail {\n  changedSlices: SyGridStateSliceKey[];\n  sources: StateUpdateSource[];\n  coalescedBatches: number;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/stateUpdated","title":"stateUpdated","description":"통합 화면 상태가 갱신되었을 때 발생합니다. 잦은 이벤트는 앱에서 저장 주기를 조절하세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateSliceKey","title":"SyGridStateSliceKey","description":""},{"path":"/ko/docs/types/StateUpdateSource","title":"StateUpdateSource","description":""}]}]}]},{"path":"/ko/docs/types/SyGridStateVersion","kind":"type","title":"SyGridStateVersion","summary":"SyGridStateVersion의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridStateVersion = `sy-grid-state/${number}.${number}.${number}`;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridState","title":"SyGridState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridTreeReparentedDetail","kind":"type","title":"SyGridTreeReparentedDetail","summary":"SyGridTreeReparentedDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridTreeReparentedDetail {\n  readonly newParentId: string | null;\n  readonly childIndex: number;\n  readonly moved: ReadonlyArray<SyGridReparentEntry>;\n  readonly refused: ReadonlyArray<SyGridReparentEntry>;\n  readonly bumped: ReadonlyArray<string>;\n  readonly source: 'api' | 'drag';\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/treeReparented","title":"treeReparented","description":"트리 행의 부모 변경 결과를 알립니다. 앱 서버의 부모 관계 저장과 연결할 수 있습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridReparentEntry","title":"SyGridReparentEntry","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookCellVerdict","kind":"type","title":"SyGridWorkbookCellVerdict","summary":"SyGridWorkbookCellVerdict의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridWorkbookCellVerdict =\n  | 'cyclic'\n  | 'cycle-dependent'\n  | 'unproven'\n  | 'proven-acyclic';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookFlushCause","kind":"type","title":"SyGridWorkbookFlushCause","summary":"SyGridWorkbookFlushCause의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridWorkbookFlushCause =\n  | 'enroll'\n  | 'resync'\n  | 'commit'\n  | 'flush'\n  | 'spill'\n  | 'spill-undo';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookPropagationDetail","title":"SyGridWorkbookPropagationDetail","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookFlushReport","kind":"type","title":"SyGridWorkbookFlushReport","summary":"SyGridWorkbookFlushReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookFlushReport {\n  status: 'flushed' | 'empty' | 'inactive';\n  reason: SyGridWorkbookInactiveReason | null;\n  transactionCount: number;\n  generations: ReadonlyArray<number>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/flushWorkbookPropagation","title":"flushWorkbookPropagation","description":"대기 중인 워크북 값 전파를 처리하고 결과를 반환합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","kind":"type","title":"SyGridWorkbookInactiveReason","summary":"SyGridWorkbookInactiveReason의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridWorkbookInactiveReason = 'formulas-off' | 'not-bound';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookFlushReport","title":"SyGridWorkbookFlushReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookIntegrityCell","kind":"type","title":"SyGridWorkbookIntegrityCell","summary":"SyGridWorkbookIntegrityCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookIntegrityCell {\n  col: number;\n  row: number;\n  verdict: SyGridWorkbookCellVerdict;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","title":"SyGridWorkbookIntegrityReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookCellVerdict","title":"SyGridWorkbookCellVerdict","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookIntegrityReport","kind":"type","title":"SyGridWorkbookIntegrityReport","summary":"SyGridWorkbookIntegrityReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookIntegrityReport {\n  status: 'ok' | 'inactive';\n  reason: SyGridWorkbookInactiveReason | null;\n  cyclicCells: number;\n  cycleDependentCells: number;\n  unprovenCells: number;\n  provenAcyclicCells: number;\n  sheetVerdicts: ReadonlyArray<SyGridWorkbookIntegrityCell>;\n  publishingCycleCells: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getWorkbookIntegrityReport","title":"getWorkbookIntegrityReport","description":"워크북 연결과 값 전파의 일관성 검사 결과를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/ko/docs/types/SyGridWorkbookIntegrityCell","title":"SyGridWorkbookIntegrityCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookPropagationDetail","kind":"type","title":"SyGridWorkbookPropagationDetail","summary":"SyGridWorkbookPropagationDetail의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookPropagationDetail {\n  workbookId: string;\n  sheetName: string;\n  workbookKey: number;\n  sheetId: number;\n  registrationId: number;\n  txId: number;\n  generation: number;\n  snapshotHash: string;\n  publishedCellCount: number;\n  changedCellCount: number;\n  clearedCellCount: number;\n  importedCellCount: number;\n  importFailureCount: number;\n  cyclicCellCount: number;\n  unroutedCellCount: number;\n  cause: SyGridWorkbookFlushCause;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/events/workbookValuesPropagated","title":"workbookValuesPropagated","description":"시트 사이에 값 전파가 처리되었을 때 발생합니다. 전파 결과와 세대 정보를 확인합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookFlushCause","title":"SyGridWorkbookFlushCause","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookPropagationState","kind":"type","title":"SyGridWorkbookPropagationState","summary":"SyGridWorkbookPropagationState의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookPropagationState {\n  status: 'active' | 'inactive';\n  reason: SyGridWorkbookInactiveReason | null;\n  workbookId: string;\n  sheetName: string;\n  workbookKey: number;\n  sheetId: number;\n  registrationId: number;\n  generation: number;\n  registeredFormulaCells: number;\n  registrationFailures: ReadonlyArray<SyGridWorkbookRegistrationFailure>;\n  lastPublication: SyGridWorkbookPublicationStamp | null;\n  hubTrackedFormulas: number;\n  hubCyclicCells: number;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getWorkbookPropagationState","title":"getWorkbookPropagationState","description":"시트 간 수식 전파의 연결·등록·거절 상태와 마지막 발행 정보를 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""},{"path":"/ko/docs/types/SyGridWorkbookPublicationStamp","title":"SyGridWorkbookPublicationStamp","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookPublicationStamp","kind":"type","title":"SyGridWorkbookPublicationStamp","summary":"SyGridWorkbookPublicationStamp의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookPublicationStamp {\n  txId: number;\n  generation: number;\n  snapshotHash: string;\n  publishedCellCount: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailure","kind":"type","title":"SyGridWorkbookRegistrationFailure","summary":"SyGridWorkbookRegistrationFailure의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookRegistrationFailure {\n  col: number;\n  row: number;\n  field: string;\n  source: string;\n  code: SyGridWorkbookRegistrationFailureCode;\n  message: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookPropagationState","title":"SyGridWorkbookPropagationState","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailureCode","title":"SyGridWorkbookRegistrationFailureCode","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailureCode","kind":"type","title":"SyGridWorkbookRegistrationFailureCode","summary":"SyGridWorkbookRegistrationFailureCode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type SyGridWorkbookRegistrationFailureCode =\n  | 'missing-sheet'\n  | 'ambiguous-sheet'\n  | 'stale-binding'\n  | 'unbounded-remote-range'\n  | 'remote-range-too-large'\n  | 'formula-syntax'\n  | 'unexpected';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookRegistrationFailure","title":"SyGridWorkbookRegistrationFailure","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookSnapshotCell","kind":"type","title":"SyGridWorkbookSnapshotCell","summary":"SyGridWorkbookSnapshotCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookSnapshotCell {\n  col: number;\n  row: number;\n  field: string;\n  value: string | number | boolean | null;\n  canonical: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSpillRangeReport","title":"SyGridSpillRangeReport","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","title":"SyGridWorkbookSnapshotReport","description":""}]}]}]},{"path":"/ko/docs/types/SyGridWorkbookSnapshotReport","kind":"type","title":"SyGridWorkbookSnapshotReport","summary":"SyGridWorkbookSnapshotReport의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridWorkbookSnapshotReport {\n  status: 'ok' | 'unpublished' | 'inactive';\n  reason: SyGridWorkbookInactiveReason | null;\n  workbookKey: number;\n  sheetId: number;\n  registrationId: number;\n  generation: number;\n  snapshotHash: string;\n  cells: ReadonlyArray<SyGridWorkbookSnapshotCell>;\n  issue: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/getWorkbookSnapshotReport","title":"getWorkbookSnapshotReport","description":"마지막으로 발행된 워크북 셀과 해시·세대 정보를 읽습니다. 전체 Grid 데이터가 모두 발행되었다고 가정하지 마세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridWorkbookInactiveReason","title":"SyGridWorkbookInactiveReason","description":""},{"path":"/ko/docs/types/SyGridWorkbookSnapshotCell","title":"SyGridWorkbookSnapshotCell","description":""}]}]}]},{"path":"/ko/docs/types/SyGridXlsxImportOptions","kind":"type","title":"SyGridXlsxImportOptions","summary":"SyGridXlsxImportOptions의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface SyGridXlsxImportOptions {\n  sheetName?: string;\n  snapshot?: SheetToRowDataOptions;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SheetToRowDataOptions","title":"SheetToRowDataOptions","description":""}]}]}]},{"path":"/ko/docs/types/TextFilterOp","kind":"type","title":"TextFilterOp","summary":"TextFilterOp의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type TextFilterOp =\n  | 'contains'\n  | 'notContains'\n  | 'equals'\n  | 'notEqual'\n  | 'startsWith'\n  | 'endsWith';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/TextFilterSpec","title":"TextFilterSpec","description":""}]}]}]},{"path":"/ko/docs/types/TextFilterSpec","kind":"type","title":"TextFilterSpec","summary":"TextFilterSpec의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface TextFilterSpec<TRow = unknown> {\n  field: string;\n  op: TextFilterOp;\n  value: string;\n  caseSensitive?: boolean;\n  trim?: boolean;\n  valueGetter?: (row: TRow) => unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ActiveFilter","title":"ActiveFilter","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/TextFilterOp","title":"TextFilterOp","description":""}]}]}]},{"path":"/ko/docs/types/UiRestorePlan","kind":"type","title":"UiRestorePlan","summary":"UiRestorePlan의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface UiRestorePlan {\n  readonly immediate: {\n    readonly sideBar: SyGridSideBarSlice;\n    readonly pagination: SyGridPaginationSlice;\n  };\n  readonly afterData: {\n    readonly scroll: SyGridScrollSlice;\n    readonly focus: SyGridFocusSlice;\n    readonly pinnedRows: SyGridPinnedRowsSlice | null;\n  };\n  readonly unavailable: readonly UiUnavailableEntry[];\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridStateApplyReport","title":"SyGridStateApplyReport","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridSideBarSlice","title":"SyGridSideBarSlice","description":""},{"path":"/ko/docs/types/SyGridPaginationSlice","title":"SyGridPaginationSlice","description":""},{"path":"/ko/docs/types/SyGridScrollSlice","title":"SyGridScrollSlice","description":""},{"path":"/ko/docs/types/SyGridFocusSlice","title":"SyGridFocusSlice","description":""},{"path":"/ko/docs/types/SyGridPinnedRowsSlice","title":"SyGridPinnedRowsSlice","description":""},{"path":"/ko/docs/types/UiUnavailableEntry","title":"UiUnavailableEntry","description":""}]}]}]},{"path":"/ko/docs/types/UiUnavailableEntry","kind":"type","title":"UiUnavailableEntry","summary":"UiUnavailableEntry의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface UiUnavailableEntry {\n  readonly slice: 'focus' | 'scroll' | 'pagination' | 'sideBar' | 'pinnedRows';\n  readonly path: string;\n  readonly reason: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/UiRestorePlan","title":"UiRestorePlan","description":""}]}]}]},{"path":"/ko/docs/types/ValidationRule","kind":"type","title":"ValidationRule","summary":"ValidationRule의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ValidationRule {\n  field: string;\n  type: ValidationRuleType;\n  value?: unknown;\n  value2?: unknown;\n  values?: readonly unknown[];\n  pattern?: string;\n  validator?: (value: unknown, data: Record<string, unknown>) => boolean | string;\n  message?: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/validationRules","title":"validationRules","description":"입력값의 필수 여부·범위·목록·패턴·사용자 검증 등을 정의합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ValidationRuleType","title":"ValidationRuleType","description":""}]}]}]},{"path":"/ko/docs/types/ValidationRuleType","kind":"type","title":"ValidationRuleType","summary":"ValidationRuleType의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type ValidationRuleType =\n  | 'required'\n  | 'number'\n  | 'integer'\n  | 'min'\n  | 'max'\n  | 'range'\n  | 'minLength'\n  | 'maxLength'\n  | 'pattern'\n  | 'oneOf'\n  | 'custom';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ValidationRule","title":"ValidationRule","description":""}]}]}]},{"path":"/ko/docs/types/ValueFormatterParams","kind":"type","title":"ValueFormatterParams","summary":"ValueFormatterParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ValueFormatterParams<TData = GridData, TValue = unknown, TContext = unknown> {\n  value: TValue;\n  data: Readonly<TData>;\n  colDef: ColumnDef<TData, TValue, TContext>;\n  context: TContext;\n  api: SyGridApi<TData, TContext>;\n  node: { rowIndex: number };\n  colId: string;\n  locale: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueFormatter","title":"valueFormatter","description":"셀 값을 통화·날짜 등 읽기 쉬운 문자열로 표시합니다. 저장된 원본 타입은 바꾸지 않습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/ValueGetterParams","kind":"type","title":"ValueGetterParams","summary":"ValueGetterParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ValueGetterParams<TData = GridData, TValue = unknown, TContext = unknown> {\n  data: Readonly<TData>;\n  colDef: ColumnDef<TData, TValue, TContext>;\n  rowIndex: number;\n  context: TContext;\n  api: SyGridApi<TData, TContext>;\n  node: { rowIndex: number; rowId?: string | number };\n  colId: string;\n  getValue: (otherColId: string) => unknown;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueGetter","title":"valueGetter","description":"원본 행에서 계산한 셀 값을 반환합니다. 단순 표시 문자열만 바꾸려면 valueFormatter를 사용합니다."},{"path":"/ko/docs/columns/tooltipValueGetter","title":"tooltipValueGetter","description":"현재 셀 문맥으로 툴팁 내용을 계산합니다. 권한 없는 값을 우회 노출하지 마세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/ValueParserParams","kind":"type","title":"ValueParserParams","summary":"ValueParserParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ValueParserParams<TData = GridData, TValue = unknown, TContext = unknown> {\n  value: string;\n  oldValue: TValue;\n  field: GridFieldPath<TData>;\n  row: Readonly<TData>;\n  colDef: ColumnDef<TData, TValue, TContext>;\n  context: TContext;\n  api: SyGridApi<TData, TContext>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueParser","title":"valueParser","description":"입력 문자열을 저장할 타입으로 변환합니다. 숫자·날짜 등의 정규화에 사용합니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/ValueSetterParams","kind":"type","title":"ValueSetterParams","summary":"ValueSetterParams의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ValueSetterParams<TData = GridData, TValue = unknown, TContext = unknown> {\n  newValue: TValue;\n  oldValue: TValue;\n  field: GridFieldPath<TData>;\n  data: TData;\n  colDef: ColumnDef<TData, TValue, TContext>;\n  context: TContext;\n  api: SyGridApi<TData, TContext>;\n  rowIndex: number;\n  sourceRowIndex?: number;\n  colId: string;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/columns/valueSetter","title":"valueSetter","description":"변환된 값을 원본 행에 반영하는 사용자 저장 로직입니다. 변경 여부의 반환 계약을 확인하세요."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridData","title":"GridData","description":""},{"path":"/ko/docs/types/GridFieldPath","title":"GridFieldPath","description":""},{"path":"/ko/docs/types/ColumnDef","title":"ColumnDef","description":""},{"path":"/ko/docs/types/SyGridApi","title":"SyGridApi","description":""}]}]}]},{"path":"/ko/docs/types/ViewportDatasource","kind":"type","title":"ViewportDatasource","summary":"ViewportDatasource의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ViewportDatasource<TRow> {\n  init(callbacks: {\n    setRowCount(count: number): void;\n    setRowData(startIndex: number, rows: TRow[]): void;\n  }): void;\n  setViewportRange(\n    firstRow: number,\n    lastRow: number,\n    request?: ViewportRequestContext,\n  ): void;\n  destroy?(): void;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/options/viewportDatasource","title":"viewportDatasource","description":"현재 화면에 보이는 행 범위에 맞춰 데이터를 공급하는 뷰포트 모델입니다. 초기화·범위 변경·정리를 구현합니다."}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ViewportRequestContext","title":"ViewportRequestContext","description":""}]}]}]},{"path":"/ko/docs/types/ViewportRequestContext","kind":"type","title":"ViewportRequestContext","summary":"ViewportRequestContext의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface ViewportRequestContext {\n  readonly sortModel: ReadonlyArray<{\n    readonly colId: string;\n    readonly sort: 'asc' | 'desc';\n  }>;\n  readonly filterModel: Readonly<Record<string, unknown>>;\n  readonly quickFilter?: string;\n  readonly advancedFilterModel?: unknown;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/ViewportDatasource","title":"ViewportDatasource","description":""}]}]}]},{"path":"/ko/docs/types/WorkbookRegistryErrorCode","kind":"type","title":"WorkbookRegistryErrorCode","summary":"WorkbookRegistryErrorCode의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type WorkbookRegistryErrorCode =\n  | 'invalid-workbook-id'\n  | 'invalid-sheet-name'\n  | 'invalid-owner'\n  | 'duplicate-sheet'\n  | 'owner-conflict'\n  | 'foreign-registration'\n  | 'stale-registration'\n  | 'workbook-disposing'\n  | 'registry-disposed'\n  | 'workbook-id-exhausted'\n  | 'cleanup-failed';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridWorkbookBindingErrorDetail","title":"GridWorkbookBindingErrorDetail","description":""}]}]}]},{"path":"/ko/docs/types/XlsxAlignment","kind":"type","title":"XlsxAlignment","summary":"XlsxAlignment의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxAlignment {\n  readonly horizontal?: 'left' | 'center' | 'right' | 'fill' | 'justify';\n  readonly vertical?: 'top' | 'center' | 'bottom';\n  readonly wrapText?: boolean;\n  readonly indent?: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/ko/docs/types/XlsxBorder","kind":"type","title":"XlsxBorder","summary":"XlsxBorder의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxBorder {\n  readonly top?: XlsxBorderEdge;\n  readonly right?: XlsxBorderEdge;\n  readonly bottom?: XlsxBorderEdge;\n  readonly left?: XlsxBorderEdge;\n  readonly all?: XlsxBorderEdge;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""}]}]}]},{"path":"/ko/docs/types/XlsxBorderEdge","kind":"type","title":"XlsxBorderEdge","summary":"XlsxBorderEdge의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxBorderEdge {\n  readonly style?: XlsxBorderStyle;\n  readonly color?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxBorder","title":"XlsxBorder","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxBorderStyle","title":"XlsxBorderStyle","description":""}]}]}]},{"path":"/ko/docs/types/XlsxBorderStyle","kind":"type","title":"XlsxBorderStyle","summary":"XlsxBorderStyle의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type XlsxBorderStyle =\n  | 'thin'\n  | 'medium'\n  | 'thick'\n  | 'dashed'\n  | 'dotted'\n  | 'double'\n  | 'hair';","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxBorderEdge","title":"XlsxBorderEdge","description":""}]}]}]},{"path":"/ko/docs/types/XlsxCell","kind":"type","title":"XlsxCell","summary":"XlsxCell의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxCell {\n  readonly value: XlsxCellValue;\n  readonly style?: XlsxCellStyle;\n  readonly formula?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxRow","title":"XlsxRow","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellValue","title":"XlsxCellValue","description":""},{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/ko/docs/types/XlsxCellStyle","kind":"type","title":"XlsxCellStyle","summary":"XlsxCellStyle의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxCellStyle {\n  readonly alignment?: XlsxAlignment;\n  readonly font?: XlsxFont;\n  readonly fill?: XlsxFill;\n  readonly border?: XlsxBorder;\n  readonly numberFormat?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxAlignment","title":"XlsxAlignment","description":""},{"path":"/ko/docs/types/XlsxFont","title":"XlsxFont","description":""},{"path":"/ko/docs/types/XlsxFill","title":"XlsxFill","description":""},{"path":"/ko/docs/types/XlsxBorder","title":"XlsxBorder","description":""}]}]}]},{"path":"/ko/docs/types/XlsxCellValue","kind":"type","title":"XlsxCellValue","summary":"XlsxCellValue의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export type XlsxCellValue = string | number | boolean | null | undefined;","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]}]},{"path":"/ko/docs/types/XlsxCellXf","kind":"type","title":"XlsxCellXf","summary":"XlsxCellXf의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxCellXf {\n  readonly numFmtId: number;\n  readonly fontId: number;\n  readonly fillId: number;\n  readonly borderId: number;\n  readonly xfId: number;\n  readonly applyNumberFormat: boolean;\n  readonly applyFont: boolean;\n  readonly applyFill: boolean;\n  readonly applyBorder: boolean;\n  readonly applyAlignment: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""}]}]}]},{"path":"/ko/docs/types/XlsxColumnDef","kind":"type","title":"XlsxColumnDef","summary":"XlsxColumnDef의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxColumnDef {\n  readonly field: string;\n  readonly headerName: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxGridSnapshot","title":"XlsxGridSnapshot","description":""}]}]}]},{"path":"/ko/docs/types/XlsxDefinedName","kind":"type","title":"XlsxDefinedName","summary":"XlsxDefinedName의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxDefinedName {\n  readonly name: string;\n  readonly localSheetIndex?: number;\n  readonly value: string;\n  readonly hidden: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""}]}]}]},{"path":"/ko/docs/types/XlsxFill","kind":"type","title":"XlsxFill","summary":"XlsxFill의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxFill {\n  readonly color?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/ko/docs/types/XlsxFont","kind":"type","title":"XlsxFont","summary":"XlsxFont의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxFont {\n  readonly bold?: boolean;\n  readonly italic?: boolean;\n  readonly underline?: boolean;\n  readonly strike?: boolean;\n  readonly size?: number;\n  readonly color?: string;\n  readonly name?: string;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellStyle","title":"XlsxCellStyle","description":""}]}]}]},{"path":"/ko/docs/types/XlsxGridSnapshot","kind":"type","title":"XlsxGridSnapshot","summary":"XlsxGridSnapshot의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxGridSnapshot {\n  readonly columnDefs: ReadonlyArray<XlsxColumnDef>;\n  readonly rowData: ReadonlyArray<Record<string, unknown>>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/GridXlsxImportedDetail","title":"GridXlsxImportedDetail","description":""},{"path":"/ko/docs/types/SyGridEventMap","title":"SyGridEventMap","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxColumnDef","title":"XlsxColumnDef","description":""}]}]}]},{"path":"/ko/docs/types/XlsxImportResult","kind":"type","title":"XlsxImportResult","summary":"XlsxImportResult의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxImportResult {\n  readonly workbook: XlsxWorkbook;\n  readonly sharedStrings: ReadonlyArray<string>;\n  readonly styles: XlsxStyleSheet;\n  readonly sheets: ReadonlyMap<string, XlsxImportSheet>;\n}","language":"typescript"}]},{"id":"used-by","title":"이 타입을 사용하는 API","blocks":[{"kind":"links","items":[{"path":"/ko/docs/methods/importDataFromXlsx","title":"importDataFromXlsx","description":"파일 바이트를 워크북으로 파싱합니다. 반환값은 XlsxImportResult이며 Grid용 snapshot은 xlsxImported 이벤트에서 읽습니다."}]}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/SyGridImperativeMethods","title":"SyGridImperativeMethods","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""},{"path":"/ko/docs/types/XlsxStyleSheet","title":"XlsxStyleSheet","description":""},{"path":"/ko/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]}]},{"path":"/ko/docs/types/XlsxImportSheet","kind":"type","title":"XlsxImportSheet","summary":"XlsxImportSheet의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxImportSheet {\n  readonly meta: XlsxWorkbookSheet;\n  readonly sheet: XlsxSheet;\n  readonly mergedIndex: ReadonlyMap<string, MergedRangeInfo>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""},{"path":"/ko/docs/types/XlsxSheet","title":"XlsxSheet","description":""},{"path":"/ko/docs/types/MergedRangeInfo","title":"MergedRangeInfo","description":""}]}]}]},{"path":"/ko/docs/types/XlsxRow","kind":"type","title":"XlsxRow","summary":"XlsxRow의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxRow {\n  readonly index: number;\n  readonly heightPt?: number;\n  readonly hidden: boolean;\n  readonly cells: ReadonlyArray<XlsxCell>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxSheet","title":"XlsxSheet","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCell","title":"XlsxCell","description":""}]}]}]},{"path":"/ko/docs/types/XlsxSheet","kind":"type","title":"XlsxSheet","summary":"XlsxSheet의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxSheet {\n  readonly dimension?: string;\n  readonly rows: ReadonlyArray<XlsxRow>;\n  readonly mergedRanges: ReadonlyArray<string>;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxRow","title":"XlsxRow","description":""}]}]}]},{"path":"/ko/docs/types/XlsxStyleSheet","kind":"type","title":"XlsxStyleSheet","summary":"XlsxStyleSheet의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxStyleSheet {\n  readonly numFmts: ReadonlyMap<number, string>;\n  readonly cellXfs: ReadonlyArray<XlsxCellXf>;\n  readonly fontCount: number;\n  readonly fillCount: number;\n  readonly borderCount: number;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxCellXf","title":"XlsxCellXf","description":""}]}]}]},{"path":"/ko/docs/types/XlsxWorkbook","kind":"type","title":"XlsxWorkbook","summary":"XlsxWorkbook의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxWorkbook {\n  readonly sheets: ReadonlyArray<XlsxWorkbookSheet>;\n  readonly definedNames: ReadonlyArray<XlsxDefinedName>;\n  readonly date1904: boolean;\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportResult","title":"XlsxImportResult","description":""}]}]},{"id":"related","title":"연결된 타입","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxWorkbookSheet","title":"XlsxWorkbookSheet","description":""},{"path":"/ko/docs/types/XlsxDefinedName","title":"XlsxDefinedName","description":""}]}]}]},{"path":"/ko/docs/types/XlsxWorkbookSheet","kind":"type","title":"XlsxWorkbookSheet","summary":"XlsxWorkbookSheet의 필드와 허용 값, 이 타입을 사용하는 API입니다.","sections":[{"id":"definition","title":"타입 정의","blocks":[{"kind":"paragraph","text":"물음표(?)는 선택 항목이고 readonly는 직접 변경하지 않는 값입니다. 유니온(|)은 허용된 형태 중 하나를 뜻합니다. 함수는 해당 시점에 Grid가 호출할 콜백입니다."},{"kind":"code","source":"export interface XlsxWorkbookSheet {\n  readonly name: string;\n  readonly sheetId: number;\n  readonly relId: string;\n  readonly state: 'visible' | 'hidden' | 'veryHidden';\n}","language":"typescript"}]},{"id":"parents","title":"이 타입을 포함하는 계약","blocks":[{"kind":"links","items":[{"path":"/ko/docs/types/XlsxImportSheet","title":"XlsxImportSheet","description":""},{"path":"/ko/docs/types/XlsxWorkbook","title":"XlsxWorkbook","description":""}]}]}]}]}